diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2021-09-28 20:55:12 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-09-29 01:55:12 +0200 |
| commit | fd7567a6b56fcb82a52b85097582fc0a67038457 (patch) | |
| tree | 175c9992d0cca4c05b80857d66af4bbdce09cba7 /Ryujinx.Graphics.Shader | |
| parent | 312be74861dae16311f4376e32195f8a4fd372c6 (diff) | |
Only make render target 2D textures layered if needed (#2646)
* Only make render target 2D textures layered if needed
* Shader cache version bump
* Ensure topology is updated on channel swap
Diffstat (limited to 'Ryujinx.Graphics.Shader')
4 files changed, 13 insertions, 3 deletions
diff --git a/Ryujinx.Graphics.Shader/ShaderProgramInfo.cs b/Ryujinx.Graphics.Shader/ShaderProgramInfo.cs index 9329442f..a9ce486b 100644 --- a/Ryujinx.Graphics.Shader/ShaderProgramInfo.cs +++ b/Ryujinx.Graphics.Shader/ShaderProgramInfo.cs @@ -11,6 +11,7 @@ namespace Ryujinx.Graphics.Shader public ReadOnlyCollection<TextureDescriptor> Images { get; } public bool UsesInstanceId { get; } + public bool UsesRtLayer { get; } public byte ClipDistancesWritten { get; } public ShaderProgramInfo( @@ -19,6 +20,7 @@ namespace Ryujinx.Graphics.Shader TextureDescriptor[] textures, TextureDescriptor[] images, bool usesInstanceId, + bool usesRtLayer, byte clipDistancesWritten) { CBuffers = Array.AsReadOnly(cBuffers); @@ -27,6 +29,7 @@ namespace Ryujinx.Graphics.Shader Images = Array.AsReadOnly(images); UsesInstanceId = usesInstanceId; + UsesRtLayer = usesRtLayer; ClipDistancesWritten = clipDistancesWritten; } } diff --git a/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs b/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs index 5cdd5c0a..c96b75a5 100644 --- a/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs +++ b/Ryujinx.Graphics.Shader/Translation/EmitterContext.cs @@ -121,6 +121,11 @@ namespace Ryujinx.Graphics.Shader.Translation break; } } + + if (Config.Stage != ShaderStage.Fragment && attribute == AttributeConsts.Layer) + { + Config.SetUsedFeature(FeatureFlags.RtLayer); + } } public void MarkLabel(Operand label) diff --git a/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs b/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs index 1636afd3..f602ea64 100644 --- a/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs +++ b/Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs @@ -17,8 +17,9 @@ namespace Ryujinx.Graphics.Shader.Translation Bindless = 1 << 2, InstanceId = 1 << 3, - CbIndexing = 1 << 4, - IaIndexing = 1 << 5, - OaIndexing = 1 << 6 + RtLayer = 1 << 4, + CbIndexing = 1 << 5, + IaIndexing = 1 << 6, + OaIndexing = 1 << 7 } } diff --git a/Ryujinx.Graphics.Shader/Translation/Translator.cs b/Ryujinx.Graphics.Shader/Translation/Translator.cs index f1e92d7c..1abf19d7 100644 --- a/Ryujinx.Graphics.Shader/Translation/Translator.cs +++ b/Ryujinx.Graphics.Shader/Translation/Translator.cs @@ -106,6 +106,7 @@ namespace Ryujinx.Graphics.Shader.Translation config.GetTextureDescriptors(), config.GetImageDescriptors(), config.UsedFeatures.HasFlag(FeatureFlags.InstanceId), + config.UsedFeatures.HasFlag(FeatureFlags.RtLayer), config.ClipDistancesWritten); return program; |
