VideoCore/Shader: Split shader uniform state and shader engine

Currently there's only a single dummy implementation, which will be
split in a following commit.
This commit is contained in:
Yuri Kunde Schlesner
2016-12-16 23:21:26 -08:00
parent bd82cffd0b
commit dd4a1672a7
5 changed files with 57 additions and 22 deletions

View File

@ -142,15 +142,16 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
MICROPROFILE_SCOPE(GPU_Drawing);
immediate_attribute_id = 0;
Shader::UnitState shader_unit;
g_state.vs.Setup();
auto* shader_engine = Shader::GetEngine();
shader_engine->SetupBatch(&g_state.vs);
// Send to vertex shader
if (g_debug_context)
g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
static_cast<void*>(&immediate_input));
Shader::UnitState shader_unit;
shader_unit.LoadInputVertex(immediate_input, regs.vs.num_input_attributes + 1);
g_state.vs.Run(shader_unit, regs.vs.main_offset);
shader_engine->Run(shader_unit, regs.vs.main_offset);
Shader::OutputVertex output_vertex =
shader_unit.output_registers.ToVertex(regs.vs);
@ -244,8 +245,10 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
unsigned int vertex_cache_pos = 0;
vertex_cache_ids.fill(-1);
auto* shader_engine = Shader::GetEngine();
Shader::UnitState shader_unit;
g_state.vs.Setup();
shader_engine->SetupBatch(&g_state.vs);
for (unsigned int index = 0; index < regs.num_vertices; ++index) {
// Indexed rendering doesn't use the start offset
@ -285,7 +288,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
(void*)&input);
shader_unit.LoadInputVertex(input, loader.GetNumTotalAttributes());
g_state.vs.Run(shader_unit, regs.vs.main_offset);
shader_engine->Run(shader_unit, regs.vs.main_offset);
// Retrieve vertex from register data
output_vertex = shader_unit.output_registers.ToVertex(regs.vs);