diff options
| author | 2018-10-08 20:49:36 -0400 | |
|---|---|---|
| committer | 2018-10-08 20:49:36 -0400 | |
| commit | 30ff42b8cc8b2604797f3d378afd392c234ba930 (patch) | |
| tree | e7dbaf865dc05c3e3b5159e9f63b434b37d91fd5 | |
| parent | Merge pull request #1423 from DarkLordZach/romfs-file-exts (diff) | |
| download | yuzu-30ff42b8cc8b2604797f3d378afd392c234ba930.tar.gz yuzu-30ff42b8cc8b2604797f3d378afd392c234ba930.tar.xz yuzu-30ff42b8cc8b2604797f3d378afd392c234ba930.zip | |
Assert Scissor tests
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 17 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.h | 3 |
3 files changed, 31 insertions, 1 deletions
diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 4290da33f..20e1884da 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h | |||
| @@ -532,7 +532,21 @@ public: | |||
| 532 | INSERT_PADDING_WORDS(0x3); | 532 | INSERT_PADDING_WORDS(0x3); |
| 533 | s32 clear_stencil; | 533 | s32 clear_stencil; |
| 534 | 534 | ||
| 535 | INSERT_PADDING_WORDS(0x6C); | 535 | INSERT_PADDING_WORDS(0x17); |
| 536 | |||
| 537 | struct { | ||
| 538 | u32 enable; | ||
| 539 | union { | ||
| 540 | BitField<0, 16, u32> min_x; | ||
| 541 | BitField<16, 16, u32> max_x; | ||
| 542 | }; | ||
| 543 | union { | ||
| 544 | BitField<0, 16, u32> min_y; | ||
| 545 | BitField<16, 16, u32> max_y; | ||
| 546 | }; | ||
| 547 | } scissor_test; | ||
| 548 | |||
| 549 | INSERT_PADDING_WORDS(0x52); | ||
| 536 | 550 | ||
| 537 | s32 stencil_back_func_ref; | 551 | s32 stencil_back_func_ref; |
| 538 | u32 stencil_back_mask; | 552 | u32 stencil_back_mask; |
| @@ -1002,6 +1016,7 @@ ASSERT_REG_POSITION(vertex_buffer, 0x35D); | |||
| 1002 | ASSERT_REG_POSITION(clear_color[0], 0x360); | 1016 | ASSERT_REG_POSITION(clear_color[0], 0x360); |
| 1003 | ASSERT_REG_POSITION(clear_depth, 0x364); | 1017 | ASSERT_REG_POSITION(clear_depth, 0x364); |
| 1004 | ASSERT_REG_POSITION(clear_stencil, 0x368); | 1018 | ASSERT_REG_POSITION(clear_stencil, 0x368); |
| 1019 | ASSERT_REG_POSITION(scissor_test, 0x380); | ||
| 1005 | ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); | 1020 | ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); |
| 1006 | ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | 1021 | ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); |
| 1007 | ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | 1022 | ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); |
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp index 209bdf181..41e59a457 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.cpp +++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp | |||
| @@ -541,6 +541,7 @@ void RasterizerOpenGL::DrawArrays() { | |||
| 541 | SyncLogicOpState(); | 541 | SyncLogicOpState(); |
| 542 | SyncCullMode(); | 542 | SyncCullMode(); |
| 543 | SyncAlphaTest(); | 543 | SyncAlphaTest(); |
| 544 | SyncScissorTest(); | ||
| 544 | SyncTransformFeedback(); | 545 | SyncTransformFeedback(); |
| 545 | SyncPointState(); | 546 | SyncPointState(); |
| 546 | 547 | ||
| @@ -972,6 +973,17 @@ void RasterizerOpenGL::SyncAlphaTest() { | |||
| 972 | } | 973 | } |
| 973 | } | 974 | } |
| 974 | 975 | ||
| 976 | void RasterizerOpenGL::SyncScissorTest() { | ||
| 977 | const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | ||
| 978 | |||
| 979 | // TODO(Rodrigo): Alpha testing is a legacy OpenGL feature, but it can be | ||
| 980 | // implemented with a test+discard in fragment shaders. | ||
| 981 | if (regs.scissor_test.enable != 0) { | ||
| 982 | LOG_CRITICAL(Render_OpenGL, "Scissor testing is not implemented"); | ||
| 983 | UNREACHABLE(); | ||
| 984 | } | ||
| 985 | } | ||
| 986 | |||
| 975 | void RasterizerOpenGL::SyncTransformFeedback() { | 987 | void RasterizerOpenGL::SyncTransformFeedback() { |
| 976 | const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | 988 | const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; |
| 977 | 989 | ||
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.h b/src/video_core/renderer_opengl/gl_rasterizer.h index 0dab2018b..2395e0a7a 100644 --- a/src/video_core/renderer_opengl/gl_rasterizer.h +++ b/src/video_core/renderer_opengl/gl_rasterizer.h | |||
| @@ -165,6 +165,9 @@ private: | |||
| 165 | /// Syncs the alpha test state to match the guest state | 165 | /// Syncs the alpha test state to match the guest state |
| 166 | void SyncAlphaTest(); | 166 | void SyncAlphaTest(); |
| 167 | 167 | ||
| 168 | /// Syncs the scissor test state to match the guest state | ||
| 169 | void SyncScissorTest(); | ||
| 170 | |||
| 168 | /// Syncs the transform feedback state to match the guest state | 171 | /// Syncs the transform feedback state to match the guest state |
| 169 | void SyncTransformFeedback(); | 172 | void SyncTransformFeedback(); |
| 170 | 173 | ||