diff --git a/GPU/Common/GPUStateUtils.cpp b/GPU/Common/GPUStateUtils.cpp index fc599c6f3e..83ce5b61ee 100644 --- a/GPU/Common/GPUStateUtils.cpp +++ b/GPU/Common/GPUStateUtils.cpp @@ -958,6 +958,7 @@ void ApplyStencilReplaceAndLogicOpIgnoreBlend(ReplaceAlphaType replaceAlphaWithS bool IsColorWriteMaskComplex(bool allowFramebufferRead) { // Restrict to Outrun temporarily (by uglily reusing the ReinterpretFramebuffers flag) + // This check must match the one in ConvertMaskState. if (!allowFramebufferRead || !PSP_CoreParameter().compat.flags().ReinterpretFramebuffers) { // Don't have a choice - we'll make do but it won't always be right. return false; @@ -998,7 +999,9 @@ void ConvertMaskState(GenericMaskState &maskState, bool allowFramebufferRead) { break; default: if (allowFramebufferRead) { - maskState.applyFramebufferRead = true; + // Instead of just 'true', restrict shader bitmasks to Outrun temporarily (by uglily reusing the ReinterpretFramebuffers flag) + // TODO: This check must match the one in IsColorWriteMaskComplex. + maskState.applyFramebufferRead = PSP_CoreParameter().compat.flags().ReinterpretFramebuffers; maskState.rgba[i] = true; } else { // Use the old heuristic. diff --git a/GPU/D3D11/StateMappingD3D11.cpp b/GPU/D3D11/StateMappingD3D11.cpp index a6ca5025da..5b0bda982f 100644 --- a/GPU/D3D11/StateMappingD3D11.cpp +++ b/GPU/D3D11/StateMappingD3D11.cpp @@ -162,7 +162,7 @@ void DrawEngineD3D11::ApplyDrawState(int prim) { GenericMaskState maskState; ConvertMaskState(maskState, gstate_c.allowFramebufferRead); - if (blendState.applyFramebufferRead) { + if (blendState.applyFramebufferRead || maskState.applyFramebufferRead) { if (ApplyFramebufferRead(&fboTexNeedsBind_)) { // The shader takes over the responsibility for blending, so recompute. ApplyStencilReplaceAndLogicOpIgnoreBlend(blendState.replaceAlphaWithStencil, blendState);