mirror of
				https://git.zaroz.cloud/nintendo-back-up/yuzu/yuzu.git
				synced 2025-05-12 00:45:25 +00:00 
			
		
		
		
	GPU: Support clears that don't clear the color buffer.
This commit is contained in:
		
							parent
							
								
									be51120d23
								
							
						
					
					
						commit
						c1811ed3d1
					
				| @ -420,8 +420,9 @@ bool Maxwell3D::IsShaderStageEnabled(Regs::ShaderStage stage) const { | ||||
| } | ||||
| 
 | ||||
| void Maxwell3D::ProcessClearBuffers() { | ||||
|     ASSERT(regs.clear_buffers.R && regs.clear_buffers.G && regs.clear_buffers.B && | ||||
|            regs.clear_buffers.A); | ||||
|     ASSERT(regs.clear_buffers.R == regs.clear_buffers.G && | ||||
|            regs.clear_buffers.R == regs.clear_buffers.B && | ||||
|            regs.clear_buffers.R == regs.clear_buffers.A); | ||||
| 
 | ||||
|     VideoCore::g_renderer->Rasterizer()->Clear(); | ||||
| } | ||||
|  | ||||
| @ -300,6 +300,20 @@ bool RasterizerOpenGL::AccelerateDrawBatch(bool is_indexed) { | ||||
| void RasterizerOpenGL::Clear() { | ||||
|     const auto& regs = Core::System().GetInstance().GPU().Maxwell3D().regs; | ||||
| 
 | ||||
|     GLbitfield clear_mask = 0; | ||||
|     if (regs.clear_buffers.R && regs.clear_buffers.G && regs.clear_buffers.B && | ||||
|         regs.clear_buffers.A) { | ||||
|         clear_mask |= GL_COLOR_BUFFER_BIT; | ||||
|     } | ||||
|     if (regs.clear_buffers.Z) | ||||
|         clear_mask |= GL_DEPTH_BUFFER_BIT; | ||||
| 
 | ||||
|     if (clear_mask == 0) | ||||
|         return; | ||||
| 
 | ||||
|     // Sync the depth test state before configuring the framebuffer surfaces.
 | ||||
|     SyncDepthTestState(); | ||||
| 
 | ||||
|     // TODO(bunnei): Implement these
 | ||||
|     const bool has_stencil = false; | ||||
|     const bool using_color_fb = true; | ||||
| @ -353,10 +367,6 @@ void RasterizerOpenGL::Clear() { | ||||
|                  regs.clear_color[3]); | ||||
|     glClearDepth(regs.clear_depth); | ||||
| 
 | ||||
|     GLbitfield clear_mask = GL_COLOR_BUFFER_BIT; | ||||
|     if (regs.clear_buffers.Z) | ||||
|         clear_mask |= GL_DEPTH_BUFFER_BIT; | ||||
| 
 | ||||
|     glClear(clear_mask); | ||||
| 
 | ||||
|     // Mark framebuffer surfaces as dirty
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Subv
						Subv