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…
Reference in a new issue