diff options
Diffstat (limited to 'src/video_core')
| -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) {      // Sync fixed function OpenGL state      SyncCullMode(); -    SyncDepthModifiers();      SyncBlendEnabled();      SyncBlendFuncs();      SyncBlendColor(); @@ -259,8 +258,10 @@ void RasterizerOpenGL::NotifyPicaRegisterChanged(u32 id) {      // Depth modifiers      case PICA_REG_INDEX(viewport_depth_range): +        SyncDepthScale(); +        break;      case PICA_REG_INDEX(viewport_depth_near_plane): -        SyncDepthModifiers(); +        SyncDepthOffset();          break;      // Depth buffering @@ -880,6 +881,8 @@ void RasterizerOpenGL::SetShader() {          glUniformBlockBinding(current_shader->shader.handle, block_index, 0);          // Update uniforms +        SyncDepthScale(); +        SyncDepthOffset();          SyncAlphaTest();          SyncCombinerColor();          auto& tev_stages = Pica::g_state.regs.GetTevStages(); @@ -922,13 +925,20 @@ void RasterizerOpenGL::SyncCullMode() {      }  } -void RasterizerOpenGL::SyncDepthModifiers() { +void RasterizerOpenGL::SyncDepthScale() {      float depth_scale = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_range).ToFloat32(); -    float depth_offset = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_near_plane).ToFloat32(); +    if (depth_scale != uniform_block_data.data.depth_scale) { +        uniform_block_data.data.depth_scale = depth_scale; +        uniform_block_data.dirty = true; +    } +} -    uniform_block_data.data.depth_scale = depth_scale; -    uniform_block_data.data.depth_offset = depth_offset; -    uniform_block_data.dirty = true; +void RasterizerOpenGL::SyncDepthOffset() { +    float depth_offset = Pica::float24::FromRaw(Pica::g_state.regs.viewport_depth_near_plane).ToFloat32(); +    if (depth_offset != uniform_block_data.data.depth_offset) { +        uniform_block_data.data.depth_offset = depth_offset; +        uniform_block_data.dirty = true; +    }  }  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:      /// Syncs the cull mode to match the PICA register      void SyncCullMode(); -    /// Syncs the depth scale and offset to match the PICA registers -    void SyncDepthModifiers(); +    /// Syncs the depth scale to match the PICA register +    void SyncDepthScale(); + +    /// Syncs the depth offset to match the PICA register +    void SyncDepthOffset();      /// Syncs the blend enabled status to match the PICA register      void SyncBlendEnabled(); | 
