diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 7 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 8 |
4 files changed, 20 insertions, 13 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index be51c5215..b472f421f 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -570,6 +570,7 @@ void RasterizerOpenGL::DrawArrays() { | |||
| 570 | SyncBlendState(); | 570 | SyncBlendState(); |
| 571 | SyncLogicOpState(); | 571 | SyncLogicOpState(); |
| 572 | SyncCullMode(); | 572 | SyncCullMode(); |
| 573 | SyncDepthRange(); | ||
| 573 | SyncScissorTest(); | 574 | SyncScissorTest(); |
| 574 | // Alpha Testing is synced on shaders. | 575 | // Alpha Testing is synced on shaders. |
| 575 | SyncTransformFeedback(); | 576 | SyncTransformFeedback(); |
| @@ -923,12 +924,11 @@ void RasterizerOpenGL::SyncCullMode() { | |||
| 923 | } | 924 | } |
| 924 | } | 925 | } |
| 925 | 926 | ||
| 926 | void RasterizerOpenGL::SyncDepthScale() { | 927 | void RasterizerOpenGL::SyncDepthRange() { |
| 927 | UNREACHABLE(); | 928 | const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; |
| 928 | } | ||
| 929 | 929 | ||
| 930 | void RasterizerOpenGL::SyncDepthOffset() { | 930 | state.depth.depth_range_near = regs.viewport->depth_range_near; |
| 931 | UNREACHABLE(); | 931 | state.depth.depth_range_far = regs.viewport->depth_range_far; |
| 932 | } | 932 | } |
| 933 | 933 | ||
| 934 | void RasterizerOpenGL::SyncDepthTestState() { | 934 | void RasterizerOpenGL::SyncDepthTestState() { |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 0e90a31f5..731a336d5 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -144,11 +144,8 @@ private: | |||
| 144 | /// Syncs the cull mode to match the guest state | 144 | /// Syncs the cull mode to match the guest state |
| 145 | void SyncCullMode(); | 145 | void SyncCullMode(); |
| 146 | 146 | ||
| 147 | /// Syncs the depth scale to match the guest state | 147 | /// Syncs the depth range to match the guest state |
| 148 | void SyncDepthScale(); | 148 | void SyncDepthRange(); |
| 149 | |||
| 150 | /// Syncs the depth offset to match the guest state | ||
| 151 | void SyncDepthOffset(); | ||
| 152 | 149 | ||
| 153 | /// Syncs the depth test state to match the guest state | 150 | /// Syncs the depth test state to match the guest state |
| 154 | void SyncDepthTestState(); | 151 | void SyncDepthTestState(); |
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp index 1fe26a2a9..ba6c6919a 100644 --- a/src/video_core/renderer_opengl/gl_state.cpp +++ b/src/video_core/renderer_opengl/gl_state.cpp | |||
| @@ -21,6 +21,8 @@ OpenGLState::OpenGLState() { | |||
| 21 | depth.test_enabled = false; | 21 | depth.test_enabled = false; |
| 22 | depth.test_func = GL_LESS; | 22 | depth.test_func = GL_LESS; |
| 23 | depth.write_mask = GL_TRUE; | 23 | depth.write_mask = GL_TRUE; |
| 24 | depth.depth_range_near = 0.0f; | ||
| 25 | depth.depth_range_far = 1.0f; | ||
| 24 | 26 | ||
| 25 | color_mask.red_enabled = GL_TRUE; | 27 | color_mask.red_enabled = GL_TRUE; |
| 26 | color_mask.green_enabled = GL_TRUE; | 28 | color_mask.green_enabled = GL_TRUE; |
| @@ -119,6 +121,12 @@ void OpenGLState::Apply() const { | |||
| 119 | glDepthMask(depth.write_mask); | 121 | glDepthMask(depth.write_mask); |
| 120 | } | 122 | } |
| 121 | 123 | ||
| 124 | // Depth range | ||
| 125 | if (depth.depth_range_near != cur_state.depth.depth_range_near || | ||
| 126 | depth.depth_range_far != cur_state.depth.depth_range_far) { | ||
| 127 | glDepthRange(depth.depth_range_near, depth.depth_range_far); | ||
| 128 | } | ||
| 129 | |||
| 122 | // Color mask | 130 | // Color mask |
| 123 | if (color_mask.red_enabled != cur_state.color_mask.red_enabled || | 131 | if (color_mask.red_enabled != cur_state.color_mask.red_enabled || |
| 124 | color_mask.green_enabled != cur_state.color_mask.green_enabled || | 132 | color_mask.green_enabled != cur_state.color_mask.green_enabled || |
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index dc21a2ee3..daf7eb533 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -42,9 +42,11 @@ public: | |||
| 42 | } cull; | 42 | } cull; |
| 43 | 43 | ||
| 44 | struct { | 44 | struct { |
| 45 | bool test_enabled; // GL_DEPTH_TEST | 45 | bool test_enabled; // GL_DEPTH_TEST |
| 46 | GLenum test_func; // GL_DEPTH_FUNC | 46 | GLenum test_func; // GL_DEPTH_FUNC |
| 47 | GLboolean write_mask; // GL_DEPTH_WRITEMASK | 47 | GLboolean write_mask; // GL_DEPTH_WRITEMASK |
| 48 | GLfloat depth_range_near; // GL_DEPTH_RANGE | ||
| 49 | GLfloat depth_range_far; // GL_DEPTH_RANGE | ||
| 48 | } depth; | 50 | } depth; |
| 49 | 51 | ||
| 50 | struct { | 52 | struct { |