diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2023-07-03 14:29:27 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-03 14:29:27 -0300 |
| commit | 1c7a90ef359d9974e5bd257c4d8e9bf526a6966c (patch) | |
| tree | 3ab1644927819b90b0aef78ed6749c6434150490 /src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs | |
| parent | 3b46bb73f781a011705ecbc8a1d3207dfb145829 (diff) | |
Stop identifying shader textures with handle and cbuf, use binding instead (#5266)
* Stop identifying shader textures with handle and cbuf, use binding instead
* Remove now unused code
* Consider image operations as having accurate type information too
I don't know why that was not the case before
* Fix missing unscale on InsertCoordNormalization, stop calling SetUsageFlagsForTextureQuery when not needed
* Shader cache version bump
* Change get texture methods to return descriptors created from ResourceManager state
This is required to ensure that reserved textures and images will not be bound as a guest texture/image
* Fix BindlessElimination.SetHandle inserting coords at the wrong place
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs')
| -rw-r--r-- | src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs index f966a4fc..4b1bf76e 100644 --- a/src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs +++ b/src/Ryujinx.Graphics.Shader/Translation/Optimizations/BindlessToIndexed.cs @@ -7,6 +7,8 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations { static class BindlessToIndexed { + private const int NvnTextureBufferIndex = 2; + public static void RunPass(BasicBlock block, ShaderConfig config) { // We can turn a bindless texture access into a indexed access, @@ -43,7 +45,7 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations if (ldcSrc0.Type != OperandType.Constant || !config.ResourceManager.TryGetConstantBufferSlot(ldcSrc0.Value, out int src0CbufSlot) || - src0CbufSlot != 2) + src0CbufSlot != NvnTextureBufferIndex) { continue; } @@ -102,8 +104,15 @@ namespace Ryujinx.Graphics.Shader.Translation.Optimizations private static void TurnIntoIndexed(ShaderConfig config, TextureOperation texOp, int handle) { - texOp.TurnIntoIndexed(handle); - config.SetUsedTexture(texOp.Inst, texOp.Type, texOp.Format, texOp.Flags, texOp.CbufSlot, handle); + int binding = config.ResourceManager.GetTextureOrImageBinding( + texOp.Inst, + texOp.Type | SamplerType.Indexed, + texOp.Format, + texOp.Flags & ~TextureFlags.Bindless, + NvnTextureBufferIndex, + handle); + + texOp.TurnIntoIndexed(binding); } } } |
