mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu-mainline.git
				synced 2025-03-21 01:53:15 +00:00 
			
		
		
		
	Merge pull request #1592 from bunnei/prim-restart
gl_rasterizer: Implement primitive restart.
This commit is contained in:
		
						commit
						ed95ce6bb7
					
				| @ -751,7 +751,14 @@ public: | ||||
|                     }; | ||||
|                 } draw; | ||||
| 
 | ||||
|                 INSERT_PADDING_WORDS(0x6B); | ||||
|                 INSERT_PADDING_WORDS(0xA); | ||||
| 
 | ||||
|                 struct { | ||||
|                     u32 enabled; | ||||
|                     u32 index; | ||||
|                 } primitive_restart; | ||||
| 
 | ||||
|                 INSERT_PADDING_WORDS(0x5F); | ||||
| 
 | ||||
|                 struct { | ||||
|                     u32 start_addr_high; | ||||
| @ -1082,6 +1089,7 @@ ASSERT_REG_POSITION(stencil_back_func_func, 0x569); | ||||
| ASSERT_REG_POSITION(point_coord_replace, 0x581); | ||||
| ASSERT_REG_POSITION(code_address, 0x582); | ||||
| ASSERT_REG_POSITION(draw, 0x585); | ||||
| ASSERT_REG_POSITION(primitive_restart, 0x591); | ||||
| ASSERT_REG_POSITION(index_array, 0x5F2); | ||||
| ASSERT_REG_POSITION(instanced_arrays, 0x620); | ||||
| ASSERT_REG_POSITION(cull, 0x646); | ||||
|  | ||||
| @ -570,6 +570,7 @@ void RasterizerOpenGL::DrawArrays() { | ||||
|     SyncBlendState(); | ||||
|     SyncLogicOpState(); | ||||
|     SyncCullMode(); | ||||
|     SyncPrimitiveRestart(); | ||||
|     SyncDepthRange(); | ||||
|     SyncScissorTest(); | ||||
|     // Alpha Testing is synced on shaders.
 | ||||
| @ -924,6 +925,13 @@ void RasterizerOpenGL::SyncCullMode() { | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| void RasterizerOpenGL::SyncPrimitiveRestart() { | ||||
|     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | ||||
| 
 | ||||
|     state.primitive_restart.enabled = regs.primitive_restart.enabled; | ||||
|     state.primitive_restart.index = regs.primitive_restart.index; | ||||
| } | ||||
| 
 | ||||
| void RasterizerOpenGL::SyncDepthRange() { | ||||
|     const auto& regs = Core::System::GetInstance().GPU().Maxwell3D().regs; | ||||
| 
 | ||||
|  | ||||
| @ -144,6 +144,9 @@ private: | ||||
|     /// Syncs the cull mode to match the guest state
 | ||||
|     void SyncCullMode(); | ||||
| 
 | ||||
|     /// Syncs the primitve restart to match the guest state
 | ||||
|     void SyncPrimitiveRestart(); | ||||
| 
 | ||||
|     /// Syncs the depth range to match the guest state
 | ||||
|     void SyncDepthRange(); | ||||
| 
 | ||||
|  | ||||
| @ -24,6 +24,9 @@ OpenGLState::OpenGLState() { | ||||
|     depth.depth_range_near = 0.0f; | ||||
|     depth.depth_range_far = 1.0f; | ||||
| 
 | ||||
|     primitive_restart.enabled = false; | ||||
|     primitive_restart.index = 0; | ||||
| 
 | ||||
|     color_mask.red_enabled = GL_TRUE; | ||||
|     color_mask.green_enabled = GL_TRUE; | ||||
|     color_mask.blue_enabled = GL_TRUE; | ||||
| @ -127,6 +130,18 @@ void OpenGLState::Apply() const { | ||||
|         glDepthRange(depth.depth_range_near, depth.depth_range_far); | ||||
|     } | ||||
| 
 | ||||
|     // Primitive restart
 | ||||
|     if (primitive_restart.enabled != cur_state.primitive_restart.enabled) { | ||||
|         if (primitive_restart.enabled) { | ||||
|             glEnable(GL_PRIMITIVE_RESTART); | ||||
|         } else { | ||||
|             glDisable(GL_PRIMITIVE_RESTART); | ||||
|         } | ||||
|     } | ||||
|     if (primitive_restart.index != cur_state.primitive_restart.index) { | ||||
|         glPrimitiveRestartIndex(primitive_restart.index); | ||||
|     } | ||||
| 
 | ||||
|     // Color mask
 | ||||
|     if (color_mask.red_enabled != cur_state.color_mask.red_enabled || | ||||
|         color_mask.green_enabled != cur_state.color_mask.green_enabled || | ||||
|  | ||||
| @ -49,6 +49,11 @@ public: | ||||
|         GLfloat depth_range_far;  // GL_DEPTH_RANGE
 | ||||
|     } depth; | ||||
| 
 | ||||
|     struct { | ||||
|         bool enabled; | ||||
|         GLuint index; | ||||
|     } primitive_restart; // GL_PRIMITIVE_RESTART
 | ||||
| 
 | ||||
|     struct { | ||||
|         GLboolean red_enabled; | ||||
|         GLboolean green_enabled; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 bunnei
						bunnei