From 3766be59e7c443a268ac1a32fb4a4dacd03d2b40 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Sun, 9 Oct 2022 13:54:26 +0100 Subject: [PATCH] Zero out vertex attribute state when disabled to avoid creating redundant pipelines --- .../gpu/interconnect/maxwell_3d/pipeline_state.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.cpp b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.cpp index 491ab8d7..2419cf55 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.cpp +++ b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.cpp @@ -329,7 +329,6 @@ namespace skyline::gpu::interconnect::maxwell3d { } /* Vertex Input State */ - // TODO: check if better individually void VertexInputState::EngineRegisters::DirtyBind(DirtyManager &manager, dirty::Handle handle) const { ranges::for_each(vertexStreams, [&](const auto ®s) { manager.Bind(handle, regs.format, regs.frequency); }); @@ -344,10 +343,14 @@ namespace skyline::gpu::interconnect::maxwell3d { for (u32 i{}; i < engine::VertexStreamCount; i++) packedState.SetVertexBinding(i, engine->vertexStreams[i], engine->vertexStreamInstance[i]); - for (u32 i{}; i < engine::VertexAttributeCount; i++) - packedState.vertexAttributes[i] = engine->vertexAttributes[i]; + for (u32 i{}; i < engine::VertexAttributeCount; i++) { + if (engine->vertexAttributes[i].source == engine::VertexAttribute::Source::Active) + packedState.vertexAttributes[i] = engine->vertexAttributes[i]; + else + packedState.vertexAttributes[i] = { .source = engine::VertexAttribute::Source::Inactive }; + } } - + /* Input Assembly State */ void InputAssemblyState::EngineRegisters::DirtyBind(DirtyManager &manager, dirty::Handle handle) const { manager.Bind(handle, primitiveRestartEnable);