mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
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-enable-16bit-types allow 16-bit types in SPIR-V for HLSL\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"
|
||||
" --keep-uncalled | --ku don't eliminate uncalled functions\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
|
||||
EShMsgHlslEnable16BitTypes = (1 << 11), // enable use of 16-bit types in SPIR-V for HLSL
|
||||
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
|
||||
LAST_ELEMENT_MARKER(EShMsgCount),
|
||||
};
|
||||
|
@ -6129,6 +6129,32 @@ void HlslParseContext::handleSemantic(TSourceLoc loc, TQualifier& qualifier, TBu
|
||||
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) {
|
||||
case EbvNone:
|
||||
// Get location numbers from fragment outputs, instead of
|
||||
|
Loading…
Reference in New Issue
Block a user