diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 24 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 7 |
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 | ||
| 925 | void RasterizerOpenGL::SyncDepthModifiers() { | 928 | void 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; | 936 | void 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 | ||
| 934 | void RasterizerOpenGL::SyncBlendEnabled() { | 944 | void 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(); |