HLSL: Recognize POSITION semantic et al in DX9 compatibility mode (#2255)
This commit is contained in:
parent
d8edfd8e66
commit
b56e0e441b
@ -1593,7 +1593,8 @@ void usage()
|
|||||||
" --hlsl-iomap perform IO mapping in HLSL register space\n"
|
" --hlsl-iomap perform IO mapping in HLSL register space\n"
|
||||||
" --hlsl-enable-16bit-types allow 16-bit types in SPIR-V for HLSL\n"
|
" --hlsl-enable-16bit-types allow 16-bit types in SPIR-V for HLSL\n"
|
||||||
" --hlsl-dx9-compatible interprets sampler declarations as a\n"
|
" --hlsl-dx9-compatible interprets sampler declarations as a\n"
|
||||||
" texture/sampler combo like DirectX9 would.\n"
|
" texture/sampler combo like DirectX9 would,\n"
|
||||||
|
" and recognizes DirectX9-specific semantics\n"
|
||||||
" --invert-y | --iy invert position.Y output in vertex shader\n"
|
" --invert-y | --iy invert position.Y output in vertex shader\n"
|
||||||
" --keep-uncalled | --ku don't eliminate uncalled functions\n"
|
" --keep-uncalled | --ku don't eliminate uncalled functions\n"
|
||||||
" --nan-clamp favor non-NaN operand in min, max, and clamp\n"
|
" --nan-clamp favor non-NaN operand in min, max, and clamp\n"
|
||||||
|
@ -255,7 +255,7 @@ enum EShMessages : unsigned {
|
|||||||
EShMsgDebugInfo = (1 << 10), // save debug information
|
EShMsgDebugInfo = (1 << 10), // save debug information
|
||||||
EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
|
EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
|
||||||
EShMsgHlslLegalization = (1 << 12), // enable HLSL Legalization messages
|
EShMsgHlslLegalization = (1 << 12), // enable HLSL Legalization messages
|
||||||
EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (right now only for samplers)
|
EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics)
|
||||||
EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
|
EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table
|
||||||
LAST_ELEMENT_MARKER(EShMsgCount),
|
LAST_ELEMENT_MARKER(EShMsgCount),
|
||||||
};
|
};
|
||||||
|
@ -6129,6 +6129,32 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, TBu
|
|||||||
return semanticNum;
|
return semanticNum;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (builtIn == EbvNone && hlslDX9Compatible()) {
|
||||||
|
if (language == EShLangVertex) {
|
||||||
|
if (qualifier.isParamOutput()) {
|
||||||
|
if (upperCase == "POSITION") {
|
||||||
|
builtIn = EbvPosition;
|
||||||
|
}
|
||||||
|
if (upperCase == "PSIZE") {
|
||||||
|
builtIn = EbvPointSize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (language == EShLangFragment) {
|
||||||
|
if (qualifier.isParamInput() && upperCase == "VPOS") {
|
||||||
|
builtIn = EbvFragCoord;
|
||||||
|
}
|
||||||
|
if (qualifier.isParamOutput()) {
|
||||||
|
if (upperCase.compare(0, 5, "COLOR") == 0) {
|
||||||
|
qualifier.layoutLocation = getSemanticNumber(upperCase, 0, nullptr);
|
||||||
|
nextOutLocation = std::max(nextOutLocation, qualifier.layoutLocation + 1u);
|
||||||
|
}
|
||||||
|
if (upperCase == "DEPTH") {
|
||||||
|
builtIn = EbvFragDepth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
switch(builtIn) {
|
switch(builtIn) {
|
||||||
case EbvNone:
|
case EbvNone:
|
||||||
// Get location numbers from fragment outputs, instead of
|
// Get location numbers from fragment outputs, instead of
|
||||||
|
Loading…
x
Reference in New Issue
Block a user