mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-08 11:30:06 +00:00
Add option to glslangValidator to inject preamble
This commit is contained in:
parent
1aefd184a6
commit
893145ead2
@ -258,6 +258,17 @@ public:
|
|||||||
text.append("\n");
|
text.append("\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void addText(std::string preambleText)
|
||||||
|
{
|
||||||
|
fixLine(preambleText);
|
||||||
|
|
||||||
|
Processes.push_back("preamble-text");
|
||||||
|
Processes.back().append(preambleText);
|
||||||
|
|
||||||
|
text.append(preambleText);
|
||||||
|
text.append("\n");
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void fixLine(std::string& line)
|
void fixLine(std::string& line)
|
||||||
{
|
{
|
||||||
@ -727,6 +738,13 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
|||||||
} else if (lowerword == "no-storage-format" || // synonyms
|
} else if (lowerword == "no-storage-format" || // synonyms
|
||||||
lowerword == "nsf") {
|
lowerword == "nsf") {
|
||||||
Options |= EOptionNoStorageFormat;
|
Options |= EOptionNoStorageFormat;
|
||||||
|
} else if (lowerword == "preamble-text" ||
|
||||||
|
lowerword == "p") {
|
||||||
|
if (argc > 1)
|
||||||
|
UserPreamble.addText(argv[1]);
|
||||||
|
else
|
||||||
|
Error("expects <text>", argv[0]);
|
||||||
|
bumpArg();
|
||||||
} else if (lowerword == "relaxed-errors") {
|
} else if (lowerword == "relaxed-errors") {
|
||||||
Options |= EOptionRelaxedErrors;
|
Options |= EOptionRelaxedErrors;
|
||||||
} else if (lowerword == "reflect-strict-array-suffix") {
|
} else if (lowerword == "reflect-strict-array-suffix") {
|
||||||
@ -926,6 +944,9 @@ void ProcessArguments(std::vector<std::unique_ptr<glslang::TWorkItem>>& workItem
|
|||||||
else
|
else
|
||||||
Error("unknown -O option");
|
Error("unknown -O option");
|
||||||
break;
|
break;
|
||||||
|
case 'P':
|
||||||
|
UserPreamble.addText(getStringOperand("-P<text>"));
|
||||||
|
break;
|
||||||
case 'R':
|
case 'R':
|
||||||
VulkanRulesRelaxed = true;
|
VulkanRulesRelaxed = true;
|
||||||
break;
|
break;
|
||||||
@ -1832,7 +1853,7 @@ void CompileFile(const char* fileName, ShHandle compiler)
|
|||||||
SetMessageOptions(messages);
|
SetMessageOptions(messages);
|
||||||
|
|
||||||
if (UserPreamble.isSet())
|
if (UserPreamble.isSet())
|
||||||
Error("-D and -U options require -l (linking)\n");
|
Error("-D, -U and -P options require -l (linking)\n");
|
||||||
|
|
||||||
for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
|
for (int i = 0; i < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++i) {
|
||||||
for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
|
for (int j = 0; j < ((Options & EOptionMemoryLeakMode) ? 100 : 1); ++j) {
|
||||||
@ -1902,6 +1923,8 @@ void usage()
|
|||||||
" is searched first, followed by left-to-right order of -I\n"
|
" is searched first, followed by left-to-right order of -I\n"
|
||||||
" -Od disables optimization; may cause illegal SPIR-V for HLSL\n"
|
" -Od disables optimization; may cause illegal SPIR-V for HLSL\n"
|
||||||
" -Os optimizes SPIR-V to minimize size\n"
|
" -Os optimizes SPIR-V to minimize size\n"
|
||||||
|
" -P<text> | --preamble-text <text> | --P <text>\n"
|
||||||
|
" inject custom preamble text\n"
|
||||||
" -R use relaxed verification rules for generating Vulkan SPIR-V,\n"
|
" -R use relaxed verification rules for generating Vulkan SPIR-V,\n"
|
||||||
" allowing the use of default uniforms, atomic_uints, and\n"
|
" allowing the use of default uniforms, atomic_uints, and\n"
|
||||||
" gl_VertexID and gl_InstanceID keywords.\n"
|
" gl_VertexID and gl_InstanceID keywords.\n"
|
||||||
|
35
Test/baseResults/glsl.-P.frag.out
Normal file
35
Test/baseResults/glsl.-P.frag.out
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
glsl.-P.frag
|
||||||
|
Shader version: 450
|
||||||
|
0:? Sequence
|
||||||
|
0:5 Function Definition: main( ( global void)
|
||||||
|
0:5 Function Parameters:
|
||||||
|
0:19 Sequence
|
||||||
|
0:19 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:19 'color' (layout( location=0) out 4-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'color' (layout( location=0) out 4-component vector of float)
|
||||||
|
|
||||||
|
|
||||||
|
Linked fragment stage:
|
||||||
|
|
||||||
|
|
||||||
|
Shader version: 450
|
||||||
|
0:? Sequence
|
||||||
|
0:5 Function Definition: main( ( global void)
|
||||||
|
0:5 Function Parameters:
|
||||||
|
0:19 Sequence
|
||||||
|
0:19 move second child to first child ( temp 4-component vector of float)
|
||||||
|
0:19 'color' (layout( location=0) out 4-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:19 1.000000
|
||||||
|
0:? Linker Objects
|
||||||
|
0:? 'color' (layout( location=0) out 4-component vector of float)
|
||||||
|
|
20
Test/glsl.-P.frag
Normal file
20
Test/glsl.-P.frag
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(location=0) out vec4 color;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
#ifndef TEST1
|
||||||
|
#error TEST1 is not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TEST2
|
||||||
|
#error TEST2 is not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef TEST3
|
||||||
|
#error TEST3 is not defined
|
||||||
|
#endif
|
||||||
|
|
||||||
|
color = vec4(1.0);
|
||||||
|
}
|
@ -18,7 +18,7 @@ if [ -d "${LIBPATH}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
function run {
|
function run {
|
||||||
$EXE $@
|
$EXE "$@"
|
||||||
result=$?
|
result=$?
|
||||||
case "$result" in
|
case "$result" in
|
||||||
[0-6]) # Valid success and error codes
|
[0-6]) # Valid success and error codes
|
||||||
@ -201,13 +201,15 @@ run -D -Od -e main -H --depfile $TARGETDIR/hlsl.dashI.vert.d.out -Od -Iinc1/path
|
|||||||
diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1
|
diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Testing -D and -U
|
# Testing -D, -U and -P
|
||||||
#
|
#
|
||||||
echo "Testing -D and -U"
|
echo "Testing -D, -U and -P"
|
||||||
run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
|
run -DUNDEFED -UIN_SHADER -DFOO=200 -i -l --U UNDEFED --define-macro MUL=FOO*2 glsl.-D-U.frag > $TARGETDIR/glsl.-D-U.frag.out
|
||||||
diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
|
diff -b $BASEDIR/glsl.-D-U.frag.out $TARGETDIR/glsl.-D-U.frag.out || HASERROR=1
|
||||||
run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
|
run -D -Od -e main -V -i -DUNDEFED -UIN_SHADER --D FOO=200 --undef-macro UNDEFED -Od hlsl.-D-U.frag > $TARGETDIR/hlsl.-D-U.frag.out
|
||||||
diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
|
diff -b $BASEDIR/hlsl.-D-U.frag.out $TARGETDIR/hlsl.-D-U.frag.out || HASERROR=1
|
||||||
|
run -P"#define TEST1" -i -l --preamble-text "#define TEST2" --p "#define TEST3" glsl.-P.frag > $TARGETDIR/glsl.-P.frag.out
|
||||||
|
diff -b $BASEDIR/glsl.-P.frag.out $TARGETDIR/glsl.-P.frag.out || HASERROR=1
|
||||||
|
|
||||||
#
|
#
|
||||||
# Test --client and --target-env
|
# Test --client and --target-env
|
||||||
|
Loading…
Reference in New Issue
Block a user