forked from Mirror/Ryujinx
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>
|
/// <summary>
|
||||||
/// Version of the codegen (to be changed when codegen or guest format change).
|
/// Version of the codegen (to be changed when codegen or guest format change).
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const ulong ShaderCodeGenVersion = 2768;
|
private const ulong ShaderCodeGenVersion = 2822;
|
||||||
|
|
||||||
// Progress reporting helpers
|
// Progress reporting helpers
|
||||||
private volatile int _shaderCount;
|
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.
|
// TODO: Bindless texture support. For now we just return 0/do nothing.
|
||||||
if (isBindless)
|
if (isBindless)
|
||||||
{
|
{
|
||||||
return texOp.Inst switch
|
switch (texOp.Inst)
|
||||||
{
|
{
|
||||||
Instruction.ImageStore => "// imageStore(bindless)",
|
case Instruction.ImageStore:
|
||||||
Instruction.ImageLoad => NumberFormatter.FormatFloat(0),
|
return "// imageStore(bindless)";
|
||||||
_ => NumberFormatter.FormatInt(0)
|
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;
|
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)
|
if (context.Config.Stage != ShaderStage.Compute && context.Config.Stage != ShaderStage.Fragment)
|
||||||
{
|
{
|
||||||
Operand primitiveId = Attribute(AttributeConsts.PrimitiveId);
|
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);
|
src = context.BitwiseOr(primitiveId, patchVerticesIn);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue