summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Jannik Vogel2016-05-14 10:16:45 +0200
committerGravatar Jannik Vogel2016-05-14 10:31:18 +0200
commit5389dedfa194460f325c29c9a54b9fde824aae27 (patch)
treeaf49ad67017f01807cde8fb96e8a3e682c221b1c /src
parentOpenGL: value-initialize variables which cause uninitialised access otherwise (diff)
downloadyuzu-5389dedfa194460f325c29c9a54b9fde824aae27.tar.gz
yuzu-5389dedfa194460f325c29c9a54b9fde824aae27.tar.xz
yuzu-5389dedfa194460f325c29c9a54b9fde824aae27.zip
OpenGL: Only update depth uniforms if the depth changed
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp24
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h7
2 files changed, 22 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index ed2e2f3ae..c09bc8857 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -104,7 +104,6 @@ RasterizerOpenGL::RasterizerOpenGL() : shader_dirty(true) {
104 104
105 // Sync fixed function OpenGL state 105 // Sync fixed function OpenGL state
106 SyncCullMode(); 106 SyncCullMode();
107 SyncDepthModifiers();
108 SyncBlendEnabled(); 107 SyncBlendEnabled();
109 SyncBlendFuncs(); 108 SyncBlendFuncs();
110 SyncBlendColor(); 109 SyncBlendColor();
@@ -259,8 +258,10 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {
259 258
260 // Depth modifiers 259 // Depth modifiers
261 case PICA_REG_INDEX(viewport_depth_range): 260 case PICA_REG_INDEX(viewport_depth_range):
261 SyncDepthScale();
262 break;
262 case PICA_REG_INDEX(viewport_depth_near_plane): 263 case PICA_REG_INDEX(viewport_depth_near_plane):
263 SyncDepthModifiers(); 264 SyncDepthOffset();
264 break; 265 break;
265 266
266 // Depth buffering 267 // Depth buffering
@@ -880,6 +881,8 @@ void RasterizerOpenGL::SetShader() {
880 glUniformBlockBinding(current_shader->shader.handle, block_index, 0); 881 glUniformBlockBinding(current_shader->shader.handle, block_index, 0);
881 882
882 // Update uniforms 883 // Update uniforms
884 SyncDepthScale();
885 SyncDepthOffset();
883 SyncAlphaTest(); 886 SyncAlphaTest();
884 SyncCombinerColor(); 887 SyncCombinerColor();
885 auto& tev_stages = Pica::g_state.regs.GetTevStages(); 888 auto& tev_stages = Pica::g_state.regs.GetTevStages();
@@ -922,13 +925,20 @@ void RasterizerOpenGL::SyncCullMode() {
922 } 925 }
923} 926}
924 927
925void RasterizerOpenGL::SyncDepthModifiers() { 928void RasterizerOpenGL::SyncDepthScale() {
926 float depth_scale = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_range).ToFloat32(); 929 float depth_scale = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_range).ToFloat32();
927 float depth_offset = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_near_plane).ToFloat32(); 930 if (depth_scale != uniform_block_data.data.depth_scale) {
931 uniform_block_data.data.depth_scale = depth_scale;
932 uniform_block_data.dirty = true;
933 }
934}
928 935
929 uniform_block_data.data.depth_scale = depth_scale; 936void RasterizerOpenGL::SyncDepthOffset() {
930 uniform_block_data.data.depth_offset = depth_offset; 937 float depth_offset = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_near_plane).ToFloat32();
931 uniform_block_data.dirty = true; 938 if (depth_offset != uniform_block_data.data.depth_offset) {
939 uniform_block_data.data.depth_offset = depth_offset;
940 uniform_block_data.dirty = true;
941 }
932} 942}
933 943
934void RasterizerOpenGL::SyncBlendEnabled() { 944void RasterizerOpenGL::SyncBlendEnabled() {
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h
index f1b4fbed8..d70369400 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.h
+++ b/src/video_core/renderer_opengl/gl_rasterizer.h
@@ -339,8 +339,11 @@ private:
339 /// Syncs the cull mode to match the PICA register 339 /// Syncs the cull mode to match the PICA register
340 void SyncCullMode(); 340 void SyncCullMode();
341 341
342 /// Syncs the depth scale and offset to match the PICA registers 342 /// Syncs the depth scale to match the PICA register
343 void SyncDepthModifiers(); 343 void SyncDepthScale();
344
345 /// Syncs the depth offset to match the PICA register
346 void SyncDepthOffset();
344 347
345 /// Syncs the blend enabled status to match the PICA register 348 /// Syncs the blend enabled status to match the PICA register
346 void SyncBlendEnabled(); 349 void SyncBlendEnabled();