From 6d1d739de5713497fdf72d5de58fa04f1a6df08b Mon Sep 17 00:00:00 2001 From: Samuliak Date: Thu, 9 Jan 2025 16:03:53 +0100 Subject: [PATCH] limit framebuffer fetch to 2D textures --- .../LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp index b1ede036..0f9f28c6 100644 --- a/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp +++ b/src/Cafe/HW/Latte/LegacyShaderDecompiler/LatteDecompilerAnalyzer.cpp @@ -866,6 +866,13 @@ void LatteDecompiler_analyze(LatteDecompilerShaderContext* shaderContext, LatteD if (physAddr == MPTR_NULL) continue; // invalid data + // Check for dimension + auto dim = shader->textureUnitDim[textureIndex]; + // TODO: 2D arrays could technically be supported as well + if (dim != Latte::E_DIM::DIM_2D) + continue; + + // Check if the texture is used as render target for (sint32 j = 0; j < LATTE_NUM_COLOR_TARGET; j++) { if (((colorBufferMask) & (1 << j)) == 0) @@ -876,6 +883,7 @@ void LatteDecompiler_analyze(LatteDecompilerShaderContext* shaderContext, LatteD MPTR colorBufferPhysMem = regColorBufferBase; + // TODO: check if mip matches as well? if (physAddr == colorBufferPhysMem) { shader->textureRenderTargetIndex[i] = j;