Fix InvocationInfo on geometry shader and bindless default integer const (#2822)
* Fix InvocationInfo on geometry shader and bindless default integer const * Shader cache version bump * Consistency for the default value
This commit is contained in:
parent
81e9b86cdb
commit
b7a1544e8b
3 changed files with 31 additions and 8 deletions
|
@ -40,7 +40,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
|
|||
/// <summary>
|
||||
/// Version of the codegen (to be changed when codegen or guest format change).
|
||||
/// </summary>
|
||||
private const ulong ShaderCodeGenVersion = 2768;
|
||||
private const ulong ShaderCodeGenVersion = 2822;
|
||||
|
||||
// Progress reporting helpers
|
||||
private volatile int _shaderCount;
|
||||
|
|
|
@ -18,12 +18,16 @@ namespace Ryujinx.Graphics.Shader.CodeGen.Glsl.Instructions
|
|||
// TODO: Bindless texture support. For now we just return 0/do nothing.
|
||||
if (isBindless)
|
||||
{
|
||||
return texOp.Inst switch
|
||||
switch (texOp.Inst)
|
||||
{
|
||||
Instruction.ImageStore => "// imageStore(bindless)",
|
||||
Instruction.ImageLoad => NumberFormatter.FormatFloat(0),
|
||||
_ => NumberFormatter.FormatInt(0)
|
||||
};
|
||||
case Instruction.ImageStore:
|
||||
return "// imageStore(bindless)";
|
||||
case Instruction.ImageLoad:
|
||||
NumberFormatter.TryFormat(0, texOp.Format.GetComponentType(), out string imageConst);
|
||||
return imageConst;
|
||||
default:
|
||||
return NumberFormatter.FormatInt(0);
|
||||
}
|
||||
}
|
||||
|
||||
bool isArray = (texOp.Type & SamplerType.Array) != 0;
|
||||
|
|
|
@ -95,9 +95,28 @@ namespace Ryujinx.Graphics.Shader.Instructions
|
|||
if (context.Config.Stage != ShaderStage.Compute && context.Config.Stage != ShaderStage.Fragment)
|
||||
{
|
||||
Operand primitiveId = Attribute(AttributeConsts.PrimitiveId);
|
||||
Operand patchVerticesIn = Attribute(AttributeConsts.PatchVerticesIn);
|
||||
Operand patchVerticesIn;
|
||||
|
||||
patchVerticesIn = context.ShiftLeft(patchVerticesIn, Const(16));
|
||||
if (context.Config.Stage == ShaderStage.TessellationEvaluation)
|
||||
{
|
||||
patchVerticesIn = context.ShiftLeft(Attribute(AttributeConsts.PatchVerticesIn), Const(16));
|
||||
}
|
||||
else
|
||||
{
|
||||
InputTopology inputTopology = context.Config.GpuAccessor.QueryPrimitiveTopology();
|
||||
|
||||
int inputVertices = inputTopology switch
|
||||
{
|
||||
InputTopology.Points => 1,
|
||||
InputTopology.Lines or
|
||||
InputTopology.LinesAdjacency => 2,
|
||||
InputTopology.Triangles or
|
||||
InputTopology.TrianglesAdjacency => 3,
|
||||
_ => 1
|
||||
};
|
||||
|
||||
patchVerticesIn = Const(inputVertices << 16);
|
||||
}
|
||||
|
||||
src = context.BitwiseOr(primitiveId, patchVerticesIn);
|
||||
}
|
||||
|
|
Reference in a new issue