mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Rasterizer: Respect buffer-write allow registers
This commit is contained in:
		
							parent
							
								
									d47605b2ed
								
							
						
					
					
						commit
						fa24df7340
					
				
					 2 changed files with 16 additions and 4 deletions
				
			
		|  | @ -578,7 +578,17 @@ struct Regs { | |||
|     } | ||||
| 
 | ||||
|     struct { | ||||
|         INSERT_PADDING_WORDS(0x6); | ||||
|         INSERT_PADDING_WORDS(0x3); | ||||
| 
 | ||||
|         union { | ||||
|             BitField<0, 4, u32> allow_color_write; // 0 = disable, else enable
 | ||||
|         }; | ||||
| 
 | ||||
|         INSERT_PADDING_WORDS(0x1); | ||||
| 
 | ||||
|         union { | ||||
|             BitField<0, 2, u32> allow_depth_stencil_write; // 0 = disable, else enable
 | ||||
|         }; | ||||
| 
 | ||||
|         DepthFormat depth_format; // TODO: Should be a BitField!
 | ||||
|         BitField<16, 3, ColorFormat> color_format; | ||||
|  |  | |||
|  | @ -809,7 +809,8 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0, | |||
| 
 | ||||
|             auto UpdateStencil = [stencil_test, x, y, &old_stencil](Pica::Regs::StencilAction action) { | ||||
|                 u8 new_stencil = PerformStencilAction(action, old_stencil, stencil_test.reference_value); | ||||
|                 SetStencil(x >> 4, y >> 4, (new_stencil & stencil_test.write_mask) | (old_stencil & ~stencil_test.write_mask)); | ||||
|                 if (g_state.regs.framebuffer.allow_depth_stencil_write != 0) | ||||
|                     SetStencil(x >> 4, y >> 4, (new_stencil & stencil_test.write_mask) | (old_stencil & ~stencil_test.write_mask)); | ||||
|             }; | ||||
| 
 | ||||
|             if (stencil_action_enable) { | ||||
|  | @ -909,7 +910,7 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0, | |||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             if (output_merger.depth_write_enable) | ||||
|             if (regs.framebuffer.allow_depth_stencil_write != 0 && output_merger.depth_write_enable) | ||||
|                 SetDepth(x >> 4, y >> 4, z); | ||||
| 
 | ||||
|             // The stencil depth_pass action is executed even if depth testing is disabled
 | ||||
|  | @ -1133,7 +1134,8 @@ static void ProcessTriangleInternal(const Shader::OutputVertex& v0, | |||
|                 output_merger.alpha_enable ? blend_output.a() : dest.a() | ||||
|             }; | ||||
| 
 | ||||
|             DrawPixel(x >> 4, y >> 4, result); | ||||
|             if (regs.framebuffer.allow_color_write != 0) | ||||
|                 DrawPixel(x >> 4, y >> 4, result); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue