diff options
| author | Mai <mai.iam2048@gmail.com> | 2022-12-29 04:48:24 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-12-29 04:48:24 +0000 |
| commit | 7552deeff4d95d7799c59fe00253a3c1ce86f40b (patch) | |
| tree | d02963cf983422c73c7672e4a5a14f399d0403c2 /Source/Core/VideoBackends | |
| parent | 82e5f438f954ad822a25eb3261eb9a5d6972ab7f (diff) | |
| parent | 7e55cc9e9044df8382367c5fbcf0dddd88a80201 (diff) | |
Merge pull request #11388 from AdmiralCurtiss/globals-vertexshadermanager
VideoCommon: De-globalize VertexShaderManager class.
Diffstat (limited to 'Source/Core/VideoBackends')
7 files changed, 45 insertions, 25 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp b/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp index b3c7012d8b..5b5cf5c941 100644 --- a/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp +++ b/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp @@ -264,12 +264,14 @@ void VertexManager::UploadUniforms() { auto& system = Core::System::GetInstance(); - if (VertexShaderManager::dirty) + auto& vertex_shader_manager = system.GetVertexShaderManager(); + if (vertex_shader_manager.dirty) { - UpdateConstantBuffer(m_vertex_constant_buffer.Get(), &VertexShaderManager::constants, + UpdateConstantBuffer(m_vertex_constant_buffer.Get(), &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; } + if (GeometryShaderManager::dirty) { UpdateConstantBuffer(m_geometry_constant_buffer.Get(), &GeometryShaderManager::constants, diff --git a/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp b/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp index 3d95c076cc..510955a201 100644 --- a/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp +++ b/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp @@ -145,15 +145,18 @@ void VertexManager::UploadUniforms() void VertexManager::UpdateVertexShaderConstants() { - if (!VertexShaderManager::dirty || !ReserveConstantStorage()) + auto& system = Core::System::GetInstance(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); + + if (!vertex_shader_manager.dirty || !ReserveConstantStorage()) return; Renderer::GetInstance()->SetConstantBuffer(1, m_uniform_stream_buffer.GetCurrentGPUPointer()); - std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer(), &VertexShaderManager::constants, + std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer(), &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); m_uniform_stream_buffer.CommitMemory(sizeof(VertexShaderConstants)); ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, sizeof(VertexShaderConstants)); - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; } void VertexManager::UpdateGeometryShaderConstants() @@ -237,12 +240,13 @@ void VertexManager::UploadAllConstants() auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); // Copy the actual data in std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + pixel_constants_offset, &pixel_shader_manager.constants, sizeof(PixelShaderConstants)); std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + vertex_constants_offset, - &VertexShaderManager::constants, sizeof(VertexShaderConstants)); + &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + geometry_constants_offset, &GeometryShaderManager::constants, sizeof(GeometryShaderConstants)); @@ -251,7 +255,7 @@ void VertexManager::UploadAllConstants() ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, allocation_size); // Clear dirty flags - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; GeometryShaderManager::dirty = false; pixel_shader_manager.dirty = false; } diff --git a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm index 60c7dd19df..c5405246b4 100644 --- a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm +++ b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm @@ -836,7 +836,9 @@ void Metal::StateTracker::PrepareRender() { m_flags.has_gx_vs_uniform = true; Map map = Allocate(UploadBuffer::Uniform, sizeof(VertexShaderConstants), AlignMask::Uniform); - memcpy(map.cpu_buffer, &VertexShaderManager::constants, sizeof(VertexShaderConstants)); + auto& system = Core::System::GetInstance(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); + memcpy(map.cpu_buffer, &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); SetVertexBufferNow(1, map.gpu_buffer, map.gpu_offset); if (pipe->UsesFragmentBuffer(1)) SetFragmentBufferNow(1, map.gpu_buffer, map.gpu_offset); diff --git a/Source/Core/VideoBackends/Metal/MTLVertexManager.mm b/Source/Core/VideoBackends/Metal/MTLVertexManager.mm index df86461ae3..69ec48552b 100644 --- a/Source/Core/VideoBackends/Metal/MTLVertexManager.mm +++ b/Source/Core/VideoBackends/Metal/MTLVertexManager.mm @@ -93,9 +93,10 @@ void Metal::VertexManager::UploadUniforms() { auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); - g_state_tracker->InvalidateUniforms(VertexShaderManager::dirty, GeometryShaderManager::dirty, + auto& vertex_shader_manager = system.GetVertexShaderManager(); + g_state_tracker->InvalidateUniforms(vertex_shader_manager.dirty, GeometryShaderManager::dirty, pixel_shader_manager.dirty); - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; GeometryShaderManager::dirty = false; pixel_shader_manager.dirty = false; } diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 485d718723..7566611041 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -223,14 +223,15 @@ void ProgramShaderCache::UploadConstants() { auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); - if (pixel_shader_manager.dirty || VertexShaderManager::dirty || GeometryShaderManager::dirty) + auto& vertex_shader_manager = system.GetVertexShaderManager(); + if (pixel_shader_manager.dirty || vertex_shader_manager.dirty || GeometryShaderManager::dirty) { auto buffer = s_buffer->Map(s_ubo_buffer_size, s_ubo_align); memcpy(buffer.first, &pixel_shader_manager.constants, sizeof(PixelShaderConstants)); memcpy(buffer.first + Common::AlignUp(sizeof(PixelShaderConstants), s_ubo_align), - &VertexShaderManager::constants, sizeof(VertexShaderConstants)); + &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); memcpy(buffer.first + Common::AlignUp(sizeof(PixelShaderConstants), s_ubo_align) + Common::AlignUp(sizeof(VertexShaderConstants), s_ubo_align), @@ -248,7 +249,7 @@ void ProgramShaderCache::UploadConstants() sizeof(GeometryShaderConstants)); pixel_shader_manager.dirty = false; - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; GeometryShaderManager::dirty = false; ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, s_ubo_buffer_size); diff --git a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp index a38fd163ec..9fbf560ecf 100644 --- a/Source/Core/VideoBackends/Software/SWVertexLoader.cpp +++ b/Source/Core/VideoBackends/Software/SWVertexLoader.cpp @@ -10,6 +10,8 @@ #include "Common/CommonTypes.h" #include "Common/Logging/Log.h" +#include "Core/System.h" + #include "VideoBackends/Software/NativeVertexFormat.h" #include "VideoBackends/Software/Rasterizer.h" #include "VideoBackends/Software/SWRenderer.h" @@ -205,15 +207,19 @@ void SWVertexLoader::ParseVertex(const PortableVertexDeclaration& vdec, int inde } if (!vdec.normals[1].enable) { - m_vertex.normal[1][0] = VertexShaderManager::constants.cached_tangent[0]; - m_vertex.normal[1][1] = VertexShaderManager::constants.cached_tangent[1]; - m_vertex.normal[1][2] = VertexShaderManager::constants.cached_tangent[2]; + auto& system = Core::System::GetInstance(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); + m_vertex.normal[1][0] = vertex_shader_manager.constants.cached_tangent[0]; + m_vertex.normal[1][1] = vertex_shader_manager.constants.cached_tangent[1]; + m_vertex.normal[1][2] = vertex_shader_manager.constants.cached_tangent[2]; } if (!vdec.normals[2].enable) { - m_vertex.normal[2][0] = VertexShaderManager::constants.cached_binormal[0]; - m_vertex.normal[2][1] = VertexShaderManager::constants.cached_binormal[1]; - m_vertex.normal[2][2] = VertexShaderManager::constants.cached_binormal[2]; + auto& system = Core::System::GetInstance(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); + m_vertex.normal[2][0] = vertex_shader_manager.constants.cached_binormal[0]; + m_vertex.normal[2][1] = vertex_shader_manager.constants.cached_binormal[1]; + m_vertex.normal[2][2] = vertex_shader_manager.constants.cached_binormal[2]; } ParseColorAttributes(&m_vertex, src, vdec); diff --git a/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp b/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp index c01335d85a..86b2e361ef 100644 --- a/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp @@ -204,17 +204,20 @@ void VertexManager::UploadUniforms() void VertexManager::UpdateVertexShaderConstants() { - if (!VertexShaderManager::dirty || !ReserveConstantStorage()) + auto& system = Core::System::GetInstance(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); + + if (!vertex_shader_manager.dirty || !ReserveConstantStorage()) return; StateTracker::GetInstance()->SetGXUniformBuffer( UBO_DESCRIPTOR_SET_BINDING_VS, m_uniform_stream_buffer->GetBuffer(), m_uniform_stream_buffer->GetCurrentOffset(), sizeof(VertexShaderConstants)); - std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer(), &VertexShaderManager::constants, + std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer(), &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); m_uniform_stream_buffer->CommitMemory(sizeof(VertexShaderConstants)); ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, sizeof(VertexShaderConstants)); - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; } void VertexManager::UpdateGeometryShaderConstants() @@ -289,6 +292,7 @@ void VertexManager::UploadAllConstants() auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); + auto& vertex_shader_manager = system.GetVertexShaderManager(); // Update bindings StateTracker::GetInstance()->SetGXUniformBuffer( @@ -308,7 +312,7 @@ void VertexManager::UploadAllConstants() std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer() + pixel_constants_offset, &pixel_shader_manager.constants, sizeof(PixelShaderConstants)); std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer() + vertex_constants_offset, - &VertexShaderManager::constants, sizeof(VertexShaderConstants)); + &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer() + geometry_constants_offset, &GeometryShaderManager::constants, sizeof(GeometryShaderConstants)); @@ -317,7 +321,7 @@ void VertexManager::UploadAllConstants() ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, allocation_size); // Clear dirty flags - VertexShaderManager::dirty = false; + vertex_shader_manager.dirty = false; GeometryShaderManager::dirty = false; pixel_shader_manager.dirty = false; } |
