diff options
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs')
-rw-r--r-- | Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs index 768a58e7..a085936a 100644 --- a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs +++ b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs @@ -195,7 +195,7 @@ namespace Ryujinx.Graphics.Gpu.Shader if (tfd != null) { - flags = TranslationFlags.Feedback; + flags |= TranslationFlags.Feedback; } TranslationCounts counts = new TranslationCounts(); @@ -426,6 +426,8 @@ 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); @@ -434,7 +436,7 @@ namespace Ryujinx.Graphics.Gpu.Shader cpShader = new ShaderBundle(hostProgram, shader); - if (isShaderCacheEnabled) + if (isShaderCacheEnabled && !isDiskShaderCacheIncompatible) { _cpProgramsDiskCache.Add(programCodeHash, cpShader); @@ -540,6 +542,17 @@ 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++) @@ -564,7 +577,7 @@ namespace Ryujinx.Graphics.Gpu.Shader gpShaders = new ShaderBundle(hostProgram, shaders); - if (isShaderCacheEnabled) + if (isShaderCacheEnabled && !isDiskShaderCacheIncompatible) { _gpProgramsDiskCache.Add(programCodeHash, gpShaders); |