diff options
Diffstat (limited to 'Source/Core/VideoBackends')
6 files changed, 33 insertions, 20 deletions
diff --git a/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp b/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp index 5b5cf5c941..ce41e90e31 100644 --- a/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp +++ b/Source/Core/VideoBackends/D3D/D3DVertexManager.cpp @@ -272,11 +272,12 @@ void VertexManager::UploadUniforms() vertex_shader_manager.dirty = false; } - if (GeometryShaderManager::dirty) + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + if (geometry_shader_manager.dirty) { - UpdateConstantBuffer(m_geometry_constant_buffer.Get(), &GeometryShaderManager::constants, + UpdateConstantBuffer(m_geometry_constant_buffer.Get(), &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; } auto& pixel_shader_manager = system.GetPixelShaderManager(); diff --git a/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp b/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp index 510955a201..3ea1008413 100644 --- a/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp +++ b/Source/Core/VideoBackends/D3D12/D3D12VertexManager.cpp @@ -161,15 +161,18 @@ void VertexManager::UpdateVertexShaderConstants() void VertexManager::UpdateGeometryShaderConstants() { - if (!GeometryShaderManager::dirty || !ReserveConstantStorage()) + auto& system = Core::System::GetInstance(); + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + + if (!geometry_shader_manager.dirty || !ReserveConstantStorage()) return; Renderer::GetInstance()->SetConstantBuffer(2, m_uniform_stream_buffer.GetCurrentGPUPointer()); - std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer(), &GeometryShaderManager::constants, + std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer(), &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); m_uniform_stream_buffer.CommitMemory(sizeof(GeometryShaderConstants)); ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, sizeof(GeometryShaderConstants)); - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; } void VertexManager::UpdatePixelShaderConstants() @@ -241,6 +244,7 @@ void VertexManager::UploadAllConstants() auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); auto& vertex_shader_manager = system.GetVertexShaderManager(); + auto& geometry_shader_manager = system.GetGeometryShaderManager(); // Copy the actual data in std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + pixel_constants_offset, @@ -248,7 +252,7 @@ void VertexManager::UploadAllConstants() std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + vertex_constants_offset, &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); std::memcpy(m_uniform_stream_buffer.GetCurrentHostPointer() + geometry_constants_offset, - &GeometryShaderManager::constants, sizeof(GeometryShaderConstants)); + &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); // Finally, flush buffer memory after copying m_uniform_stream_buffer.CommitMemory(allocation_size); @@ -256,7 +260,7 @@ void VertexManager::UploadAllConstants() // Clear dirty flags vertex_shader_manager.dirty = false; - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; pixel_shader_manager.dirty = false; } diff --git a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm index c5405246b4..4e24cd737d 100644 --- a/Source/Core/VideoBackends/Metal/MTLStateTracker.mm +++ b/Source/Core/VideoBackends/Metal/MTLStateTracker.mm @@ -848,7 +848,9 @@ void Metal::StateTracker::PrepareRender() if (!m_flags.has_gx_gs_uniform && pipe->UsesVertexBuffer(2)) { m_flags.has_gx_gs_uniform = true; - [m_current_render_encoder setVertexBytes:&GeometryShaderManager::constants + auto& system = Core::System::GetInstance(); + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + [m_current_render_encoder setVertexBytes:&geometry_shader_manager.constants length:sizeof(GeometryShaderConstants) atIndex:2]; ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, sizeof(GeometryShaderConstants)); diff --git a/Source/Core/VideoBackends/Metal/MTLVertexManager.mm b/Source/Core/VideoBackends/Metal/MTLVertexManager.mm index 69ec48552b..91f1d42eec 100644 --- a/Source/Core/VideoBackends/Metal/MTLVertexManager.mm +++ b/Source/Core/VideoBackends/Metal/MTLVertexManager.mm @@ -92,11 +92,12 @@ void Metal::VertexManager::CommitBuffer(u32 num_vertices, u32 vertex_stride, u32 void Metal::VertexManager::UploadUniforms() { auto& system = Core::System::GetInstance(); - auto& pixel_shader_manager = system.GetPixelShaderManager(); auto& vertex_shader_manager = system.GetVertexShaderManager(); - g_state_tracker->InvalidateUniforms(vertex_shader_manager.dirty, GeometryShaderManager::dirty, + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + auto& pixel_shader_manager = system.GetPixelShaderManager(); + g_state_tracker->InvalidateUniforms(vertex_shader_manager.dirty, geometry_shader_manager.dirty, pixel_shader_manager.dirty); vertex_shader_manager.dirty = false; - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; pixel_shader_manager.dirty = false; } diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp index 7566611041..b4635c36ec 100644 --- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp +++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp @@ -224,7 +224,8 @@ void ProgramShaderCache::UploadConstants() auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); auto& vertex_shader_manager = system.GetVertexShaderManager(); - if (pixel_shader_manager.dirty || vertex_shader_manager.dirty || GeometryShaderManager::dirty) + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + if (pixel_shader_manager.dirty || vertex_shader_manager.dirty || geometry_shader_manager.dirty) { auto buffer = s_buffer->Map(s_ubo_buffer_size, s_ubo_align); @@ -235,7 +236,7 @@ void ProgramShaderCache::UploadConstants() memcpy(buffer.first + Common::AlignUp(sizeof(PixelShaderConstants), s_ubo_align) + Common::AlignUp(sizeof(VertexShaderConstants), s_ubo_align), - &GeometryShaderManager::constants, sizeof(GeometryShaderConstants)); + &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); s_buffer->Unmap(s_ubo_buffer_size); glBindBufferRange(GL_UNIFORM_BUFFER, 1, s_buffer->m_buffer, buffer.second, @@ -250,7 +251,7 @@ void ProgramShaderCache::UploadConstants() pixel_shader_manager.dirty = false; vertex_shader_manager.dirty = false; - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, s_ubo_buffer_size); } diff --git a/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp b/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp index 86b2e361ef..025fa2be29 100644 --- a/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp +++ b/Source/Core/VideoBackends/Vulkan/VKVertexManager.cpp @@ -222,17 +222,20 @@ void VertexManager::UpdateVertexShaderConstants() void VertexManager::UpdateGeometryShaderConstants() { - if (!GeometryShaderManager::dirty || !ReserveConstantStorage()) + auto& system = Core::System::GetInstance(); + auto& geometry_shader_manager = system.GetGeometryShaderManager(); + + if (!geometry_shader_manager.dirty || !ReserveConstantStorage()) return; StateTracker::GetInstance()->SetGXUniformBuffer( UBO_DESCRIPTOR_SET_BINDING_GS, m_uniform_stream_buffer->GetBuffer(), m_uniform_stream_buffer->GetCurrentOffset(), sizeof(GeometryShaderConstants)); - std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer(), &GeometryShaderManager::constants, + std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer(), &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); m_uniform_stream_buffer->CommitMemory(sizeof(GeometryShaderConstants)); ADDSTAT(g_stats.this_frame.bytes_uniform_streamed, sizeof(GeometryShaderConstants)); - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; } void VertexManager::UpdatePixelShaderConstants() @@ -293,6 +296,7 @@ void VertexManager::UploadAllConstants() auto& system = Core::System::GetInstance(); auto& pixel_shader_manager = system.GetPixelShaderManager(); auto& vertex_shader_manager = system.GetVertexShaderManager(); + auto& geometry_shader_manager = system.GetGeometryShaderManager(); // Update bindings StateTracker::GetInstance()->SetGXUniformBuffer( @@ -314,7 +318,7 @@ void VertexManager::UploadAllConstants() std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer() + vertex_constants_offset, &vertex_shader_manager.constants, sizeof(VertexShaderConstants)); std::memcpy(m_uniform_stream_buffer->GetCurrentHostPointer() + geometry_constants_offset, - &GeometryShaderManager::constants, sizeof(GeometryShaderConstants)); + &geometry_shader_manager.constants, sizeof(GeometryShaderConstants)); // Finally, flush buffer memory after copying m_uniform_stream_buffer->CommitMemory(allocation_size); @@ -322,7 +326,7 @@ void VertexManager::UploadAllConstants() // Clear dirty flags vertex_shader_manager.dirty = false; - GeometryShaderManager::dirty = false; + geometry_shader_manager.dirty = false; pixel_shader_manager.dirty = false; } |
