aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-09-28 20:55:12 -0300
committerGitHub <noreply@github.com>2021-09-29 01:55:12 +0200
commitfd7567a6b56fcb82a52b85097582fc0a67038457 (patch)
tree175c9992d0cca4c05b80857d66af4bbdce09cba7 /Ryujinx.Graphics.Shader
parent312be74861dae16311f4376e32195f8a4fd372c6 (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')
-rw-r--r--Ryujinx.Graphics.Shader/ShaderProgramInfo.cs3
-rw-r--r--Ryujinx.Graphics.Shader/Translation/EmitterContext.cs5
-rw-r--r--Ryujinx.Graphics.Shader/Translation/FeatureFlags.cs7
-rw-r--r--Ryujinx.Graphics.Shader/Translation/Translator.cs1
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;