Răsfoiți Sursa

gl_state: Remove clip control tracking

ReinUsesLisp 6 ani în urmă
părinte
comite
07a954e67f

+ 6 - 5
src/video_core/renderer_opengl/gl_rasterizer.cpp

@@ -467,6 +467,9 @@ void RasterizerOpenGL::Clear() {
         SyncScissorTest();
     }
 
+    // TODO: Signal state tracker about these changes
+    glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
+
     UNIMPLEMENTED_IF(regs.clear_flags.viewport);
 
     clear_state.Apply();
@@ -950,11 +953,9 @@ void RasterizerOpenGL::SyncViewport() {
     if (regs.screen_y_control.y_negate != 0) {
         flip_y = !flip_y;
     }
-    state.clip_control.origin = flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT;
-    state.clip_control.depth_mode =
-        regs.depth_mode == Tegra::Engines::Maxwell3D::Regs::DepthMode::ZeroToOne
-            ? GL_ZERO_TO_ONE
-            : GL_NEGATIVE_ONE_TO_ONE;
+    glClipControl(flip_y ? GL_UPPER_LEFT : GL_LOWER_LEFT,
+                  regs.depth_mode == Maxwell::DepthMode::ZeroToOne ? GL_ZERO_TO_ONE
+                                                                   : GL_NEGATIVE_ONE_TO_ONE);
 }
 
 void RasterizerOpenGL::SyncDepthClamp() {

+ 0 - 8
src/video_core/renderer_opengl/gl_state.cpp

@@ -195,13 +195,6 @@ void OpenGLState::ApplyBlending() {
     cur_state.independant_blend.enabled = independant_blend.enabled;
 }
 
-void OpenGLState::ApplyClipControl() {
-    if (UpdateTie(std::tie(cur_state.clip_control.origin, cur_state.clip_control.depth_mode),
-                  std::tie(clip_control.origin, clip_control.depth_mode))) {
-        glClipControl(clip_control.origin, clip_control.depth_mode);
-    }
-}
-
 void OpenGLState::ApplyRenderBuffer() {
     if (cur_state.renderbuffer != renderbuffer) {
         cur_state.renderbuffer = renderbuffer;
@@ -247,7 +240,6 @@ void OpenGLState::Apply() {
     ApplyTextures();
     ApplySamplers();
     ApplyImages();
-    ApplyClipControl();
     ApplyRenderBuffer();
 }
 

+ 0 - 6
src/video_core/renderer_opengl/gl_state.h

@@ -54,11 +54,6 @@ public:
         GLuint program_pipeline = 0; // GL_PROGRAM_PIPELINE_BINDING
     } draw;
 
-    struct {
-        GLenum origin = GL_LOWER_LEFT;
-        GLenum depth_mode = GL_NEGATIVE_ONE_TO_ONE;
-    } clip_control;
-
     GLuint renderbuffer{}; // GL_RENDERBUFFER_BINDING
 
     OpenGLState();
@@ -81,7 +76,6 @@ public:
     void ApplyTextures();
     void ApplySamplers();
     void ApplyImages();
-    void ApplyClipControl();
     void ApplyRenderBuffer();
 
     /// Resets any references to the given resource

+ 1 - 0
src/video_core/renderer_opengl/gl_texture_cache.cpp

@@ -539,6 +539,7 @@ void TextureCacheOpenGL::ImageBlit(View& src_view, View& dst_view,
     // TODO(Rodrigo): Find out if rasterizer discard affects blits
     glDisable(GL_RASTERIZER_DISCARD);
     glDisablei(GL_SCISSOR_TEST, 0);
+    glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
 
     u32 buffers{};
 

+ 1 - 0
src/video_core/renderer_opengl/renderer_opengl.cpp

@@ -585,6 +585,7 @@ void RendererOpenGL::DrawScreen(const Layout::FramebufferLayout& layout) {
     glCullFace(GL_BACK);
     glFrontFace(GL_CW);
     glColorMaski(0, GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
+    glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE);
     glViewport(0, 0, layout.width, layout.height);
 
     glVertexAttribFormat(PositionLocation, 2, GL_FLOAT, GL_FALSE,