diff options
author | mageven <62494521+mageven@users.noreply.github.com> | 2021-03-27 05:20:26 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-27 00:50:26 +0100 |
commit | a5d5ca06357e2fe1ee2cf880460109ce9da5fe4e (patch) | |
tree | 2940071364e1a72972c2085d0ef812913b9f90ae /Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | |
parent | 32be8caa9d37471947e5d75f953f8fda7a3e1943 (diff) |
Shader Cache: Move bindless checking from translation to decode (#2145)
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs')
-rw-r--r-- | Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index d99a402b..d4ced7c8 100644 --- a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -426,6 +426,12 @@ namespace Ryujinx.Graphics.Gpu.Shader Hash128 programCodeHash = default; GuestShaderCacheEntry[] shaderCacheEntries = null; + // Current shader cache doesn't support bindless textures + if (shaderContexts[0].UsedFeatures.HasFlag(FeatureFlags.Bindless)) + { + isShaderCacheEnabled = false; + } + if (isShaderCacheEnabled) { isShaderCacheReadOnly = _cacheManager.IsReadOnly; @@ -448,8 +454,6 @@ namespace Ryujinx.Graphics.Gpu.Shader // The shader isn't currently cached, translate it and compile it. ShaderCodeHolder shader = TranslateShader(shaderContexts[0]); - bool isDiskShaderCacheIncompatible = shaderContexts[0].UsedFeatures.HasFlag(FeatureFlags.Bindless); - shader.HostShader = _context.Renderer.CompileShader(ShaderStage.Compute, shader.Program.Code); IProgram hostProgram = _context.Renderer.CreateProgram(new IShader[] { shader.HostShader }, null); @@ -458,7 +462,7 @@ namespace Ryujinx.Graphics.Gpu.Shader cpShader = new ShaderBundle(hostProgram, shader); - if (isShaderCacheEnabled && !isDiskShaderCacheIncompatible) + if (isShaderCacheEnabled) { _cpProgramsDiskCache.Add(programCodeHash, cpShader); @@ -536,6 +540,16 @@ namespace Ryujinx.Graphics.Gpu.Shader Hash128 programCodeHash = default; GuestShaderCacheEntry[] shaderCacheEntries = null; + // Current shader cache doesn't support bindless textures + for (int i = 0; i < shaderContexts.Length; i++) + { + if (shaderContexts[i] != null && shaderContexts[i].UsedFeatures.HasFlag(FeatureFlags.Bindless)) + { + isShaderCacheEnabled = false; + break; + } + } + if (isShaderCacheEnabled) { isShaderCacheReadOnly = _cacheManager.IsReadOnly; @@ -564,17 +578,6 @@ namespace Ryujinx.Graphics.Gpu.Shader shaders[3] = TranslateShader(shaderContexts[4]); shaders[4] = TranslateShader(shaderContexts[5]); - bool isDiskShaderCacheIncompatible = false; - - for (int i = 0; i < shaderContexts.Length; i++) - { - if (shaderContexts[i] != null && shaderContexts[i].UsedFeatures.HasFlag(FeatureFlags.Bindless)) - { - isDiskShaderCacheIncompatible = true; - break; - } - } - List<IShader> hostShaders = new List<IShader>(); for (int stage = 0; stage < Constants.ShaderStages; stage++) @@ -599,7 +602,7 @@ namespace Ryujinx.Graphics.Gpu.Shader gpShaders = new ShaderBundle(hostProgram, shaders); - if (isShaderCacheEnabled && !isDiskShaderCacheIncompatible) + if (isShaderCacheEnabled) { _gpProgramsDiskCache.Add(programCodeHash, gpShaders); |