diff options
| author | 2019-12-26 01:19:15 -0300 | |
|---|---|---|
| committer | 2020-02-28 16:59:17 -0300 | |
| commit | 0914c70b7f9d68e71779fa32c474ed896b225704 (patch) | |
| tree | 41726a0380b9f65ce626722172e69938ad095bbe /src | |
| parent | gl_state: Remove clamp framebuffer color tracking (diff) | |
| download | yuzu-0914c70b7f9d68e71779fa32c474ed896b225704.tar.gz yuzu-0914c70b7f9d68e71779fa32c474ed896b225704.tar.xz yuzu-0914c70b7f9d68e71779fa32c474ed896b225704.zip | |
gl_state: Remove color mask tracking
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 25 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 16 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/renderer_opengl.cpp | 1 |
4 files changed, 12 insertions, 40 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index d7971f86f..d0c811929 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -411,12 +411,10 @@ void RasterizerOpenGL::Clear() { | |||
| 411 | use_color = true; | 411 | use_color = true; |
| 412 | } | 412 | } |
| 413 | if (use_color) { | 413 | if (use_color) { |
| 414 | clear_state.color_mask[0].red_enabled = regs.clear_buffers.R ? 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; | ||
| 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 | 414 | // TODO: Signal state tracker about these changes |
| 415 | glColorMaski(0, regs.clear_buffers.R, regs.clear_buffers.G, regs.clear_buffers.B, | ||
| 416 | regs.clear_buffers.A); | ||
| 417 | |||
| 420 | SyncFramebufferSRGB(); | 418 | SyncFramebufferSRGB(); |
| 421 | // TODO(Rodrigo): Determine if clamping is used on clears | 419 | // TODO(Rodrigo): Determine if clamping is used on clears |
| 422 | SyncFragmentColorClampState(); | 420 | SyncFragmentColorClampState(); |
| @@ -1071,15 +1069,14 @@ void RasterizerOpenGL::SyncColorMask() { | |||
| 1071 | auto& maxwell3d = system.GPU().Maxwell3D(); | 1069 | auto& maxwell3d = system.GPU().Maxwell3D(); |
| 1072 | const auto& regs = maxwell3d.regs; | 1070 | const auto& regs = maxwell3d.regs; |
| 1073 | 1071 | ||
| 1074 | const std::size_t count = | 1072 | if (regs.color_mask_common) { |
| 1075 | regs.independent_blend_enable ? Tegra::Engines::Maxwell3D::Regs::NumRenderTargets : 1; | 1073 | auto& mask = regs.color_mask[0]; |
| 1076 | for (std::size_t i = 0; i < count; i++) { | 1074 | glColorMask(mask.R, mask.B, mask.G, mask.A); |
| 1077 | const auto& source = regs.color_mask[regs.color_mask_common ? 0 : i]; | 1075 | } else { |
| 1078 | auto& dest = state.color_mask[i]; | 1076 | for (std::size_t i = 0; i < Maxwell::NumRenderTargets; ++i) { |
| 1079 | dest.red_enabled = (source.R == 0) ? GL_FALSE : GL_TRUE; | 1077 | const auto& mask = regs.color_mask[regs.color_mask_common ? 0 : i]; |
| 1080 | dest.green_enabled = (source.G == 0) ? GL_FALSE : GL_TRUE; | 1078 | glColorMaski(static_cast<GLuint>(i), mask.R, mask.G, mask.B, mask.A); |
| 1081 | dest.blue_enabled = (source.B == 0) ? GL_FALSE : GL_TRUE; | 1079 | } |
| 1082 | dest.alpha_enabled = (source.A == 0) ? GL_FALSE : GL_TRUE; | ||
| 1083 | } | 1080 | } |
| 1084 | } | 1081 | } |
| 1085 | 1082 | ||
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index f8325d6e7..bcacc5590 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp | |||
| @@ -121,21 +121,6 @@ void OpenGLState::ApplyRasterizerDiscard() { | |||
| 121 | Enable(GL_RASTERIZER_DISCARD, cur_state.rasterizer_discard, rasterizer_discard); | 121 | Enable(GL_RASTERIZER_DISCARD, cur_state.rasterizer_discard, rasterizer_discard); |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | void OpenGLState::ApplyColorMask() { | ||
| 125 | for (std::size_t i = 0; i < Maxwell::NumRenderTargets; ++i) { | ||
| 126 | const auto& updated = color_mask[i]; | ||
| 127 | auto& current = cur_state.color_mask[i]; | ||
| 128 | if (updated.red_enabled != current.red_enabled || | ||
| 129 | updated.green_enabled != current.green_enabled || | ||
| 130 | updated.blue_enabled != current.blue_enabled || | ||
| 131 | updated.alpha_enabled != current.alpha_enabled) { | ||
| 132 | current = updated; | ||
| 133 | glColorMaski(static_cast<GLuint>(i), updated.red_enabled, updated.green_enabled, | ||
| 134 | updated.blue_enabled, updated.alpha_enabled); | ||
| 135 | } | ||
| 136 | } | ||
| 137 | } | ||
| 138 | |||
| 139 | void OpenGLState::ApplyStencilTest() { | 124 | void OpenGLState::ApplyStencilTest() { |
| 140 | Enable(GL_STENCIL_TEST, cur_state.stencil.test_enabled, stencil.test_enabled); | 125 | Enable(GL_STENCIL_TEST, cur_state.stencil.test_enabled, stencil.test_enabled); |
| 141 | 126 | ||
| @@ -311,7 +296,6 @@ void OpenGLState::Apply() { | |||
| 311 | ApplyProgramPipeline(); | 296 | ApplyProgramPipeline(); |
| 312 | ApplyClipDistances(); | 297 | ApplyClipDistances(); |
| 313 | ApplyRasterizerDiscard(); | 298 | ApplyRasterizerDiscard(); |
| 314 | ApplyColorMask(); | ||
| 315 | ApplyViewport(); | 299 | ApplyViewport(); |
| 316 | ApplyStencilTest(); | 300 | ApplyStencilTest(); |
| 317 | ApplyBlending(); | 301 | ApplyBlending(); |
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index 89eb30dfc..ccc302014 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -15,15 +15,6 @@ class OpenGLState { | |||
| 15 | public: | 15 | public: |
| 16 | bool rasterizer_discard = false; // GL_RASTERIZER_DISCARD | 16 | bool rasterizer_discard = false; // GL_RASTERIZER_DISCARD |
| 17 | 17 | ||
| 18 | struct ColorMask { | ||
| 19 | GLboolean red_enabled = GL_TRUE; | ||
| 20 | GLboolean green_enabled = GL_TRUE; | ||
| 21 | GLboolean blue_enabled = GL_TRUE; | ||
| 22 | GLboolean alpha_enabled = GL_TRUE; | ||
| 23 | }; | ||
| 24 | std::array<ColorMask, Tegra::Engines::Maxwell3D::Regs::NumRenderTargets> | ||
| 25 | color_mask; // GL_COLOR_WRITEMASK | ||
| 26 | |||
| 27 | struct { | 18 | struct { |
| 28 | bool test_enabled = false; // GL_STENCIL_TEST | 19 | bool test_enabled = false; // GL_STENCIL_TEST |
| 29 | struct { | 20 | struct { |
| @@ -107,7 +98,6 @@ public: | |||
| 107 | void ApplyProgramPipeline(); | 98 | void ApplyProgramPipeline(); |
| 108 | void ApplyClipDistances(); | 99 | void ApplyClipDistances(); |
| 109 | void ApplyRasterizerDiscard(); | 100 | void ApplyRasterizerDiscard(); |
| 110 | void ApplyColorMask(); | ||
| 111 | void ApplyStencilTest(); | 101 | void ApplyStencilTest(); |
| 112 | void ApplyViewport(); | 102 | void ApplyViewport(); |
| 113 | void ApplyTargetBlending(std::size_t target, bool force); | 103 | void ApplyTargetBlending(std::size_t target, bool force); |
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp index 4d41ac7b4..6dbf727ee 100644 --- a/src/video_core/renderer_opengl/renderer_opengl.cpp +++ b/src/video_core/renderer_opengl/renderer_opengl.cpp | |||
| @@ -570,6 +570,7 @@ void RendererOpenGL::DrawScreenTriangles(const ScreenInfo& screen_info, float x, | |||
| 570 | glDisable(GL_POLYGON_OFFSET_FILL); | 570 | glDisable(GL_POLYGON_OFFSET_FILL); |
| 571 | glCullFace(GL_BACK); | 571 | glCullFace(GL_BACK); |
| 572 | glFrontFace(GL_CW); | 572 | glFrontFace(GL_CW); |
| 573 | glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); | ||
| 573 | 574 | ||
| 574 | glVertexAttribFormat(PositionLocation, 2, GL_FLOAT, GL_FALSE, | 575 | glVertexAttribFormat(PositionLocation, 2, GL_FLOAT, GL_FALSE, |
| 575 | offsetof(ScreenRectVertex, position)); | 576 | offsetof(ScreenRectVertex, position)); |