Merge pull request #2921 from jroweboy/batch-fix-2
GPU: Add draw for immediate and batch modes
This commit is contained in:
		| @@ -243,6 +243,15 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { | ||||
|                     ASSERT(!g_state.geometry_pipeline.NeedIndexInput()); | ||||
|                     g_state.geometry_pipeline.Setup(shader_engine); | ||||
|                     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): | ||||
|         if (regs.pipeline.gpu_mode == PipelineRegs::GPUMode::Configuring) { | ||||
|             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); | ||||
|             } | ||||
|         } | ||||
|         // This register likely just enables vertex processing and doesn't need any special handling | ||||
|         break; | ||||
|  | ||||
|     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); | ||||
|         } | ||||
|  | ||||
|         VideoCore::g_renderer->Rasterizer()->DrawTriangles(); | ||||
|         if (g_debug_context) { | ||||
|             g_debug_context->OnEvent(DebugContext::Event::FinishedPrimitiveBatch, nullptr); | ||||
|         } | ||||
|  | ||||
|         break; | ||||
|     } | ||||
|  | ||||
| @@ -632,6 +637,6 @@ void ProcessCommandList(const u32* list, u32 size) { | ||||
|     } | ||||
| } | ||||
|  | ||||
| } // namespace | ||||
| } // namespace CommandProcessor | ||||
|  | ||||
| } // namespace | ||||
| } // namespace Pica | ||||
|   | ||||
		Reference in New Issue
	
	Block a user