mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-10-30 15:39:02 -05:00 
			
		
		
		
	Merge pull request #1460 from FernandoS27/scissor_test
Implemented Scissor Testing
This commit is contained in:
		| @@ -532,7 +532,21 @@ public: | |||||||
|                 INSERT_PADDING_WORDS(0x3); |                 INSERT_PADDING_WORDS(0x3); | ||||||
|                 s32 clear_stencil; |                 s32 clear_stencil; | ||||||
|  |  | ||||||
|                 INSERT_PADDING_WORDS(0x6C); |                 INSERT_PADDING_WORDS(0x17); | ||||||
|  |  | ||||||
|  |                 struct { | ||||||
|  |                     u32 enable; | ||||||
|  |                     union { | ||||||
|  |                         BitField<0, 16, u32> min_x; | ||||||
|  |                         BitField<16, 16, u32> max_x; | ||||||
|  |                     }; | ||||||
|  |                     union { | ||||||
|  |                         BitField<0, 16, u32> min_y; | ||||||
|  |                         BitField<16, 16, u32> max_y; | ||||||
|  |                     }; | ||||||
|  |                 } scissor_test; | ||||||
|  |  | ||||||
|  |                 INSERT_PADDING_WORDS(0x52); | ||||||
|  |  | ||||||
|                 s32 stencil_back_func_ref; |                 s32 stencil_back_func_ref; | ||||||
|                 u32 stencil_back_mask; |                 u32 stencil_back_mask; | ||||||
| @@ -1002,6 +1016,7 @@ ASSERT_REG_POSITION(vertex_buffer, 0x35D); | |||||||
| ASSERT_REG_POSITION(clear_color[0], 0x360); | ASSERT_REG_POSITION(clear_color[0], 0x360); | ||||||
| ASSERT_REG_POSITION(clear_depth, 0x364); | ASSERT_REG_POSITION(clear_depth, 0x364); | ||||||
| ASSERT_REG_POSITION(clear_stencil, 0x368); | ASSERT_REG_POSITION(clear_stencil, 0x368); | ||||||
|  | ASSERT_REG_POSITION(scissor_test, 0x380); | ||||||
| ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); | ASSERT_REG_POSITION(stencil_back_func_ref, 0x3D5); | ||||||
| ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | ASSERT_REG_POSITION(stencil_back_mask, 0x3D6); | ||||||
| ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | ASSERT_REG_POSITION(stencil_back_func_mask, 0x3D7); | ||||||
|   | |||||||
| @@ -552,6 +552,7 @@ void RasterizerOpenGL::DrawArrays() { | |||||||
|     SyncLogicOpState(); |     SyncLogicOpState(); | ||||||
|     SyncCullMode(); |     SyncCullMode(); | ||||||
|     SyncAlphaTest(); |     SyncAlphaTest(); | ||||||
|  |     SyncScissorTest(); | ||||||
|     SyncTransformFeedback(); |     SyncTransformFeedback(); | ||||||
|     SyncPointState(); |     SyncPointState(); | ||||||
|  |  | ||||||
| @@ -984,6 +985,22 @@ void RasterizerOpenGL::SyncAlphaTest() { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | void RasterizerOpenGL::SyncScissorTest() { | ||||||
|  |     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | ||||||
|  |  | ||||||
|  |     state.scissor.enabled = (regs.scissor_test.enable != 0); | ||||||
|  |     // TODO(Blinkhawk): Figure if the hardware supports scissor testing per viewport and how it's | ||||||
|  |     // implemented. | ||||||
|  |     if (regs.scissor_test.enable != 0) { | ||||||
|  |         const u32 width = regs.scissor_test.max_x - regs.scissor_test.min_x; | ||||||
|  |         const u32 height = regs.scissor_test.max_y - regs.scissor_test.min_y; | ||||||
|  |         state.scissor.x = regs.scissor_test.min_x; | ||||||
|  |         state.scissor.y = regs.scissor_test.min_y; | ||||||
|  |         state.scissor.width = width; | ||||||
|  |         state.scissor.height = height; | ||||||
|  |     } | ||||||
|  | } | ||||||
|  |  | ||||||
| void RasterizerOpenGL::SyncTransformFeedback() { | void RasterizerOpenGL::SyncTransformFeedback() { | ||||||
|     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; |     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | ||||||
|  |  | ||||||
|   | |||||||
| @@ -165,6 +165,9 @@ private: | |||||||
|     /// Syncs the alpha test state to match the guest state |     /// Syncs the alpha test state to match the guest state | ||||||
|     void SyncAlphaTest(); |     void SyncAlphaTest(); | ||||||
|  |  | ||||||
|  |     /// Syncs the scissor test state to match the guest state | ||||||
|  |     void SyncScissorTest(); | ||||||
|  |  | ||||||
|     /// Syncs the transform feedback state to match the guest state |     /// Syncs the transform feedback state to match the guest state | ||||||
|     void SyncTransformFeedback(); |     void SyncTransformFeedback(); | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 bunnei
					bunnei