diff options
| author | 2018-11-28 17:47:28 -0500 | |
|---|---|---|
| committer | 2018-11-28 17:47:28 -0500 | |
| commit | 5a9a84994a31ab72d2caab752ee2a3d02afc8133 (patch) | |
| tree | 7e832b967ca67d9b3d349b1818c718f3731bfce1 /src/video_core/renderer_opengl | |
| parent | Merge pull request #1786 from Tinob/DepthClamp (diff) | |
| parent | remove viewport_transform_enabled as it seems to be inactive when valid trans... (diff) | |
| download | yuzu-5a9a84994a31ab72d2caab752ee2a3d02afc8133.tar.gz yuzu-5a9a84994a31ab72d2caab752ee2a3d02afc8133.tar.xz yuzu-5a9a84994a31ab72d2caab752ee2a3d02afc8133.zip | |
Merge pull request #1808 from Tinob/master
Fix clip distance and viewport
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 28 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_state.h | 2 |
2 files changed, 16 insertions, 14 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 5c8fe002b..a44bbfae8 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -642,6 +642,7 @@ void RasterizerOpenGL::DrawArrays() { | |||
| 642 | SyncCullMode(); | 642 | SyncCullMode(); |
| 643 | SyncPrimitiveRestart(); | 643 | SyncPrimitiveRestart(); |
| 644 | SyncScissorTest(state); | 644 | SyncScissorTest(state); |
| 645 | SyncClipEnabled(); | ||
| 645 | // Alpha Testing is synced on shaders. | 646 | // Alpha Testing is synced on shaders. |
| 646 | SyncTransformFeedback(); | 647 | SyncTransformFeedback(); |
| 647 | SyncPointState(); | 648 | SyncPointState(); |
| @@ -1006,18 +1007,11 @@ void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { | |||
| 1006 | for (std::size_t i = 0; i < viewport_count; i++) { | 1007 | for (std::size_t i = 0; i < viewport_count; i++) { |
| 1007 | auto& viewport = current_state.viewports[i]; | 1008 | auto& viewport = current_state.viewports[i]; |
| 1008 | const auto& src = regs.viewports[i]; | 1009 | const auto& src = regs.viewports[i]; |
| 1009 | if (regs.viewport_transform_enabled) { | 1010 | const MathUtil::Rectangle<s32> viewport_rect{regs.viewport_transform[i].GetRect()}; |
| 1010 | const MathUtil::Rectangle<s32> viewport_rect{regs.viewport_transform[i].GetRect()}; | 1011 | viewport.x = viewport_rect.left; |
| 1011 | viewport.x = viewport_rect.left; | 1012 | viewport.y = viewport_rect.bottom; |
| 1012 | viewport.y = viewport_rect.bottom; | 1013 | viewport.width = viewport_rect.GetWidth(); |
| 1013 | viewport.width = viewport_rect.GetWidth(); | 1014 | viewport.height = viewport_rect.GetHeight(); |
| 1014 | viewport.height = viewport_rect.GetHeight(); | ||
| 1015 | } else { | ||
| 1016 | viewport.x = src.x; | ||
| 1017 | viewport.y = src.y; | ||
| 1018 | viewport.width = src.width; | ||
| 1019 | viewport.height = src.height; | ||
| 1020 | } | ||
| 1021 | viewport.depth_range_far = regs.viewports[i].depth_range_far; | 1015 | viewport.depth_range_far = regs.viewports[i].depth_range_far; |
| 1022 | viewport.depth_range_near = regs.viewports[i].depth_range_near; | 1016 | viewport.depth_range_near = regs.viewports[i].depth_range_near; |
| 1023 | } | 1017 | } |
| @@ -1026,7 +1020,15 @@ void RasterizerOpenGL::SyncViewport(OpenGLState& current_state) { | |||
| 1026 | } | 1020 | } |
| 1027 | 1021 | ||
| 1028 | void RasterizerOpenGL::SyncClipEnabled() { | 1022 | void RasterizerOpenGL::SyncClipEnabled() { |
| 1029 | UNREACHABLE(); | 1023 | const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; |
| 1024 | state.clip_distance[0] = regs.clip_distance_enabled.c0 != 0; | ||
| 1025 | state.clip_distance[1] = regs.clip_distance_enabled.c1 != 0; | ||
| 1026 | state.clip_distance[2] = regs.clip_distance_enabled.c2 != 0; | ||
| 1027 | state.clip_distance[3] = regs.clip_distance_enabled.c3 != 0; | ||
| 1028 | state.clip_distance[4] = regs.clip_distance_enabled.c4 != 0; | ||
| 1029 | state.clip_distance[5] = regs.clip_distance_enabled.c5 != 0; | ||
| 1030 | state.clip_distance[6] = regs.clip_distance_enabled.c6 != 0; | ||
| 1031 | state.clip_distance[7] = regs.clip_distance_enabled.c7 != 0; | ||
| 1030 | } | 1032 | } |
| 1031 | 1033 | ||
| 1032 | void RasterizerOpenGL::SyncClipCoef() { | 1034 | void RasterizerOpenGL::SyncClipCoef() { |
diff --git a/src/video_core/renderer_opengl/gl_state.h b/src/video_core/renderer_opengl/gl_state.h index a486d1654..439bfbc98 100644 --- a/src/video_core/renderer_opengl/gl_state.h +++ b/src/video_core/renderer_opengl/gl_state.h | |||
| @@ -190,7 +190,7 @@ public: | |||
| 190 | GLfloat clamp; | 190 | GLfloat clamp; |
| 191 | } polygon_offset; | 191 | } polygon_offset; |
| 192 | 192 | ||
| 193 | std::array<bool, 2> clip_distance; // GL_CLIP_DISTANCE | 193 | std::array<bool, 8> clip_distance; // GL_CLIP_DISTANCE |
| 194 | 194 | ||
| 195 | OpenGLState(); | 195 | OpenGLState(); |
| 196 | 196 | ||