Skip to content
Snippets Groups Projects
Commit 93930a96 authored by James Rowe's avatar James Rowe Committed by GitHub
Browse files

Merge pull request #2921 from jroweboy/batch-fix-2

GPU: Add draw for immediate and batch modes
parents a7758b0b 19d41dcc
No related branches found
No related tags found
No related merge requests found
...@@ -243,6 +243,15 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { ...@@ -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) { ...@@ -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) { ...@@ -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) { ...@@ -632,6 +637,6 @@ void ProcessCommandList(const u32* list, u32 size) {
} }
} }
} // namespace } // namespace CommandProcessor
} // namespace } // namespace Pica
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment