HLSL: Map min types to GLSL 16-bit types
This commit is contained in:
parent
02538357c8
commit
cb61eec948
@ -156,6 +156,7 @@ const char* entryPointName = nullptr;
|
|||||||
const char* sourceEntryPointName = nullptr;
|
const char* sourceEntryPointName = nullptr;
|
||||||
const char* shaderStageName = nullptr;
|
const char* shaderStageName = nullptr;
|
||||||
const char* variableName = nullptr;
|
const char* variableName = nullptr;
|
||||||
|
bool HlslEnable16BitTypes = false;
|
||||||
std::vector<std::string> IncludeDirectoryList;
|
std::vector<std::string> IncludeDirectoryList;
|
||||||
int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
|
int ClientInputSemanticsVersion = 100; // maps to, say, #define VULKAN 100
|
||||||
int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0
|
int VulkanClientVersion = 100; // would map to, say, Vulkan 1.0
|
||||||
@ -450,6 +451,8 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
|||||||
lowerword == "hlsl-iomapper" ||
|
lowerword == "hlsl-iomapper" ||
|
||||||
lowerword == "hlsl-iomapping") {
|
lowerword == "hlsl-iomapping") {
|
||||||
Options |= EOptionHlslIoMapping;
|
Options |= EOptionHlslIoMapping;
|
||||||
|
} else if (lowerword == "hlsl-enable-16bit-types") {
|
||||||
|
HlslEnable16BitTypes = true;
|
||||||
} else if (lowerword == "invert-y" || // synonyms
|
} else if (lowerword == "invert-y" || // synonyms
|
||||||
lowerword == "iy") {
|
lowerword == "iy") {
|
||||||
Options |= EOptionInvertY;
|
Options |= EOptionInvertY;
|
||||||
@ -513,7 +516,7 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
|||||||
setOpenGlSpv();
|
setOpenGlSpv();
|
||||||
OpenGLClientVersion = 450;
|
OpenGLClientVersion = 450;
|
||||||
} else
|
} else
|
||||||
Error("--target-env expected vulkan1.0 or opengl");
|
Error("--target-env expected vulkan1.0, opengl, or hlsl-16bit-types");
|
||||||
}
|
}
|
||||||
bumpArg();
|
bumpArg();
|
||||||
} else if (lowerword == "variable-name" || // synonyms
|
} else if (lowerword == "variable-name" || // synonyms
|
||||||
@ -701,6 +704,8 @@ void SetMessageOptions(EShMessages& messages)
|
|||||||
messages = (EShMessages)(messages | EShMsgHlslOffsets);
|
messages = (EShMessages)(messages | EShMsgHlslOffsets);
|
||||||
if (Options & EOptionDebug)
|
if (Options & EOptionDebug)
|
||||||
messages = (EShMessages)(messages | EShMsgDebugInfo);
|
messages = (EShMessages)(messages | EShMsgDebugInfo);
|
||||||
|
if (HlslEnable16BitTypes)
|
||||||
|
messages = (EShMessages)(messages | EShMsgHlslEnable16BitTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -1334,6 +1339,7 @@ void usage()
|
|||||||
" --hlsl-offsets Allow block offsets to follow HLSL rules\n"
|
" --hlsl-offsets Allow block offsets to follow HLSL rules\n"
|
||||||
" Works independently of source language\n"
|
" Works independently of source language\n"
|
||||||
" --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 use of 16-bit types in SPIR-V for HLSL\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 don't eliminate uncalled functions\n"
|
" --keep-uncalled don't eliminate uncalled functions\n"
|
||||||
" --ku synonym for --keep-uncalled\n"
|
" --ku synonym for --keep-uncalled\n"
|
||||||
|
|||||||
@ -114,6 +114,7 @@ public:
|
|||||||
bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; }
|
bool relaxedErrors() const { return (messages & EShMsgRelaxedErrors) != 0; }
|
||||||
bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
|
bool suppressWarnings() const { return (messages & EShMsgSuppressWarnings) != 0; }
|
||||||
bool isReadingHLSL() const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
|
bool isReadingHLSL() const { return (messages & EShMsgReadHlsl) == EShMsgReadHlsl; }
|
||||||
|
bool hlslEnable16BitTypes() const { return (messages & EShMsgHlslEnable16BitTypes) != 0; }
|
||||||
|
|
||||||
TInfoSink& infoSink;
|
TInfoSink& infoSink;
|
||||||
|
|
||||||
|
|||||||
@ -200,6 +200,7 @@ enum EShMessages {
|
|||||||
EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions
|
EShMsgKeepUncalled = (1 << 8), // for testing, don't eliminate uncalled functions
|
||||||
EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules
|
EShMsgHlslOffsets = (1 << 9), // allow block offsets to follow HLSL rules instead of GLSL rules
|
||||||
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
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@ -1379,12 +1379,23 @@ bool HlslGrammar::acceptType(TType& type, TIntermNode*& nodeList)
|
|||||||
{
|
{
|
||||||
// Basic types for min* types, broken out here in case of future
|
// Basic types for min* types, broken out here in case of future
|
||||||
// changes, e.g, to use native halfs.
|
// changes, e.g, to use native halfs.
|
||||||
|
#ifdef AMD_EXTENSIONS
|
||||||
|
bool enable16BitTypes = parseContext.hlslEnable16BitTypes();
|
||||||
|
|
||||||
|
const TBasicType min16float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
|
||||||
|
const TBasicType min10float_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
|
||||||
|
const TBasicType half_bt = enable16BitTypes ? EbtFloat16 : EbtFloat;
|
||||||
|
const TBasicType min16int_bt = enable16BitTypes ? EbtInt16 : EbtInt;
|
||||||
|
const TBasicType min12int_bt = enable16BitTypes ? EbtInt16 : EbtInt;
|
||||||
|
const TBasicType min16uint_bt = enable16BitTypes ? EbtUint16 : EbtUint;
|
||||||
|
#else
|
||||||
static const TBasicType min16float_bt = EbtFloat;
|
static const TBasicType min16float_bt = EbtFloat;
|
||||||
static const TBasicType min10float_bt = EbtFloat;
|
static const TBasicType min10float_bt = EbtFloat;
|
||||||
static const TBasicType half_bt = EbtFloat;
|
static const TBasicType half_bt = EbtFloat;
|
||||||
static const TBasicType min16int_bt = EbtInt;
|
static const TBasicType min16int_bt = EbtInt;
|
||||||
static const TBasicType min12int_bt = EbtInt;
|
static const TBasicType min12int_bt = EbtInt;
|
||||||
static const TBasicType min16uint_bt = EbtUint;
|
static const TBasicType min16uint_bt = EbtUint;
|
||||||
|
#endif
|
||||||
|
|
||||||
// Some types might have turned into identifiers. Take the hit for checking
|
// Some types might have turned into identifiers. Take the hit for checking
|
||||||
// when this has happened.
|
// when this has happened.
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user