mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	Merge pull request #2921 from jroweboy/batch-fix-2
GPU: Add draw for immediate and batch modes
This commit is contained in:
		
						commit
						93930a966f
					
				
					 1 changed files with 17 additions and 12 deletions
				
			
		|  | @ -243,6 +243,15 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | ||||||
|                     ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); |                     ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); | ||||||
|                     g_state.geometry_pipeline.Setup(shader_engine); |                     g_state.geometry_pipeline.Setup(shader_engine); | ||||||
|                     g_state.geometry_pipeline.SubmitVertex(output); |                     g_state.geometry_pipeline.SubmitVertex(output); | ||||||
|  | 
 | ||||||
|  |                     // TODO: If drawing after every immediate mode triangle kills performance,
 | ||||||
|  |                     // change it to flush triangles whenever a drawing config register changes
 | ||||||
|  |                     // See: https://github.com/citra-emu/citra/pull/2866#issuecomment-327011550
 | ||||||
|  |                     VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||||||
|  |                     if (g_debug_context) { | ||||||
|  |                         g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, | ||||||
|  |                                                  nullptr); | ||||||
|  |                     } | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  | @ -250,16 +259,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     case PICA_REG_INDEX(pipeline.gpu_mode): |     case PICA_REG_INDEX(pipeline.gpu_mode): | ||||||
|         if (regs.pipeline.gpu_mode == PipelineRegs::GPUMode::Configuring) { |         // This register likely just enables vertex processing and doesn't need any special handling
 | ||||||
|             MICROPROFILE_SCOPE(GPU_Drawing); |  | ||||||
| 
 |  | ||||||
|             // Draw immediate mode triangles when GPU Mode is set to GPUMode::Configuring
 |  | ||||||
|             VideoCore::g_renderer->Rasterizer()->DrawTriangles(); |  | ||||||
| 
 |  | ||||||
|             if (g_debug_context) { |  | ||||||
|                 g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
|         break; |         break; | ||||||
| 
 | 
 | ||||||
|     case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): |     case PICA_REG_INDEX_WORKAROUND(pipeline.command_buffer.trigger[0], 0x23c): | ||||||
|  | @ -398,6 +398,11 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | ||||||
|                                                       range.second, range.first); |                                                       range.second, range.first); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|  |         VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||||||
|  |         if (g_debug_context) { | ||||||
|  |             g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); | ||||||
|  |         } | ||||||
|  | 
 | ||||||
|         break; |         break; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -632,6 +637,6 @@ void ProcessCommandList(const u32* list, u32 size) { | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace
 | } // namespace CommandProcessor
 | ||||||
| 
 | 
 | ||||||
| } // namespace
 | } // namespace Pica
 | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue