diff options
author | gdkchan <gab.dark.100@gmail.com> | 2021-10-24 19:40:20 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-10-24 19:40:20 -0300 |
commit | 04dfb86fdeb10f45c0a286309eb18affd47191af (patch) | |
tree | 1971dfb3f30ed7fc831f8e6aaf698d6f299100e3 | |
parent | 51fa1b2cb0bb54c0eb235c9d1fa68a7e1abaf464 (diff) |
Preserve image types for shader bindless surface instructions (.D variants) (#2779)
* Preserve image types for SULD/SUST .D variants
* Make format unknown for surface atomic if bindless and not sized
-rw-r--r-- | Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs | 8 | ||||
-rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessElimination.cs | 15 |
2 files changed, 13 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs index a47d6650..f78f9db8 100644 --- a/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs +++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitSurface.cs @@ -264,8 +264,8 @@ namespace Ryujinx.Graphics.Shader.Instructions } // TODO: FP and 64-bit formats. - TextureFormat format = !isBindless && (size == SuatomSize.Sd32 || size == SuatomSize.Sd64) - ? context.Config.GetTextureFormatAtomic(imm) + TextureFormat format = size == SuatomSize.Sd32 || size == SuatomSize.Sd64 + ? (isBindless ? TextureFormat.Unknown : context.Config.GetTextureFormatAtomic(imm)) : GetTextureFormat(size); if (compareAndSwap) @@ -516,8 +516,8 @@ namespace Ryujinx.Graphics.Shader.Instructions } // TODO: FP and 64-bit formats. - TextureFormat format = !isBindless && (size == SuatomSize.Sd32 || size == SuatomSize.Sd64) - ? context.Config.GetTextureFormatAtomic(imm) + TextureFormat format = size == SuatomSize.Sd32 || size == SuatomSize.Sd64 + ? (isBindless ? TextureFormat.Unknown : context.Config.GetTextureFormatAtomic(imm)) : GetTextureFormat(size); sourcesList.Add(Rb()); diff --git a/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessElimination.cs b/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessElimination.cs index a76df6a1..1b303caf 100644 --- a/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessElimination.cs +++ b/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessElimination.cs @@ -128,13 +128,16 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations int cbufOffset = src0.GetCbufOffset(); int cbufSlot = src0.GetCbufSlot(); - if (texOp.Inst == Instruction.ImageAtomic) + if (texOp.Format == TextureFormat.Unknown) { - texOp.Format = config.GetTextureFormatAtomic(cbufOffset, cbufSlot); - } - else - { - texOp.Format = config.GetTextureFormat(cbufOffset, cbufSlot); + if (texOp.Inst == Instruction.ImageAtomic) + { + texOp.Format = config.GetTextureFormatAtomic(cbufOffset, cbufSlot); + } + else + { + texOp.Format = config.GetTextureFormat(cbufOffset, cbufSlot); + } } SetHandle(config, texOp, cbufOffset, cbufSlot, false); |