mirror of
https://github.com/baldurk/renderdoc.git
synced 2026-09-05 05:15:47 +00:00
Handle new DXBC system-value semantics
This commit is contained in:
@@ -1350,9 +1350,12 @@ QString D3DSemanticString(const SigParameter &sig)
|
||||
lit("Unsupported (SubgroupLessEqualMask)"),
|
||||
lit("Unsupported (SubgroupLessMask)"),
|
||||
lit("Unsupported (DeviceIndex)"),
|
||||
lit("Unsupported (IsFullyCovered)"),
|
||||
lit("SV_InnerCoverage"),
|
||||
lit("Unsupported (FragAreaSize)"),
|
||||
lit("Unsupported (FragInvocationCount)"),
|
||||
lit("SV_ShadingRate"),
|
||||
lit("SV_Barycentrics"),
|
||||
lit("SV_CullPrimitive"),
|
||||
};
|
||||
|
||||
static_assert(arraydim<ShaderBuiltin>() == ARRAY_COUNT(sysValues),
|
||||
|
||||
@@ -674,6 +674,9 @@ rdcstr DoStringise(const ShaderBuiltin &el)
|
||||
STRINGISE_ENUM_CLASS_NAMED(IsFullyCovered, "Is Fully Covered");
|
||||
STRINGISE_ENUM_CLASS_NAMED(FragAreaSize, "Fragment Area Size");
|
||||
STRINGISE_ENUM_CLASS_NAMED(FragInvocationCount, "Fragment Invocation Count");
|
||||
STRINGISE_ENUM_CLASS_NAMED(PackedFragRate, "Packed Fragment Rate");
|
||||
STRINGISE_ENUM_CLASS_NAMED(Barycentrics, "Barycentrics");
|
||||
STRINGISE_ENUM_CLASS_NAMED(CullPrimitive, "Cull Primitive Output");
|
||||
}
|
||||
END_ENUM_STRINGISE();
|
||||
}
|
||||
|
||||
@@ -1076,6 +1076,21 @@ to apply to multiple related things - see :data:`ClipDistance`, :data:`CullDista
|
||||
.. data:: FragInvocationCount
|
||||
|
||||
Gives the maximum number of invocations for the fragment being covered.
|
||||
|
||||
.. data:: PackedFragRate
|
||||
|
||||
Contains the packed shading rate, with an API specific packing of X and Y. For example:
|
||||
|
||||
1x being 0, 2x being 1, 4x being 2. Then the lower two bits being the Y rate and the next 2 bits
|
||||
being the X rate.
|
||||
|
||||
.. data:: Barycentrics
|
||||
|
||||
Contains the barycentric co-ordinates.
|
||||
|
||||
.. data:: CullPrimitive
|
||||
|
||||
An output to indicate whether or not a primitive should be culled.
|
||||
)");
|
||||
enum class ShaderBuiltin : uint32_t
|
||||
{
|
||||
@@ -1129,6 +1144,9 @@ enum class ShaderBuiltin : uint32_t
|
||||
IsFullyCovered,
|
||||
FragAreaSize,
|
||||
FragInvocationCount,
|
||||
PackedFragRate,
|
||||
Barycentrics,
|
||||
CullPrimitive,
|
||||
Count,
|
||||
};
|
||||
|
||||
|
||||
@@ -142,11 +142,17 @@ enum SVSemantic
|
||||
|
||||
SVNAME_FINAL_LINE_DENSITY_TESSFACTOR,
|
||||
|
||||
SVNAME_BARYCENTRICS,
|
||||
SVNAME_SHADINGRATE,
|
||||
SVNAME_CULLPRIMITIVE,
|
||||
|
||||
SVNAME_TARGET = 64,
|
||||
SVNAME_DEPTH,
|
||||
SVNAME_COVERAGE,
|
||||
SVNAME_DEPTH_GREATER_EQUAL,
|
||||
SVNAME_DEPTH_LESS_EQUAL,
|
||||
SVNAME_STENCIL_REF,
|
||||
SVNAME_INNER_COVERAGE,
|
||||
};
|
||||
|
||||
enum VariableType
|
||||
|
||||
@@ -298,11 +298,16 @@ ShaderBuiltin GetSystemValue(SVSemantic systemValue)
|
||||
case SVNAME_FINAL_TRI_INSIDE_TESSFACTOR: return ShaderBuiltin::InsideTessFactor;
|
||||
case SVNAME_FINAL_LINE_DETAIL_TESSFACTOR: return ShaderBuiltin::OuterTessFactor;
|
||||
case SVNAME_FINAL_LINE_DENSITY_TESSFACTOR: return ShaderBuiltin::InsideTessFactor;
|
||||
case SVNAME_BARYCENTRICS: return ShaderBuiltin::Barycentrics;
|
||||
case SVNAME_SHADINGRATE: return ShaderBuiltin::PackedFragRate;
|
||||
case SVNAME_CULLPRIMITIVE: return ShaderBuiltin::CullPrimitive;
|
||||
case SVNAME_TARGET: return ShaderBuiltin::ColorOutput;
|
||||
case SVNAME_DEPTH: return ShaderBuiltin::DepthOutput;
|
||||
case SVNAME_COVERAGE: return ShaderBuiltin::MSAACoverage;
|
||||
case SVNAME_DEPTH_GREATER_EQUAL: return ShaderBuiltin::DepthOutputGreaterEqual;
|
||||
case SVNAME_DEPTH_LESS_EQUAL: return ShaderBuiltin::DepthOutputLessEqual;
|
||||
case SVNAME_STENCIL_REF: return ShaderBuiltin::StencilReference;
|
||||
case SVNAME_INNER_COVERAGE: return ShaderBuiltin::IsFullyCovered;
|
||||
}
|
||||
|
||||
return ShaderBuiltin::Undefined;
|
||||
@@ -1546,6 +1551,16 @@ DXBCContainer::DXBCContainer(bytebuf &ByteCode, const rdcstr &debugInfoPath, Gra
|
||||
desc.systemValue = ShaderBuiltin::DepthOutputGreaterEqual;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_DepthLessEqual"))
|
||||
desc.systemValue = ShaderBuiltin::DepthOutputLessEqual;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_Barycentrics"))
|
||||
desc.systemValue = ShaderBuiltin::Barycentrics;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_ShadingRate"))
|
||||
desc.systemValue = ShaderBuiltin::PackedFragRate;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_CullPrimitive"))
|
||||
desc.systemValue = ShaderBuiltin::CullPrimitive;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_StencilRef"))
|
||||
desc.systemValue = ShaderBuiltin::StencilReference;
|
||||
if(!_stricmp(desc.semanticName.c_str(), "SV_InnerCoverage"))
|
||||
desc.systemValue = ShaderBuiltin::IsFullyCovered;
|
||||
}
|
||||
|
||||
RDCASSERT(desc.systemValue != ShaderBuiltin::Undefined || desc.regIndex >= 0);
|
||||
|
||||
Reference in New Issue
Block a user