mirror of
https://git.naxdy.org/Mirror/Ryujinx.git
synced 2026-05-16 23:01:59 +00:00
Change non-unform shader extension to be more conservative (#99)
The previous fix for Tomodachi Life (#91) included the extension to all shaders, independently on if it was needed or not. This PR fixes that by lazily adding the extension only when it is actually needed. This change should not be noticed by anyone, but it avoids having to modify shaders that do not perform any type of dynamic indexing, which apparently is something some modders care about. Co-authored-by: AsperTheDog <guillerman0000@gmail.com> Reviewed-on: https://git.ryujinx.app/projects/Ryubing/pulls/99
This commit is contained in:
parent
d307afc454
commit
48888bd014
3 changed files with 12 additions and 8 deletions
|
|
@ -82,6 +82,7 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
||||||
|
|
||||||
public bool IsMainFunction { get; private set; }
|
public bool IsMainFunction { get; private set; }
|
||||||
public bool MayHaveReturned { get; set; }
|
public bool MayHaveReturned { get; set; }
|
||||||
|
public bool WasNonUniformAccessDeclared { get; set; }
|
||||||
|
|
||||||
public CodeGenContext(
|
public CodeGenContext(
|
||||||
StructuredProgramInfo info,
|
StructuredProgramInfo info,
|
||||||
|
|
@ -89,6 +90,8 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
||||||
GeneratorPool<Instruction> instPool,
|
GeneratorPool<Instruction> instPool,
|
||||||
GeneratorPool<LiteralInteger> integerPool) : base(SpirvVersionPacked, instPool, integerPool)
|
GeneratorPool<LiteralInteger> integerPool) : base(SpirvVersionPacked, instPool, integerPool)
|
||||||
{
|
{
|
||||||
|
WasNonUniformAccessDeclared = false;
|
||||||
|
|
||||||
Info = info;
|
Info = info;
|
||||||
AttributeUsage = parameters.AttributeUsage;
|
AttributeUsage = parameters.AttributeUsage;
|
||||||
Definitions = parameters.Definitions;
|
Definitions = parameters.Definitions;
|
||||||
|
|
|
||||||
|
|
@ -591,7 +591,16 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
||||||
{
|
{
|
||||||
if (context.HostCapabilities.SupportsShaderNonUniformIndexing)
|
if (context.HostCapabilities.SupportsShaderNonUniformIndexing)
|
||||||
{
|
{
|
||||||
|
if (!context.WasNonUniformAccessDeclared)
|
||||||
|
{
|
||||||
|
context.AddExtension("SPV_EXT_descriptor_indexing");
|
||||||
|
context.AddCapability(Capability.ShaderNonUniform);
|
||||||
|
context.AddCapability(Capability.SampledImageArrayNonUniformIndexing);
|
||||||
|
context.AddCapability(Capability.StorageImageArrayNonUniformIndexing);
|
||||||
|
}
|
||||||
|
|
||||||
context.Decorate(inst, Decoration.NonUniform);
|
context.Decorate(inst, Decoration.NonUniform);
|
||||||
|
context.WasNonUniformAccessDeclared = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -60,14 +60,6 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Spirv
|
||||||
context.AddCapability(Capability.Float64);
|
context.AddCapability(Capability.Float64);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (parameters.HostCapabilities.SupportsShaderNonUniformIndexing)
|
|
||||||
{
|
|
||||||
context.AddExtension("SPV_EXT_descriptor_indexing");
|
|
||||||
context.AddCapability(Capability.ShaderNonUniform);
|
|
||||||
context.AddCapability(Capability.SampledImageArrayNonUniformIndexing);
|
|
||||||
context.AddCapability(Capability.StorageImageArrayNonUniformIndexing);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (parameters.Definitions.TransformFeedbackEnabled && parameters.Definitions.LastInVertexPipeline)
|
if (parameters.Definitions.TransformFeedbackEnabled && parameters.Definitions.LastInVertexPipeline)
|
||||||
{
|
{
|
||||||
context.AddCapability(Capability.TransformFeedback);
|
context.AddCapability(Capability.TransformFeedback);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue