summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar FernandoS272018-10-08 20:49:36 -0400
committerGravatar FernandoS272018-10-08 20:49:36 -0400
commit30ff42b8cc8b2604797f3d378afd392c234ba930 (patch)
treee7dbaf865dc05c3e3b5159e9f63b434b37d91fd5
parentMerge pull request #1423 from DarkLordZach/romfs-file-exts (diff)
downloadyuzu-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.h17
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp12
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.h3
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);
1002ASSERT_REG_POSITION(clear_color[0], 0x360); 1016ASSERT_REG_POSITION(clear_color[0], 0x360);
1003ASSERT_REG_POSITION(clear_depth, 0x364); 1017ASSERT_REG_POSITION(clear_depth, 0x364);
1004ASSERT_REG_POSITION(clear_stencil, 0x368); 1018ASSERT_REG_POSITION(clear_stencil, 0x368);
1019ASSERT_REG_POSITION(scissor_test, 0x380);
1005ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); 1020ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5);
1006ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); 1021ASSERT_REG_POSITION(stencil_back_mask, 0x3D6);
1007ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); 1022ASSERT_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
976void 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
975void RasterizerOpenGL::SyncTransformFeedback() { 987void 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