diff options
| author | 2019-12-26 01:07:34 -0300 | |
|---|---|---|
| committer | 2020-02-28 16:58:30 -0300 | |
| commit | 2392b548bee87553b39f50c1159640b0dabc4b13 (patch) | |
| tree | 5a1a5046be222eee078acc5f3a5e55d34abfaff6 /src | |
| parent | gl_state: Remove multisample tracking (diff) | |
| download | yuzu-2392b548bee87553b39f50c1159640b0dabc4b13.tar.gz yuzu-2392b548bee87553b39f50c1159640b0dabc4b13.tar.xz yuzu-2392b548bee87553b39f50c1159640b0dabc4b13.zip | |
gl_state: Remove clamp framebuffer color tracking
This commit doesn't reset it for screen draws because clamping doesn't
change anything there.
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 5 |
3 files changed, 6 insertions, 17 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index dc2d60156..d7971f86f 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -415,6 +415,11 @@ void RasterizerOpenGL::Clear() { | |||
| 415 | clear_state.color_mask[0].green_enabled = regs.clear_buffers.G ? GL_TRUE : GL_FALSE; | 415 | clear_state.color_mask[0].green_enabled = regs.clear_buffers.G ? GL_TRUE : GL_FALSE; |
| 416 | clear_state.color_mask[0].blue_enabled = regs.clear_buffers.B ? GL_TRUE : GL_FALSE; | 416 | clear_state.color_mask[0].blue_enabled = regs.clear_buffers.B ? GL_TRUE : GL_FALSE; |
| 417 | clear_state.color_mask[0].alpha_enabled = regs.clear_buffers.A ? GL_TRUE : GL_FALSE; | 417 | clear_state.color_mask[0].alpha_enabled = regs.clear_buffers.A ? GL_TRUE : GL_FALSE; |
| 418 | |||
| 419 | // TODO: Signal state tracker about these changes | ||
| 420 | SyncFramebufferSRGB(); | ||
| 421 | // TODO(Rodrigo): Determine if clamping is used on clears | ||
| 422 | SyncFragmentColorClampState(); | ||
| 418 | } | 423 | } |
| 419 | if (regs.clear_buffers.Z) { | 424 | if (regs.clear_buffers.Z) { |
| 420 | ASSERT_MSG(regs.zeta_enable != 0, "Tried to clear Z but buffer is not enabled!"); | 425 | ASSERT_MSG(regs.zeta_enable != 0, "Tried to clear Z but buffer is not enabled!"); |
| @@ -454,9 +459,6 @@ void RasterizerOpenGL::Clear() { | |||
| 454 | } | 459 | } |
| 455 | } | 460 | } |
| 456 | 461 | ||
| 457 | // TODO: Signal state tracker about these changes | ||
| 458 | SyncFramebufferSRGB(); | ||
| 459 | |||
| 460 | if (!use_color && !use_depth && !use_stencil) { | 462 | if (!use_color && !use_depth && !use_stencil) { |
| 461 | // No color surface nor depth/stencil surface are enabled | 463 | // No color surface nor depth/stencil surface are enabled |
| 462 | return; | 464 | return; |
| @@ -1089,7 +1091,7 @@ void RasterizerOpenGL::SyncMultiSampleState() { | |||
| 1089 | 1091 | ||
| 1090 | void RasterizerOpenGL::SyncFragmentColorClampState() { | 1092 | void RasterizerOpenGL::SyncFragmentColorClampState() { |
| 1091 | const auto& regs = system.GPU().Maxwell3D().regs; | 1093 | const auto& regs = system.GPU().Maxwell3D().regs; |
| 1092 | state.fragment_color_clamp.enabled = regs.frag_color_clamp != 0; | 1094 | glClampColor(GL_CLAMP_FRAGMENT_COLOR, regs.frag_color_clamp ? GL_TRUE : GL_FALSE); |
| 1093 | } | 1095 | } |
| 1094 | 1096 | ||
| 1095 | void RasterizerOpenGL::SyncBlendState() { | 1097 | void RasterizerOpenGL::SyncBlendState() { |
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index b726adfc7..f8325d6e7 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp | |||
| @@ -117,13 +117,6 @@ void OpenGLState::ApplyClipDistances() { | |||
| 117 | } | 117 | } |
| 118 | } | 118 | } |
| 119 | 119 | ||
| 120 | void OpenGLState::ApplyFragmentColorClamp() { | ||
| 121 | if (UpdateValue(cur_state.fragment_color_clamp.enabled, fragment_color_clamp.enabled)) { | ||
| 122 | glClampColor(GL_CLAMP_FRAGMENT_COLOR_ARB, | ||
| 123 | fragment_color_clamp.enabled ? GL_TRUE : GL_FALSE); | ||
| 124 | } | ||
| 125 | } | ||
| 126 | |||
| 127 | void OpenGLState::ApplyRasterizerDiscard() { | 120 | void OpenGLState::ApplyRasterizerDiscard() { |
| 128 | Enable(GL_RASTERIZER_DISCARD, cur_state.rasterizer_discard, rasterizer_discard); | 121 | Enable(GL_RASTERIZER_DISCARD, cur_state.rasterizer_discard, rasterizer_discard); |
| 129 | } | 122 | } |
| @@ -317,7 +310,6 @@ void OpenGLState::Apply() { | |||
| 317 | ApplyShaderProgram(); | 310 | ApplyShaderProgram(); |
| 318 | ApplyProgramPipeline(); | 311 | ApplyProgramPipeline(); |
| 319 | ApplyClipDistances(); | 312 | ApplyClipDistances(); |
| 320 | ApplyFragmentColorClamp(); | ||
| 321 | ApplyRasterizerDiscard(); | 313 | ApplyRasterizerDiscard(); |
| 322 | ApplyColorMask(); | 314 | ApplyColorMask(); |
| 323 | ApplyViewport(); | 315 | ApplyViewport(); |
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index 5a8a728f2..89eb30dfc 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -13,10 +13,6 @@ namespace OpenGL { | |||
| 13 | 13 | ||
| 14 | class OpenGLState { | 14 | class OpenGLState { |
| 15 | public: | 15 | public: |
| 16 | struct { | ||
| 17 | bool enabled = false; // GL_CLAMP_FRAGMENT_COLOR_ARB | ||
| 18 | } fragment_color_clamp; | ||
| 19 | |||
| 20 | bool rasterizer_discard = false; // GL_RASTERIZER_DISCARD | 16 | bool rasterizer_discard = false; // GL_RASTERIZER_DISCARD |
| 21 | 17 | ||
| 22 | struct ColorMask { | 18 | struct ColorMask { |
| @@ -110,7 +106,6 @@ public: | |||
| 110 | void ApplyShaderProgram(); | 106 | void ApplyShaderProgram(); |
| 111 | void ApplyProgramPipeline(); | 107 | void ApplyProgramPipeline(); |
| 112 | void ApplyClipDistances(); | 108 | void ApplyClipDistances(); |
| 113 | void ApplyFragmentColorClamp(); | ||
| 114 | void ApplyRasterizerDiscard(); | 109 | void ApplyRasterizerDiscard(); |
| 115 | void ApplyColorMask(); | 110 | void ApplyColorMask(); |
| 116 | void ApplyStencilTest(); | 111 | void ApplyStencilTest(); |