From 6333a92b5306dd40e7e8f00d64e92aba6fff7b3d Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Wed, 18 Jan 2023 20:07:36 +0000 Subject: [PATCH] Only include active RTs in pipeline state key This was causing a buildup of many redundant pipelines in SMO as a depth-only shader was being called without previous RTs being unbound. --- .../skyline/gpu/interconnect/maxwell_3d/pipeline_state.cpp | 7 ++++++- .../skyline/gpu/interconnect/maxwell_3d/pipeline_state.h | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) 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 1ba524a0..540b0494 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 @@ -35,6 +35,7 @@ namespace skyline::gpu::interconnect::maxwell3d { void ColorRenderTargetState::Flush(InterconnectContext &ctx, PackedPipelineState &packedState) { auto &target{engine->colorTarget}; + format = target.format; packedState.SetColorRenderTargetFormat(index, target.format); if (target.format == engine::ColorTarget::Format::Disabled) { @@ -78,6 +79,7 @@ namespace skyline::gpu::interconnect::maxwell3d { view = ctx.gpu.texture.FindOrCreate(guest, ctx.executor.tag); } else { + format = engine::ColorTarget::Format::Disabled; packedState.SetColorRenderTargetFormat(index, engine::ColorTarget::Format::Disabled); view = {}; } @@ -391,9 +393,12 @@ namespace skyline::gpu::interconnect::maxwell3d { } colorAttachments.clear(); + packedState.colorRenderTargetFormats = {}; for (size_t i{}; i < engine::ColorTargetCount; i++) { if (i < ctSelect.count) { - const auto &view{colorRenderTargets[ctSelect[i]].UpdateGet(ctx, packedState).view.get()}; + const auto &rt{colorRenderTargets[ctSelect[i]].UpdateGet(ctx, packedState)}; + const auto view{rt.view.get()}; + packedState.SetColorRenderTargetFormat(ctSelect[i], rt.format); colorAttachments.push_back(view); if (view) diff --git a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.h b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.h index 5a3930de..33e60ac0 100644 --- a/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.h +++ b/app/src/main/cpp/skyline/gpu/interconnect/maxwell_3d/pipeline_state.h @@ -28,6 +28,7 @@ namespace skyline::gpu::interconnect::maxwell3d { ColorRenderTargetState(dirty::Handle dirtyHandle, DirtyManager &manager, const EngineRegisters &engine, size_t index); std::shared_ptr view; + engine::ColorTarget::Format format{engine::ColorTarget::Format::Disabled}; void Flush(InterconnectContext &ctx, PackedPipelineState &packedState); };