The task isn't required for loading compute binary.

This commit is contained in:
riperiperi 2021-04-04 14:01:33 +01:00
parent a0aa09912c
commit 35eac315ab

View file

@ -168,29 +168,34 @@ namespace Ryujinx.Graphics.Gpu.Shader
ShaderProgram program = null; ShaderProgram program = null;
ShaderProgramInfo shaderProgramInfo = null; ShaderProgramInfo shaderProgramInfo = null;
Task compileTask = Task.Run(() =>
{
// Reconstruct code holder.
if (isHostProgramValid) if (isHostProgramValid)
{ {
// Reconstruct code holder.
program = new ShaderProgram(entry.Header.Stage, ""); program = new ShaderProgram(entry.Header.Stage, "");
shaderProgramInfo = hostShaderEntries[0].ToShaderProgramInfo(); shaderProgramInfo = hostShaderEntries[0].ToShaderProgramInfo();
ShaderCodeHolder shader = new ShaderCodeHolder(program, shaderProgramInfo, entry.Code);
_cpProgramsDiskCache.Add(key, new ShaderBundle(hostProgram, shader));
return true;
} }
else else
{
// If the host program was rejected by the gpu driver or isn't in cache, try to build from program sources again.
Task compileTask = Task.Run(() =>
{ {
IGpuAccessor gpuAccessor = new CachedGpuAccessor(_context, entry.Code, entry.Header.GpuAccessorHeader, entry.TextureDescriptors); IGpuAccessor gpuAccessor = new CachedGpuAccessor(_context, entry.Code, entry.Header.GpuAccessorHeader, entry.TextureDescriptors);
program = Translator.CreateContext(0, gpuAccessor, DefaultFlags | TranslationFlags.Compute).Translate(out shaderProgramInfo); program = Translator.CreateContext(0, gpuAccessor, DefaultFlags | TranslationFlags.Compute).Translate(out shaderProgramInfo);
}
}); });
task.OnTask(compileTask, (bool _, ShaderCompileTask task) => task.OnTask(compileTask, (bool _, ShaderCompileTask task) =>
{ {
ShaderCodeHolder shader = new ShaderCodeHolder(program, shaderProgramInfo, entry.Code); ShaderCodeHolder shader = new ShaderCodeHolder(program, shaderProgramInfo, entry.Code);
// If the host program was rejected by the gpu driver or isn't in cache, try to build from program sources again.
if (!isHostProgramValid)
{
Logger.Info?.Print(LogClass.Gpu, $"Host shader {key} got invalidated, rebuilding from guest..."); Logger.Info?.Print(LogClass.Gpu, $"Host shader {key} got invalidated, rebuilding from guest...");
// Compile shader and create program as the shader program binary got invalidated. // Compile shader and create program as the shader program binary got invalidated.
@ -222,16 +227,10 @@ namespace Ryujinx.Graphics.Gpu.Shader
}); });
return false; // Not finished: still need to compile the host program. return false; // Not finished: still need to compile the host program.
}
else
{
_cpProgramsDiskCache.Add(key, new ShaderBundle(hostProgram, shader));
return true;
}
}); });
return false; // Not finished: translating the shaders. return false; // Not finished: translating the program.
}
}); });
} }
@ -394,7 +393,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
} }
}); });
return false; // Not finished: translating the shaders. return false; // Not finished: translating the program.
}); });
} }