summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2019-12-26 01:19:15 -0300
committerGravatar ReinUsesLisp2020-02-28 16:59:17 -0300
commit0914c70b7f9d68e71779fa32c474ed896b225704 (patch)
tree41726a0380b9f65ce626722172e69938ad095bbe /src
parentgl_state: Remove clamp framebuffer color tracking (diff)
downloadyuzu-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.cpp25
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp16
-rw-r--r--src/video_core/renderer_opengl/gl_state.h10
-rw-r--r--src/video_core/renderer_opengl/renderer_opengl.cpp1
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
124void 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
139void OpenGLState::ApplyStencilTest() { 124void 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 {
15public: 15public:
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));