diff options
author | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2016-12-19 02:58:30 +0100 |
---|---|---|
committer | Yuri Kunde Schlesner <yuriks@yuriks.net> | 2017-01-30 06:31:37 +0100 |
commit | 92bf5c88e6f85ebeef161a0056c86c66bc25c6e7 (patch) | |
tree | 984a05367d1cde9249bbd962817ebbbcd58813a9 /src/video_core/command_processor.cpp | |
parent | VideoCore: Consistently use shader configuration to load attributes (diff) | |
download | yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar.gz yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar.bz2 yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar.lz yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar.xz yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.tar.zst yuzu-92bf5c88e6f85ebeef161a0056c86c66bc25c6e7.zip |
Diffstat (limited to 'src/video_core/command_processor.cpp')
-rw-r--r-- | src/video_core/command_processor.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/video_core/command_processor.cpp b/src/video_core/command_processor.cpp index fef0b4ceb..4955ff9f9 100644 --- a/src/video_core/command_processor.cpp +++ b/src/video_core/command_processor.cpp @@ -151,10 +151,11 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation, static_cast<void*>(&immediate_input)); Shader::UnitState shader_unit; + Shader::AttributeBuffer output{}; + shader_unit.LoadInput(regs.vs, immediate_input); shader_engine->Run(g_state.vs, shader_unit); - auto output_vertex = Shader::OutputVertex::FromRegisters( - shader_unit.registers.output, regs, regs.vs.output_mask); + shader_unit.WriteOutput(regs.vs, output); // Send to renderer using Pica::Shader::OutputVertex; @@ -163,7 +164,8 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { VideoCore::g_renderer->Rasterizer()->AddTriangle(v0, v1, v2); }; - g_state.primitive_assembler.SubmitVertex(output_vertex, AddTriangle); + g_state.primitive_assembler.SubmitVertex( + Shader::OutputVertex::FromAttributeBuffer(regs, output), AddTriangle); } } } @@ -281,7 +283,7 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { if (!vertex_cache_hit) { // Initialize data for the current vertex - Shader::AttributeBuffer input; + Shader::AttributeBuffer input, output{}; loader.LoadVertex(base_address, index, vertex, input, memory_accesses); // Send to vertex shader @@ -290,10 +292,10 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) { (void*)&input); shader_unit.LoadInput(regs.vs, input); shader_engine->Run(g_state.vs, shader_unit); + shader_unit.WriteOutput(regs.vs, output); // Retrieve vertex from register data - output_vertex = Shader::OutputVertex::FromRegisters(shader_unit.registers.output, - regs, regs.vs.output_mask); + output_vertex = Shader::OutputVertex::FromAttributeBuffer(regs, output); if (is_indexed) { vertex_cache[vertex_cache_pos] = output_vertex; |