diff options
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation/Translator.cs')
-rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index 1a69c511..1d7aacdd 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -16,15 +16,19 @@ namespace Ryujinx.Graphics.Shader.Translation public static ShaderProgram Translate(ulong address, IGpuAccessor gpuAccessor, TranslationFlags flags) { - Operation[] ops = DecodeShader(address, gpuAccessor, flags, out ShaderConfig config, out int size); + Operation[] ops = DecodeShader(address, gpuAccessor, flags, out ShaderConfig config, out int size, out FeatureFlags featureFlags); + + config.UsedFeatures = featureFlags; return Translate(ops, config, size); } public static ShaderProgram Translate(ulong addressA, ulong addressB, IGpuAccessor gpuAccessor, TranslationFlags flags) { - Operation[] opsA = DecodeShader(addressA, gpuAccessor, flags | TranslationFlags.VertexA, out _, out int sizeA); - Operation[] opsB = DecodeShader(addressB, gpuAccessor, flags, out ShaderConfig config, out int sizeB); + Operation[] opsA = DecodeShader(addressA, gpuAccessor, flags | TranslationFlags.VertexA, out _, out int sizeA, out FeatureFlags featureFlagsA); + Operation[] opsB = DecodeShader(addressB, gpuAccessor, flags, out ShaderConfig config, out int sizeB, out FeatureFlags featureFlagsB); + + config.UsedFeatures = featureFlagsA | featureFlagsB; return Translate(Combine(opsA, opsB), config, sizeB, sizeA); } @@ -67,7 +71,8 @@ namespace Ryujinx.Graphics.Shader.Translation IGpuAccessor gpuAccessor, TranslationFlags flags, out ShaderConfig config, - out int size) + out int size, + out FeatureFlags featureFlags) { Block[] cfg; @@ -90,6 +95,8 @@ namespace Ryujinx.Graphics.Shader.Translation size = 0; + featureFlags = FeatureFlags.None; + return Array.Empty<Operation>(); } @@ -192,6 +199,8 @@ namespace Ryujinx.Graphics.Shader.Translation size = (int)maxEndAddress + (((flags & TranslationFlags.Compute) != 0) ? 0 : HeaderSize); + featureFlags = context.UsedFeatures; + return context.GetOperations(); } |