aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs')
-rw-r--r--Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs19
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);