forked from suyu/suyu
Merge pull request #2317 from yuriks/vertex-copy
VideoCore: Eliminate an unnecessary copy in the drawcall loop
This commit is contained in:
commit
ec9130de8d
3 changed files with 3 additions and 5 deletions
|
@ -251,7 +251,6 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
|
||||||
ASSERT(vertex != -1);
|
ASSERT(vertex != -1);
|
||||||
|
|
||||||
bool vertex_cache_hit = false;
|
bool vertex_cache_hit = false;
|
||||||
Shader::OutputRegisters output_registers;
|
|
||||||
|
|
||||||
if (is_indexed) {
|
if (is_indexed) {
|
||||||
if (g_debug_context && Pica::g_debug_context->recorder) {
|
if (g_debug_context && Pica::g_debug_context->recorder) {
|
||||||
|
@ -279,10 +278,9 @@ static void WritePicaReg(u32 id, u32 value, u32 mask) {
|
||||||
g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
|
g_debug_context->OnEvent(DebugContext::Event::VertexShaderInvocation,
|
||||||
(void*)&input);
|
(void*)&input);
|
||||||
g_state.vs.Run(shader_unit, input, loader.GetNumTotalAttributes());
|
g_state.vs.Run(shader_unit, input, loader.GetNumTotalAttributes());
|
||||||
output_registers = shader_unit.output_registers;
|
|
||||||
|
|
||||||
// Retrieve vertex from register data
|
// Retrieve vertex from register data
|
||||||
output_vertex = output_registers.ToVertex(regs.vs);
|
output_vertex = shader_unit.output_registers.ToVertex(regs.vs);
|
||||||
|
|
||||||
if (is_indexed) {
|
if (is_indexed) {
|
||||||
vertex_cache[vertex_cache_pos] = output_vertex;
|
vertex_cache[vertex_cache_pos] = output_vertex;
|
||||||
|
|
|
@ -25,7 +25,7 @@ namespace Pica {
|
||||||
|
|
||||||
namespace Shader {
|
namespace Shader {
|
||||||
|
|
||||||
OutputVertex OutputRegisters::ToVertex(const Regs::ShaderConfig& config) {
|
OutputVertex OutputRegisters::ToVertex(const Regs::ShaderConfig& config) const {
|
||||||
// Setup output data
|
// Setup output data
|
||||||
OutputVertex ret;
|
OutputVertex ret;
|
||||||
// TODO(neobrain): Under some circumstances, up to 16 attributes may be output. We need to
|
// TODO(neobrain): Under some circumstances, up to 16 attributes may be output. We need to
|
||||||
|
|
|
@ -85,7 +85,7 @@ struct OutputRegisters {
|
||||||
|
|
||||||
alignas(16) Math::Vec4<float24> value[16];
|
alignas(16) Math::Vec4<float24> value[16];
|
||||||
|
|
||||||
OutputVertex ToVertex(const Regs::ShaderConfig& config);
|
OutputVertex ToVertex(const Regs::ShaderConfig& config) const;
|
||||||
};
|
};
|
||||||
static_assert(std::is_pod<OutputRegisters>::value, "Structure is not POD");
|
static_assert(std::is_pod<OutputRegisters>::value, "Structure is not POD");
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue