diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2020-11-08 08:10:00 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-11-08 12:10:00 +0100 |
| commit | 8d168574eb04ae1e7026ac2b058e3b184f068fae (patch) | |
| tree | 6e0f79447276619af980055419874f5e99595b58 /Ryujinx.Graphics.Shader/Translation | |
| parent | 5561a3b95e9c980e3354366570e7896a213b95ae (diff) | |
Use explicit buffer and texture bindings on shaders (#1666)
* Use explicit buffer and texture bindings on shaders
* More XML docs and other nits
Diffstat (limited to 'Ryujinx.Graphics.Shader/Translation')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/TranslationCounts.cs | 30 | ||||
| -rw-r--r-- | Ryujinx.Graphics.Shader/Translation/Translator.cs | 34 |
3 files changed, 62 insertions, 10 deletions
diff --git a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs index 7b1587ae..08e7df3b 100644 --- a/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs +++ b/Ryujinx.Graphics.Shader/Translation/ShaderConfig.cs @@ -20,11 +20,13 @@ namespace Ryujinx.Graphics.Shader.Translation public TranslationFlags Flags { get; } + public TranslationCounts Counts { get; } + public int Size { get; private set; } public FeatureFlags UsedFeatures { get; private set; } - public ShaderConfig(IGpuAccessor gpuAccessor, TranslationFlags flags) + public ShaderConfig(IGpuAccessor gpuAccessor, TranslationFlags flags, TranslationCounts counts) { Stage = ShaderStage.Compute; OutputTopology = OutputTopology.PointList; @@ -38,9 +40,10 @@ namespace Ryujinx.Graphics.Shader.Translation Flags = flags; Size = 0; UsedFeatures = FeatureFlags.None; + Counts = counts; } - public ShaderConfig(ShaderHeader header, IGpuAccessor gpuAccessor, TranslationFlags flags) + public ShaderConfig(ShaderHeader header, IGpuAccessor gpuAccessor, TranslationFlags flags, TranslationCounts counts) { Stage = header.Stage; OutputTopology = header.OutputTopology; @@ -54,6 +57,7 @@ namespace Ryujinx.Graphics.Shader.Translation Flags = flags; Size = 0; UsedFeatures = FeatureFlags.None; + Counts = counts; } public int GetDepthRegister() diff --git a/Ryujinx.Graphics.Shader/Translation/TranslationCounts.cs b/Ryujinx.Graphics.Shader/Translation/TranslationCounts.cs new file mode 100644 index 00000000..18f4725d --- /dev/null +++ b/Ryujinx.Graphics.Shader/Translation/TranslationCounts.cs @@ -0,0 +1,30 @@ +namespace Ryujinx.Graphics.Shader.Translation +{ + public class TranslationCounts + { + public int UniformBuffersCount { get; private set; } + public int StorageBuffersCount { get; private set; } + public int TexturesCount { get; private set; } + public int ImagesCount { get; private set; } + + internal int IncrementUniformBuffersCount() + { + return UniformBuffersCount++; + } + + internal int IncrementStorageBuffersCount() + { + return StorageBuffersCount++; + } + + internal int IncrementTexturesCount() + { + return TexturesCount++; + } + + internal int IncrementImagesCount() + { + return ImagesCount++; + } + } +} diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index f8093c84..f86b6964 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -24,15 +24,28 @@ namespace Ryujinx.Graphics.Shader.Translation } } - public static ShaderProgram Translate(ulong address, IGpuAccessor gpuAccessor, TranslationFlags flags) + public static ShaderProgram Translate( + ulong address, + IGpuAccessor gpuAccessor, + TranslationFlags flags, + TranslationCounts counts = null) { - return Translate(DecodeShader(address, gpuAccessor, flags, out ShaderConfig config), config); + counts ??= new TranslationCounts(); + + return Translate(DecodeShader(address, gpuAccessor, flags, counts, out ShaderConfig config), config); } - public static ShaderProgram Translate(ulong addressA, ulong addressB, IGpuAccessor gpuAccessor, TranslationFlags flags) + public static ShaderProgram Translate( + ulong addressA, + ulong addressB, + IGpuAccessor gpuAccessor, + TranslationFlags flags, + TranslationCounts counts = null) { - FunctionCode[] funcA = DecodeShader(addressA, gpuAccessor, flags | TranslationFlags.VertexA, out ShaderConfig configA); - FunctionCode[] funcB = DecodeShader(addressB, gpuAccessor, flags, out ShaderConfig config); + counts ??= new TranslationCounts(); + + FunctionCode[] funcA = DecodeShader(addressA, gpuAccessor, flags | TranslationFlags.VertexA, counts, out ShaderConfig configA); + FunctionCode[] funcB = DecodeShader(addressB, gpuAccessor, flags, counts, out ShaderConfig config); config.SetUsedFeature(configA.UsedFeatures); @@ -105,19 +118,24 @@ namespace Ryujinx.Graphics.Shader.Translation return new ShaderProgram(spInfo, config.Stage, glslCode, config.Size, sizeA); } - private static FunctionCode[] DecodeShader(ulong address, IGpuAccessor gpuAccessor, TranslationFlags flags, out ShaderConfig config) + private static FunctionCode[] DecodeShader( + ulong address, + IGpuAccessor gpuAccessor, + TranslationFlags flags, + TranslationCounts counts, + out ShaderConfig config) { Block[][] cfg; if ((flags & TranslationFlags.Compute) != 0) { - config = new ShaderConfig(gpuAccessor, flags); + config = new ShaderConfig(gpuAccessor, flags, counts); cfg = Decoder.Decode(gpuAccessor, address); } else { - config = new ShaderConfig(new ShaderHeader(gpuAccessor, address), gpuAccessor, flags); + config = new ShaderConfig(new ShaderHeader(gpuAccessor, address), gpuAccessor, flags, counts); cfg = Decoder.Decode(gpuAccessor, address + HeaderSize); } |
