WIP: SPV Remapper: add remapper test framework

This commit is contained in:
steve-lunarg 2016-08-17 16:18:06 -06:00
parent 4c3a7fd100
commit a8456415b8
52 changed files with 3067 additions and 9 deletions

View File

@ -98,7 +98,7 @@ options. See REMAPPING AND OPTIMIZATION OPTIONS.
On error, the function supplied to registerErrorHandler() will be invoked. On error, the function supplied to registerErrorHandler() will be invoked.
This can be a standard C/C++ function, a lambda function, or a functor. This can be a standard C/C++ function, a lambda function, or a functor.
The default handler simply calls exit(5); The error handler is a static The default handler simply calls exit(5); The error handler is a static
members, so need only be set up once, not once per spirvbin_t instance. member, so need only be set up once, not once per spirvbin_t instance.
Log messages are supplied to registerLogHandler(). By default, log Log messages are supplied to registerLogHandler(). By default, log
messages are eaten silently. The log handler is also a static member. messages are eaten silently. The log handler is also a static member.

View File

@ -3,21 +3,27 @@ set(SOURCES
InReadableOrder.cpp InReadableOrder.cpp
Logger.cpp Logger.cpp
SpvBuilder.cpp SpvBuilder.cpp
SPVRemapper.cpp
doc.cpp doc.cpp
disassemble.cpp) disassemble.cpp)
set(SPVREMAP_SOURCES
SPVRemapper.cpp
doc.cpp)
set(HEADERS set(HEADERS
spirv.hpp spirv.hpp
GLSL.std.450.h GLSL.std.450.h
GlslangToSpv.h GlslangToSpv.h
Logger.h Logger.h
SpvBuilder.h SpvBuilder.h
SPVRemapper.h
spvIR.h spvIR.h
doc.h doc.h
disassemble.h) disassemble.h)
set(SPVREMAP_HEADERS
SPVRemapper.h
doc.h)
if(ENABLE_AMD_EXTENSIONS) if(ENABLE_AMD_EXTENSIONS)
set(HEADERS set(HEADERS
GLSL.ext.AMD.h) GLSL.ext.AMD.h)
@ -26,9 +32,13 @@ endif(ENABLE_AMD_EXTENSIONS)
add_library(SPIRV STATIC ${SOURCES} ${HEADERS}) add_library(SPIRV STATIC ${SOURCES} ${HEADERS})
set_property(TARGET SPIRV PROPERTY FOLDER glslang) set_property(TARGET SPIRV PROPERTY FOLDER glslang)
add_library(SPVRemapper STATIC ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
set_property(TARGET SPVRemapper PROPERTY FOLDER glslang)
if(WIN32) if(WIN32)
source_group("Source" FILES ${SOURCES} ${HEADERS}) source_group("Source" FILES ${SOURCES} ${HEADERS})
source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS})
endif(WIN32) endif(WIN32)
install(TARGETS SPIRV install(TARGETS SPIRV SPVRemapper
ARCHIVE DESTINATION lib) ARCHIVE DESTINATION lib)

View File

@ -82,7 +82,7 @@ class spirvbin_t : public spirvbin_base_t
public: public:
spirvbin_t(int /*verbose = 0*/) { } spirvbin_t(int /*verbose = 0*/) { }
void remap(std::vector<unsigned int>& /*spv*/, unsigned int /*opts = 0*/) void remap(std::vector<std::uint32_t>& /*spv*/, unsigned int /*opts = 0*/)
{ {
printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n"); printf("Tool not compiled for C++11, which is required for SPIR-V remapping.\n");
exit(5); exit(5);

View File

@ -217,10 +217,12 @@ void SpirvStream::outputIndent()
void SpirvStream::formatId(Id id, std::stringstream& idStream) void SpirvStream::formatId(Id id, std::stringstream& idStream)
{ {
if (id >= bound)
Kill(out, "Bad <id>");
if (id != 0) { if (id != 0) {
// On instructions with no IDs, this is called with "0", which does not
// have to be within ID bounds on null shaders.
if (id >= bound)
Kill(out, "Bad <id>");
idStream << id; idStream << id;
if (idDescriptor[id].size() > 0) if (idDescriptor[id].size() > 0)
idStream << "(" << idDescriptor[id] << ")"; idStream << "(" << idDescriptor[id] << ")";
@ -334,7 +336,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
idDescriptor[resultId] = (const char*)(&stream[word]); idDescriptor[resultId] = (const char*)(&stream[word]);
} }
else { else {
if (idDescriptor[resultId].size() == 0) { if (resultId != 0 && idDescriptor[resultId].size() == 0) {
switch (opCode) { switch (opCode) {
case OpTypeInt: case OpTypeInt:
idDescriptor[resultId] = "int"; idDescriptor[resultId] = "int";

View File

@ -24,6 +24,7 @@ set(LIBRARIES
OSDependent OSDependent
HLSL HLSL
SPIRV SPIRV
SPVRemapper
glslang-default-resource-limits) glslang-default-resource-limits)
if(WIN32) if(WIN32)

View File

@ -0,0 +1,40 @@
remap.basic.dcefunc.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 19
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 14 16
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 9 "dead_fn("
Name 14 "outf4"
Name 16 "inf"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 3
8: TypeFunction 7(fvec3)
10: 6(float) Constant 0
11: 7(fvec3) ConstantComposite 10 10 10
12: TypeVector 6(float) 4
13: TypePointer Output 12(fvec4)
14(outf4): 13(ptr) Variable Output
15: TypePointer Input 6(float)
16(inf): 15(ptr) Variable Input
4(main): 2 Function None 3
5: Label
17: 6(float) Load 16(inf)
18: 12(fvec4) CompositeConstruct 17 17 17 17
Store 14(outf4) 18
Return
FunctionEnd

View File

@ -0,0 +1,12 @@
remap.basic.dcevartype.frag
ERROR: #version: ES shaders for Vulkan SPIR-V require version 310 or higher
Warning, version 310 is not yet complete; most version-specific features are present, but some are missing.
ERROR: 1 compilation errors. No code generated.
Linked fragment stage:
ERROR: Linking fragment stage: Missing entry point: Each stage requires one "void main()" entry point
SPIR-V is not generated for failed compile or link

View File

@ -0,0 +1,31 @@
remap.basic.everything.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 24969
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 4539 3773
ExecutionMode 5663 OriginUpperLeft
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
29: TypeVector 13(float) 4
666: TypePointer Output 29(fvec4)
4539: 666(ptr) Variable Output
650: TypePointer Input 13(float)
3773: 650(ptr) Variable Input
5663: 8 Function None 1282
24968: Label
17486: 13(float) Load 3773
17691: 29(fvec4) CompositeConstruct 17486 17486 17486 17486
Store 4539 17691
Return
FunctionEnd

View File

@ -0,0 +1,44 @@
remap.basic.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 20
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 15 17
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 9 "dead_fn("
Name 15 "outf4"
Name 17 "inf"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 3
8: TypeFunction 7(fvec3)
11: 6(float) Constant 0
12: 7(fvec3) ConstantComposite 11 11 11
13: TypeVector 6(float) 4
14: TypePointer Output 13(fvec4)
15(outf4): 14(ptr) Variable Output
16: TypePointer Input 6(float)
17(inf): 16(ptr) Variable Input
4(main): 2 Function None 3
5: Label
18: 6(float) Load 17(inf)
19: 13(fvec4) CompositeConstruct 18 18 18 18
Store 15(outf4) 19
Return
FunctionEnd
9(dead_fn(): 7(fvec3) Function None 8
10: Label
ReturnValue 12
FunctionEnd

View File

@ -0,0 +1,39 @@
remap.basic.strip.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 20
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 15 17
ExecutionMode 4 OriginUpperLeft
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 3
8: TypeFunction 7(fvec3)
11: 6(float) Constant 0
12: 7(fvec3) ConstantComposite 11 11 11
13: TypeVector 6(float) 4
14: TypePointer Output 13(fvec4)
15: 14(ptr) Variable Output
16: TypePointer Input 6(float)
17: 16(ptr) Variable Input
4: 2 Function None 3
5: Label
18: 6(float) Load 17
19: 13(fvec4) CompositeConstruct 18 18 18 18
Store 15 19
Return
FunctionEnd
9: 7(fvec3) Function None 8
10: Label
ReturnValue 12
FunctionEnd

View File

@ -0,0 +1,213 @@
remap.hlsl.sample.basic.everything.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 24916
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main"
ExecutionMode 5663 OriginUpperLeft
Decorate 4727 DescriptorSet 0
Decorate 4727 Binding 0
Decorate 3305 DescriptorSet 0
Decorate 3305 Binding 0
Decorate 4743 DescriptorSet 0
Decorate 4807 DescriptorSet 0
Decorate 5042 DescriptorSet 0
Decorate 5058 DescriptorSet 0
Decorate 5122 DescriptorSet 0
Decorate 3967 DescriptorSet 0
Decorate 3983 DescriptorSet 0
Decorate 4047 DescriptorSet 0
Decorate 3789 DescriptorSet 0
Decorate 3805 DescriptorSet 0
Decorate 3869 DescriptorSet 0
MemberDecorate 1032 1 BuiltIn FragDepth
8: TypeVoid
1282: TypeFunction 8
12: TypeInt 32 1
1335: TypeStruct 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int) 12(int)
1972: TypePointer Function 1335(struct)
2574: 12(int) Constant 1
649: TypePointer Function 12(int)
2577: 12(int) Constant 2
2580: 12(int) Constant 3
2583: 12(int) Constant 4
2586: 12(int) Constant 5
2589: 12(int) Constant 6
2571: 12(int) Constant 0
2592: 12(int) Constant 7
2595: 12(int) Constant 8
2598: 12(int) Constant 9
2601: 12(int) Constant 10
2604: 12(int) Constant 11
13: TypeFloat 32
29: TypeVector 13(float) 4
666: TypePointer Function 29(fvec4)
149: TypeImage 13(float) 1D sampled format:Unknown
786: TypePointer UniformConstant 149
4727: 786(ptr) Variable UniformConstant
508: TypeSampler
1145: TypePointer UniformConstant 508
3305: 1145(ptr) Variable UniformConstant
510: TypeSampledImage 149
2935: 13(float) Constant 1036831949
26: TypeVector 12(int) 4
148: TypeImage 12(int) 1D sampled format:Unknown
785: TypePointer UniformConstant 148
4743: 785(ptr) Variable UniformConstant
511: TypeSampledImage 148
2821: 13(float) Constant 1045220557
11: TypeInt 32 0
23: TypeVector 11(int) 4
147: TypeImage 11(int) 1D sampled format:Unknown
784: TypePointer UniformConstant 147
4807: 784(ptr) Variable UniformConstant
512: TypeSampledImage 147
2151: 13(float) Constant 1050253722
150: TypeImage 13(float) 2D sampled format:Unknown
787: TypePointer UniformConstant 150
5042: 787(ptr) Variable UniformConstant
513: TypeSampledImage 150
19: TypeVector 13(float) 2
1825: 19(fvec2) ConstantComposite 2935 2821
151: TypeImage 12(int) 2D sampled format:Unknown
788: TypePointer UniformConstant 151
5058: 788(ptr) Variable UniformConstant
514: TypeSampledImage 151
2707: 13(float) Constant 1053609165
2028: 19(fvec2) ConstantComposite 2151 2707
152: TypeImage 11(int) 2D sampled format:Unknown
789: TypePointer UniformConstant 152
5122: 789(ptr) Variable UniformConstant
515: TypeSampledImage 152
252: 13(float) Constant 1056964608
2037: 13(float) Constant 1058642330
2684: 19(fvec2) ConstantComposite 252 2037
153: TypeImage 13(float) 3D sampled format:Unknown
790: TypePointer UniformConstant 153
3967: 790(ptr) Variable UniformConstant
516: TypeSampledImage 153
24: TypeVector 13(float) 3
1660: 24(fvec3) ConstantComposite 2935 2821 2151
154: TypeImage 12(int) 3D sampled format:Unknown
791: TypePointer UniformConstant 154
3983: 791(ptr) Variable UniformConstant
517: TypeSampledImage 154
2174: 24(fvec3) ConstantComposite 2707 252 2037
155: TypeImage 11(int) 3D sampled format:Unknown
792: TypePointer UniformConstant 155
4047: 792(ptr) Variable UniformConstant
518: TypeSampledImage 155
808: 13(float) Constant 1060320051
2593: 13(float) Constant 1061997773
1364: 13(float) Constant 1063675494
2476: 24(fvec3) ConstantComposite 808 2593 1364
156: TypeImage 13(float) Cube sampled format:Unknown
793: TypePointer UniformConstant 156
3789: 793(ptr) Variable UniformConstant
519: TypeSampledImage 156
157: TypeImage 12(int) Cube sampled format:Unknown
794: TypePointer UniformConstant 157
3805: 794(ptr) Variable UniformConstant
520: TypeSampledImage 157
158: TypeImage 11(int) Cube sampled format:Unknown
795: TypePointer UniformConstant 158
3869: 795(ptr) Variable UniformConstant
521: TypeSampledImage 158
1032: TypeStruct 29(fvec4) 13(float)
1669: TypePointer Function 1032(struct)
138: 13(float) Constant 1065353216
1284: 29(fvec4) ConstantComposite 138 138 138 138
650: TypePointer Function 13(float)
5663: 8 Function None 1282
24915: Label
5830: 1972(ptr) Variable Function
5072: 1669(ptr) Variable Function
22097: 649(ptr) AccessChain 5830 2574
Store 22097 2574
19732: 649(ptr) AccessChain 5830 2577
Store 19732 2574
19733: 649(ptr) AccessChain 5830 2580
Store 19733 2574
19734: 649(ptr) AccessChain 5830 2583
Store 19734 2574
19735: 649(ptr) AccessChain 5830 2586
Store 19735 2574
19736: 649(ptr) AccessChain 5830 2589
Store 19736 2574
19737: 649(ptr) AccessChain 5830 2571
Store 19737 2574
19738: 649(ptr) AccessChain 5830 2592
Store 19738 2574
19739: 649(ptr) AccessChain 5830 2595
Store 19739 2574
19740: 649(ptr) AccessChain 5830 2598
Store 19740 2574
19741: 649(ptr) AccessChain 5830 2601
Store 19741 2574
19656: 649(ptr) AccessChain 5830 2604
Store 19656 2574
14934: 149 Load 4727
11686: 508 Load 3305
11940: 510 SampledImage 14934 11686
7877: 29(fvec4) ImageSampleImplicitLod 11940 2935
15360: 148 Load 4743
15706: 508 Load 3305
11941: 511 SampledImage 15360 15706
7878: 26(ivec4) ImageSampleImplicitLod 11941 2821
15361: 147 Load 4807
15707: 508 Load 3305
11942: 512 SampledImage 15361 15707
7879: 23(ivec4) ImageSampleImplicitLod 11942 2151
15362: 150 Load 5042
15708: 508 Load 3305
11943: 513 SampledImage 15362 15708
7880: 29(fvec4) ImageSampleImplicitLod 11943 1825
15363: 151 Load 5058
15709: 508 Load 3305
11944: 514 SampledImage 15363 15709
7881: 26(ivec4) ImageSampleImplicitLod 11944 2028
15364: 152 Load 5122
15710: 508 Load 3305
11945: 515 SampledImage 15364 15710
7882: 23(ivec4) ImageSampleImplicitLod 11945 2684
15365: 153 Load 3967
15711: 508 Load 3305
11946: 516 SampledImage 15365 15711
7883: 29(fvec4) ImageSampleImplicitLod 11946 1660
15366: 154 Load 3983
15712: 508 Load 3305
11947: 517 SampledImage 15366 15712
7884: 26(ivec4) ImageSampleImplicitLod 11947 2174
15367: 155 Load 4047
15713: 508 Load 3305
11948: 518 SampledImage 15367 15713
7885: 23(ivec4) ImageSampleImplicitLod 11948 2476
15368: 156 Load 3789
15714: 508 Load 3305
11949: 519 SampledImage 15368 15714
7886: 29(fvec4) ImageSampleImplicitLod 11949 1660
15369: 157 Load 3805
15715: 508 Load 3305
11950: 520 SampledImage 15369 15715
7887: 26(ivec4) ImageSampleImplicitLod 11950 2174
15370: 158 Load 3869
15716: 508 Load 3305
12016: 521 SampledImage 15370 15716
7204: 23(ivec4) ImageSampleImplicitLod 12016 2476
20158: 666(ptr) AccessChain 5072 2571
Store 20158 1284
19657: 650(ptr) AccessChain 5072 2574
Store 19657 138
21536:1032(struct) Load 5072
ReturnValue 21536
FunctionEnd

View File

@ -0,0 +1,293 @@
remap.hlsl.sample.basic.none.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 183
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 7 "MemberTest"
MemberName 7(MemberTest) 0 "Sample"
MemberName 7(MemberTest) 1 "CalculateLevelOfDetail"
MemberName 7(MemberTest) 2 "CalculateLevelOfDetailUnclamped"
MemberName 7(MemberTest) 3 "Gather"
MemberName 7(MemberTest) 4 "GetDimensions"
MemberName 7(MemberTest) 5 "GetSamplePosition"
MemberName 7(MemberTest) 6 "Load"
MemberName 7(MemberTest) 7 "SampleBias"
MemberName 7(MemberTest) 8 "SampleCmp"
MemberName 7(MemberTest) 9 "SampleCmpLevelZero"
MemberName 7(MemberTest) 10 "SampleGrad"
MemberName 7(MemberTest) 11 "SampleLevel"
Name 9 "mtest"
Name 38 "txval10"
Name 41 "g_tTex1df4"
Name 45 "g_sSamp"
Name 53 "txval11"
Name 56 "g_tTex1di4"
Name 66 "txval12"
Name 69 "g_tTex1du4"
Name 76 "txval20"
Name 79 "g_tTex2df4"
Name 87 "txval21"
Name 90 "g_tTex2di4"
Name 98 "txval22"
Name 101 "g_tTex2du4"
Name 110 "txval30"
Name 113 "g_tTex3df4"
Name 121 "txval31"
Name 124 "g_tTex3di4"
Name 131 "txval32"
Name 134 "g_tTex3du4"
Name 144 "txval40"
Name 147 "g_tTexcdf4"
Name 153 "txval41"
Name 156 "g_tTexcdi4"
Name 162 "txval42"
Name 165 "g_tTexcdu4"
Name 171 "PS_OUTPUT"
MemberName 171(PS_OUTPUT) 0 "Color"
MemberName 171(PS_OUTPUT) 1 "Depth"
Name 173 "psout"
Name 180 "g_sSamp2d"
Name 181 "g_sSamp2D_b"
Name 182 "g_tTex1df4a"
Decorate 41(g_tTex1df4) DescriptorSet 0
Decorate 41(g_tTex1df4) Binding 0
Decorate 45(g_sSamp) DescriptorSet 0
Decorate 45(g_sSamp) Binding 0
Decorate 56(g_tTex1di4) DescriptorSet 0
Decorate 69(g_tTex1du4) DescriptorSet 0
Decorate 79(g_tTex2df4) DescriptorSet 0
Decorate 90(g_tTex2di4) DescriptorSet 0
Decorate 101(g_tTex2du4) DescriptorSet 0
Decorate 113(g_tTex3df4) DescriptorSet 0
Decorate 124(g_tTex3di4) DescriptorSet 0
Decorate 134(g_tTex3du4) DescriptorSet 0
Decorate 147(g_tTexcdf4) DescriptorSet 0
Decorate 156(g_tTexcdi4) DescriptorSet 0
Decorate 165(g_tTexcdu4) DescriptorSet 0
MemberDecorate 171(PS_OUTPUT) 1 BuiltIn FragDepth
Decorate 180(g_sSamp2d) DescriptorSet 0
Decorate 181(g_sSamp2D_b) DescriptorSet 0
Decorate 182(g_tTex1df4a) DescriptorSet 0
Decorate 182(g_tTex1df4a) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7(MemberTest): TypeStruct 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int)
8: TypePointer Function 7(MemberTest)
10: 6(int) Constant 1
11: TypePointer Function 6(int)
13: 6(int) Constant 2
15: 6(int) Constant 3
17: 6(int) Constant 4
19: 6(int) Constant 5
21: 6(int) Constant 6
23: 6(int) Constant 0
25: 6(int) Constant 7
27: 6(int) Constant 8
29: 6(int) Constant 9
31: 6(int) Constant 10
33: 6(int) Constant 11
35: TypeFloat 32
36: TypeVector 35(float) 4
37: TypePointer Function 36(fvec4)
39: TypeImage 35(float) 1D sampled format:Unknown
40: TypePointer UniformConstant 39
41(g_tTex1df4): 40(ptr) Variable UniformConstant
43: TypeSampler
44: TypePointer UniformConstant 43
45(g_sSamp): 44(ptr) Variable UniformConstant
47: TypeSampledImage 39
49: 35(float) Constant 1036831949
51: TypeVector 6(int) 4
52: TypePointer Function 51(ivec4)
54: TypeImage 6(int) 1D sampled format:Unknown
55: TypePointer UniformConstant 54
56(g_tTex1di4): 55(ptr) Variable UniformConstant
59: TypeSampledImage 54
61: 35(float) Constant 1045220557
63: TypeInt 32 0
64: TypeVector 63(int) 4
65: TypePointer Function 64(ivec4)
67: TypeImage 63(int) 1D sampled format:Unknown
68: TypePointer UniformConstant 67
69(g_tTex1du4): 68(ptr) Variable UniformConstant
72: TypeSampledImage 67
74: 35(float) Constant 1050253722
77: TypeImage 35(float) 2D sampled format:Unknown
78: TypePointer UniformConstant 77
79(g_tTex2df4): 78(ptr) Variable UniformConstant
82: TypeSampledImage 77
84: TypeVector 35(float) 2
85: 84(fvec2) ConstantComposite 49 61
88: TypeImage 6(int) 2D sampled format:Unknown
89: TypePointer UniformConstant 88
90(g_tTex2di4): 89(ptr) Variable UniformConstant
93: TypeSampledImage 88
95: 35(float) Constant 1053609165
96: 84(fvec2) ConstantComposite 74 95
99: TypeImage 63(int) 2D sampled format:Unknown
100: TypePointer UniformConstant 99
101(g_tTex2du4): 100(ptr) Variable UniformConstant
104: TypeSampledImage 99
106: 35(float) Constant 1056964608
107: 35(float) Constant 1058642330
108: 84(fvec2) ConstantComposite 106 107
111: TypeImage 35(float) 3D sampled format:Unknown
112: TypePointer UniformConstant 111
113(g_tTex3df4): 112(ptr) Variable UniformConstant
116: TypeSampledImage 111
118: TypeVector 35(float) 3
119: 118(fvec3) ConstantComposite 49 61 74
122: TypeImage 6(int) 3D sampled format:Unknown
123: TypePointer UniformConstant 122
124(g_tTex3di4): 123(ptr) Variable UniformConstant
127: TypeSampledImage 122
129: 118(fvec3) ConstantComposite 95 106 107
132: TypeImage 63(int) 3D sampled format:Unknown
133: TypePointer UniformConstant 132
134(g_tTex3du4): 133(ptr) Variable UniformConstant
137: TypeSampledImage 132
139: 35(float) Constant 1060320051
140: 35(float) Constant 1061997773
141: 35(float) Constant 1063675494
142: 118(fvec3) ConstantComposite 139 140 141
145: TypeImage 35(float) Cube sampled format:Unknown
146: TypePointer UniformConstant 145
147(g_tTexcdf4): 146(ptr) Variable UniformConstant
150: TypeSampledImage 145
154: TypeImage 6(int) Cube sampled format:Unknown
155: TypePointer UniformConstant 154
156(g_tTexcdi4): 155(ptr) Variable UniformConstant
159: TypeSampledImage 154
163: TypeImage 63(int) Cube sampled format:Unknown
164: TypePointer UniformConstant 163
165(g_tTexcdu4): 164(ptr) Variable UniformConstant
168: TypeSampledImage 163
171(PS_OUTPUT): TypeStruct 36(fvec4) 35(float)
172: TypePointer Function 171(PS_OUTPUT)
174: 35(float) Constant 1065353216
175: 36(fvec4) ConstantComposite 174 174 174 174
177: TypePointer Function 35(float)
180(g_sSamp2d): 44(ptr) Variable UniformConstant
181(g_sSamp2D_b): 44(ptr) Variable UniformConstant
182(g_tTex1df4a): 40(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(mtest): 8(ptr) Variable Function
38(txval10): 37(ptr) Variable Function
53(txval11): 52(ptr) Variable Function
66(txval12): 65(ptr) Variable Function
76(txval20): 37(ptr) Variable Function
87(txval21): 52(ptr) Variable Function
98(txval22): 65(ptr) Variable Function
110(txval30): 37(ptr) Variable Function
121(txval31): 52(ptr) Variable Function
131(txval32): 65(ptr) Variable Function
144(txval40): 37(ptr) Variable Function
153(txval41): 52(ptr) Variable Function
162(txval42): 65(ptr) Variable Function
173(psout): 172(ptr) Variable Function
12: 11(ptr) AccessChain 9(mtest) 10
Store 12 10
14: 11(ptr) AccessChain 9(mtest) 13
Store 14 10
16: 11(ptr) AccessChain 9(mtest) 15
Store 16 10
18: 11(ptr) AccessChain 9(mtest) 17
Store 18 10
20: 11(ptr) AccessChain 9(mtest) 19
Store 20 10
22: 11(ptr) AccessChain 9(mtest) 21
Store 22 10
24: 11(ptr) AccessChain 9(mtest) 23
Store 24 10
26: 11(ptr) AccessChain 9(mtest) 25
Store 26 10
28: 11(ptr) AccessChain 9(mtest) 27
Store 28 10
30: 11(ptr) AccessChain 9(mtest) 29
Store 30 10
32: 11(ptr) AccessChain 9(mtest) 31
Store 32 10
34: 11(ptr) AccessChain 9(mtest) 33
Store 34 10
42: 39 Load 41(g_tTex1df4)
46: 43 Load 45(g_sSamp)
48: 47 SampledImage 42 46
50: 36(fvec4) ImageSampleImplicitLod 48 49
Store 38(txval10) 50
57: 54 Load 56(g_tTex1di4)
58: 43 Load 45(g_sSamp)
60: 59 SampledImage 57 58
62: 51(ivec4) ImageSampleImplicitLod 60 61
Store 53(txval11) 62
70: 67 Load 69(g_tTex1du4)
71: 43 Load 45(g_sSamp)
73: 72 SampledImage 70 71
75: 64(ivec4) ImageSampleImplicitLod 73 74
Store 66(txval12) 75
80: 77 Load 79(g_tTex2df4)
81: 43 Load 45(g_sSamp)
83: 82 SampledImage 80 81
86: 36(fvec4) ImageSampleImplicitLod 83 85
Store 76(txval20) 86
91: 88 Load 90(g_tTex2di4)
92: 43 Load 45(g_sSamp)
94: 93 SampledImage 91 92
97: 51(ivec4) ImageSampleImplicitLod 94 96
Store 87(txval21) 97
102: 99 Load 101(g_tTex2du4)
103: 43 Load 45(g_sSamp)
105: 104 SampledImage 102 103
109: 64(ivec4) ImageSampleImplicitLod 105 108
Store 98(txval22) 109
114: 111 Load 113(g_tTex3df4)
115: 43 Load 45(g_sSamp)
117: 116 SampledImage 114 115
120: 36(fvec4) ImageSampleImplicitLod 117 119
Store 110(txval30) 120
125: 122 Load 124(g_tTex3di4)
126: 43 Load 45(g_sSamp)
128: 127 SampledImage 125 126
130: 51(ivec4) ImageSampleImplicitLod 128 129
Store 121(txval31) 130
135: 132 Load 134(g_tTex3du4)
136: 43 Load 45(g_sSamp)
138: 137 SampledImage 135 136
143: 64(ivec4) ImageSampleImplicitLod 138 142
Store 131(txval32) 143
148: 145 Load 147(g_tTexcdf4)
149: 43 Load 45(g_sSamp)
151: 150 SampledImage 148 149
152: 36(fvec4) ImageSampleImplicitLod 151 119
Store 144(txval40) 152
157: 154 Load 156(g_tTexcdi4)
158: 43 Load 45(g_sSamp)
160: 159 SampledImage 157 158
161: 51(ivec4) ImageSampleImplicitLod 160 129
Store 153(txval41) 161
166: 163 Load 165(g_tTexcdu4)
167: 43 Load 45(g_sSamp)
169: 168 SampledImage 166 167
170: 64(ivec4) ImageSampleImplicitLod 169 142
Store 162(txval42) 170
176: 37(ptr) AccessChain 173(psout) 23
Store 176 175
178: 177(ptr) AccessChain 173(psout) 10
Store 178 174
179:171(PS_OUTPUT) Load 173(psout)
ReturnValue 179
FunctionEnd

View File

@ -0,0 +1,246 @@
remap.hlsl.sample.basic.strip.frag
WARNING: 0:4: 'immediate sampler state' : unimplemented
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 183
Capability Shader
Capability Sampled1D
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Decorate 41 DescriptorSet 0
Decorate 41 Binding 0
Decorate 45 DescriptorSet 0
Decorate 45 Binding 0
Decorate 56 DescriptorSet 0
Decorate 69 DescriptorSet 0
Decorate 79 DescriptorSet 0
Decorate 90 DescriptorSet 0
Decorate 101 DescriptorSet 0
Decorate 113 DescriptorSet 0
Decorate 124 DescriptorSet 0
Decorate 134 DescriptorSet 0
Decorate 147 DescriptorSet 0
Decorate 156 DescriptorSet 0
Decorate 165 DescriptorSet 0
MemberDecorate 171 1 BuiltIn FragDepth
Decorate 180 DescriptorSet 0
Decorate 181 DescriptorSet 0
Decorate 182 DescriptorSet 0
Decorate 182 Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeStruct 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int) 6(int)
8: TypePointer Function 7(struct)
10: 6(int) Constant 1
11: TypePointer Function 6(int)
13: 6(int) Constant 2
15: 6(int) Constant 3
17: 6(int) Constant 4
19: 6(int) Constant 5
21: 6(int) Constant 6
23: 6(int) Constant 0
25: 6(int) Constant 7
27: 6(int) Constant 8
29: 6(int) Constant 9
31: 6(int) Constant 10
33: 6(int) Constant 11
35: TypeFloat 32
36: TypeVector 35(float) 4
37: TypePointer Function 36(fvec4)
39: TypeImage 35(float) 1D sampled format:Unknown
40: TypePointer UniformConstant 39
41: 40(ptr) Variable UniformConstant
43: TypeSampler
44: TypePointer UniformConstant 43
45: 44(ptr) Variable UniformConstant
47: TypeSampledImage 39
49: 35(float) Constant 1036831949
51: TypeVector 6(int) 4
52: TypePointer Function 51(ivec4)
54: TypeImage 6(int) 1D sampled format:Unknown
55: TypePointer UniformConstant 54
56: 55(ptr) Variable UniformConstant
59: TypeSampledImage 54
61: 35(float) Constant 1045220557
63: TypeInt 32 0
64: TypeVector 63(int) 4
65: TypePointer Function 64(ivec4)
67: TypeImage 63(int) 1D sampled format:Unknown
68: TypePointer UniformConstant 67
69: 68(ptr) Variable UniformConstant
72: TypeSampledImage 67
74: 35(float) Constant 1050253722
77: TypeImage 35(float) 2D sampled format:Unknown
78: TypePointer UniformConstant 77
79: 78(ptr) Variable UniformConstant
82: TypeSampledImage 77
84: TypeVector 35(float) 2
85: 84(fvec2) ConstantComposite 49 61
88: TypeImage 6(int) 2D sampled format:Unknown
89: TypePointer UniformConstant 88
90: 89(ptr) Variable UniformConstant
93: TypeSampledImage 88
95: 35(float) Constant 1053609165
96: 84(fvec2) ConstantComposite 74 95
99: TypeImage 63(int) 2D sampled format:Unknown
100: TypePointer UniformConstant 99
101: 100(ptr) Variable UniformConstant
104: TypeSampledImage 99
106: 35(float) Constant 1056964608
107: 35(float) Constant 1058642330
108: 84(fvec2) ConstantComposite 106 107
111: TypeImage 35(float) 3D sampled format:Unknown
112: TypePointer UniformConstant 111
113: 112(ptr) Variable UniformConstant
116: TypeSampledImage 111
118: TypeVector 35(float) 3
119: 118(fvec3) ConstantComposite 49 61 74
122: TypeImage 6(int) 3D sampled format:Unknown
123: TypePointer UniformConstant 122
124: 123(ptr) Variable UniformConstant
127: TypeSampledImage 122
129: 118(fvec3) ConstantComposite 95 106 107
132: TypeImage 63(int) 3D sampled format:Unknown
133: TypePointer UniformConstant 132
134: 133(ptr) Variable UniformConstant
137: TypeSampledImage 132
139: 35(float) Constant 1060320051
140: 35(float) Constant 1061997773
141: 35(float) Constant 1063675494
142: 118(fvec3) ConstantComposite 139 140 141
145: TypeImage 35(float) Cube sampled format:Unknown
146: TypePointer UniformConstant 145
147: 146(ptr) Variable UniformConstant
150: TypeSampledImage 145
154: TypeImage 6(int) Cube sampled format:Unknown
155: TypePointer UniformConstant 154
156: 155(ptr) Variable UniformConstant
159: TypeSampledImage 154
163: TypeImage 63(int) Cube sampled format:Unknown
164: TypePointer UniformConstant 163
165: 164(ptr) Variable UniformConstant
168: TypeSampledImage 163
171: TypeStruct 36(fvec4) 35(float)
172: TypePointer Function 171(struct)
174: 35(float) Constant 1065353216
175: 36(fvec4) ConstantComposite 174 174 174 174
177: TypePointer Function 35(float)
180: 44(ptr) Variable UniformConstant
181: 44(ptr) Variable UniformConstant
182: 40(ptr) Variable UniformConstant
4: 2 Function None 3
5: Label
9: 8(ptr) Variable Function
38: 37(ptr) Variable Function
53: 52(ptr) Variable Function
66: 65(ptr) Variable Function
76: 37(ptr) Variable Function
87: 52(ptr) Variable Function
98: 65(ptr) Variable Function
110: 37(ptr) Variable Function
121: 52(ptr) Variable Function
131: 65(ptr) Variable Function
144: 37(ptr) Variable Function
153: 52(ptr) Variable Function
162: 65(ptr) Variable Function
173: 172(ptr) Variable Function
12: 11(ptr) AccessChain 9 10
Store 12 10
14: 11(ptr) AccessChain 9 13
Store 14 10
16: 11(ptr) AccessChain 9 15
Store 16 10
18: 11(ptr) AccessChain 9 17
Store 18 10
20: 11(ptr) AccessChain 9 19
Store 20 10
22: 11(ptr) AccessChain 9 21
Store 22 10
24: 11(ptr) AccessChain 9 23
Store 24 10
26: 11(ptr) AccessChain 9 25
Store 26 10
28: 11(ptr) AccessChain 9 27
Store 28 10
30: 11(ptr) AccessChain 9 29
Store 30 10
32: 11(ptr) AccessChain 9 31
Store 32 10
34: 11(ptr) AccessChain 9 33
Store 34 10
42: 39 Load 41
46: 43 Load 45
48: 47 SampledImage 42 46
50: 36(fvec4) ImageSampleImplicitLod 48 49
Store 38 50
57: 54 Load 56
58: 43 Load 45
60: 59 SampledImage 57 58
62: 51(ivec4) ImageSampleImplicitLod 60 61
Store 53 62
70: 67 Load 69
71: 43 Load 45
73: 72 SampledImage 70 71
75: 64(ivec4) ImageSampleImplicitLod 73 74
Store 66 75
80: 77 Load 79
81: 43 Load 45
83: 82 SampledImage 80 81
86: 36(fvec4) ImageSampleImplicitLod 83 85
Store 76 86
91: 88 Load 90
92: 43 Load 45
94: 93 SampledImage 91 92
97: 51(ivec4) ImageSampleImplicitLod 94 96
Store 87 97
102: 99 Load 101
103: 43 Load 45
105: 104 SampledImage 102 103
109: 64(ivec4) ImageSampleImplicitLod 105 108
Store 98 109
114: 111 Load 113
115: 43 Load 45
117: 116 SampledImage 114 115
120: 36(fvec4) ImageSampleImplicitLod 117 119
Store 110 120
125: 122 Load 124
126: 43 Load 45
128: 127 SampledImage 125 126
130: 51(ivec4) ImageSampleImplicitLod 128 129
Store 121 130
135: 132 Load 134
136: 43 Load 45
138: 137 SampledImage 135 136
143: 64(ivec4) ImageSampleImplicitLod 138 142
Store 131 143
148: 145 Load 147
149: 43 Load 45
151: 150 SampledImage 148 149
152: 36(fvec4) ImageSampleImplicitLod 151 119
Store 144 152
157: 154 Load 156
158: 43 Load 45
160: 159 SampledImage 157 158
161: 51(ivec4) ImageSampleImplicitLod 160 129
Store 153 161
166: 163 Load 165
167: 43 Load 45
169: 168 SampledImage 166 167
170: 64(ivec4) ImageSampleImplicitLod 169 142
Store 162 170
176: 37(ptr) AccessChain 173 23
Store 176 175
178: 177(ptr) AccessChain 173 10
Store 178 174
179: 171(struct) Load 173
ReturnValue 179
FunctionEnd

View File

@ -0,0 +1,23 @@
remap.hlsl.templatetypes.everything.frag
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 16123
Capability Shader
Capability Float64
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main"
ExecutionMode 5663 OriginUpperLeft
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
2572: 13(float) Constant 0
5663: 8 Function None 1282
16122: Label
ReturnValue 2572
FunctionEnd

View File

@ -0,0 +1,216 @@
remap.hlsl.templatetypes.none.frag
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 144
Capability Shader
Capability Float64
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginUpperLeft
Name 4 "main"
Name 9 "r00"
Name 15 "r01"
Name 20 "r12"
Name 24 "r13"
Name 27 "r14"
Name 30 "r15"
Name 34 "r16"
Name 38 "r20"
Name 43 "r21"
Name 48 "r22"
Name 52 "r23"
Name 57 "r24"
Name 62 "r30"
Name 66 "r31"
Name 71 "r32"
Name 75 "r33"
Name 80 "r34"
Name 85 "r40"
Name 89 "r41"
Name 92 "r42"
Name 95 "r43"
Name 100 "r44"
Name 105 "r50"
Name 122 "r51"
Name 125 "r61"
Name 131 "r62"
Name 136 "r65"
Name 141 "r66"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
10: 6(float) Constant 1065353216
11: 6(float) Constant 1073741824
12: 6(float) Constant 1077936128
13: 6(float) Constant 1082130432
14: 7(fvec4) ConstantComposite 10 11 12 13
16: 6(float) Constant 1084227584
17: 7(fvec4) ConstantComposite 11 12 13 16
18: TypeBool
19: TypePointer Function 18(bool)
21: 18(bool) ConstantFalse
22: TypeInt 32 1
23: TypePointer Function 22(int)
25: 22(int) Constant 1
26: TypePointer Function 6(float)
28: TypeFloat 64
29: TypePointer Function 28(float)
31: 28(float) Constant 0 1072693248
32: TypeInt 32 0
33: TypePointer Function 32(int)
35: 32(int) Constant 1
36: TypeVector 18(bool) 2
37: TypePointer Function 36(bvec2)
39: 18(bool) ConstantTrue
40: 36(bvec2) ConstantComposite 21 39
41: TypeVector 22(int) 2
42: TypePointer Function 41(ivec2)
44: 22(int) Constant 2
45: 41(ivec2) ConstantComposite 25 44
46: TypeVector 6(float) 2
47: TypePointer Function 46(fvec2)
49: 46(fvec2) ConstantComposite 10 11
50: TypeVector 28(float) 2
51: TypePointer Function 50(fvec2)
53: 28(float) Constant 0 1073741824
54: 50(fvec2) ConstantComposite 31 53
55: TypeVector 32(int) 2
56: TypePointer Function 55(ivec2)
58: 32(int) Constant 2
59: 55(ivec2) ConstantComposite 35 58
60: TypeVector 18(bool) 3
61: TypePointer Function 60(bvec3)
63: 60(bvec3) ConstantComposite 21 39 39
64: TypeVector 22(int) 3
65: TypePointer Function 64(ivec3)
67: 22(int) Constant 3
68: 64(ivec3) ConstantComposite 25 44 67
69: TypeVector 6(float) 3
70: TypePointer Function 69(fvec3)
72: 69(fvec3) ConstantComposite 10 11 12
73: TypeVector 28(float) 3
74: TypePointer Function 73(fvec3)
76: 28(float) Constant 0 1074266112
77: 73(fvec3) ConstantComposite 31 53 76
78: TypeVector 32(int) 3
79: TypePointer Function 78(ivec3)
81: 32(int) Constant 3
82: 78(ivec3) ConstantComposite 35 58 81
83: TypeVector 18(bool) 4
84: TypePointer Function 83(bvec4)
86: 83(bvec4) ConstantComposite 21 39 39 21
87: TypeVector 22(int) 4
88: TypePointer Function 87(ivec4)
90: 22(int) Constant 4
91: 87(ivec4) ConstantComposite 25 44 67 90
93: TypeVector 28(float) 4
94: TypePointer Function 93(fvec4)
96: 28(float) Constant 0 1074790400
97: 93(fvec4) ConstantComposite 31 53 76 96
98: TypeVector 32(int) 4
99: TypePointer Function 98(ivec4)
101: 32(int) Constant 4
102: 98(ivec4) ConstantComposite 35 58 81 101
103: TypeMatrix 7(fvec4) 4
104: TypePointer Function 103
106: 6(float) Constant 0
107: 7(fvec4) ConstantComposite 106 10 11 12
108: 6(float) Constant 1086324736
109: 6(float) Constant 1088421888
110: 7(fvec4) ConstantComposite 13 16 108 109
111: 6(float) Constant 1090519040
112: 6(float) Constant 1091567616
113: 6(float) Constant 1092616192
114: 6(float) Constant 1093664768
115: 7(fvec4) ConstantComposite 111 112 113 114
116: 6(float) Constant 1094713344
117: 6(float) Constant 1095761920
118: 6(float) Constant 1096810496
119: 6(float) Constant 1097859072
120: 7(fvec4) ConstantComposite 116 117 118 119
121: 103 ConstantComposite 107 110 115 120
123: TypeMatrix 46(fvec2) 3
124: TypePointer Function 123
126: 46(fvec2) ConstantComposite 12 13
127: 46(fvec2) ConstantComposite 16 108
128: 123 ConstantComposite 49 126 127
129: TypeMatrix 69(fvec3) 2
130: TypePointer Function 129
132: 69(fvec3) ConstantComposite 13 16 108
133: 129 ConstantComposite 72 132
134: TypeMatrix 7(fvec4) 2
135: TypePointer Function 134
137: 7(fvec4) ConstantComposite 16 108 109 111
138: 134 ConstantComposite 14 137
139: TypeMatrix 7(fvec4) 3
140: TypePointer Function 139
142: 7(fvec4) ConstantComposite 112 113 114 116
143: 139 ConstantComposite 14 137 142
4(main): 2 Function None 3
5: Label
9(r00): 8(ptr) Variable Function
15(r01): 8(ptr) Variable Function
20(r12): 19(ptr) Variable Function
24(r13): 23(ptr) Variable Function
27(r14): 26(ptr) Variable Function
30(r15): 29(ptr) Variable Function
34(r16): 33(ptr) Variable Function
38(r20): 37(ptr) Variable Function
43(r21): 42(ptr) Variable Function
48(r22): 47(ptr) Variable Function
52(r23): 51(ptr) Variable Function
57(r24): 56(ptr) Variable Function
62(r30): 61(ptr) Variable Function
66(r31): 65(ptr) Variable Function
71(r32): 70(ptr) Variable Function
75(r33): 74(ptr) Variable Function
80(r34): 79(ptr) Variable Function
85(r40): 84(ptr) Variable Function
89(r41): 88(ptr) Variable Function
92(r42): 8(ptr) Variable Function
95(r43): 94(ptr) Variable Function
100(r44): 99(ptr) Variable Function
105(r50): 104(ptr) Variable Function
122(r51): 104(ptr) Variable Function
125(r61): 124(ptr) Variable Function
131(r62): 130(ptr) Variable Function
136(r65): 135(ptr) Variable Function
141(r66): 140(ptr) Variable Function
Store 9(r00) 14
Store 15(r01) 17
Store 20(r12) 21
Store 24(r13) 25
Store 27(r14) 10
Store 30(r15) 31
Store 34(r16) 35
Store 38(r20) 40
Store 43(r21) 45
Store 48(r22) 49
Store 52(r23) 54
Store 57(r24) 59
Store 62(r30) 63
Store 66(r31) 68
Store 71(r32) 72
Store 75(r33) 77
Store 80(r34) 82
Store 85(r40) 86
Store 89(r41) 91
Store 92(r42) 14
Store 95(r43) 97
Store 100(r44) 102
Store 105(r50) 121
Store 122(r51) 121
Store 125(r61) 128
Store 131(r62) 133
Store 136(r65) 138
Store 141(r66) 143
ReturnValue 106
FunctionEnd

View File

@ -0,0 +1,47 @@
remap.if.everything.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 22855
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 3773 4539
ExecutionMode 5663 OriginUpperLeft
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
650: TypePointer Input 13(float)
3773: 650(ptr) Variable Input
24: 13(float) Constant 1073741824
9: TypeBool
29: TypeVector 13(float) 4
666: TypePointer Output 29(fvec4)
4539: 666(ptr) Variable Output
947: 13(float) Constant 3204448256
5663: 8 Function None 1282
7911: Label
21734: 13(float) Load 3773
13508: 9(bool) FOrdGreaterThan 21734 24
SelectionMerge 19578 None
BranchConditional 13508 13182 10142
13182: Label
9496: 13(float) Load 3773
17615: 29(fvec4) CompositeConstruct 9496 9496 9496 9496
Store 4539 17615
Branch 19578
10142: Label
22854: 13(float) Load 3773
9982: 13(float) FAdd 22854 947
12421: 29(fvec4) CompositeConstruct 9982 9982 9982 9982
Store 4539 12421
Branch 19578
19578: Label
Return
FunctionEnd

View File

@ -0,0 +1,51 @@
remap.if.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 25
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 8 17
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 8 "inf"
Name 17 "outf4"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypePointer Input 6(float)
8(inf): 7(ptr) Variable Input
10: 6(float) Constant 1073741824
11: TypeBool
15: TypeVector 6(float) 4
16: TypePointer Output 15(fvec4)
17(outf4): 16(ptr) Variable Output
22: 6(float) Constant 3204448256
4(main): 2 Function None 3
5: Label
9: 6(float) Load 8(inf)
12: 11(bool) FOrdGreaterThan 9 10
SelectionMerge 14 None
BranchConditional 12 13 20
13: Label
18: 6(float) Load 8(inf)
19: 15(fvec4) CompositeConstruct 18 18 18 18
Store 17(outf4) 19
Branch 14
20: Label
21: 6(float) Load 8(inf)
23: 6(float) FAdd 21 22
24: 15(fvec4) CompositeConstruct 23 23 23 23
Store 17(outf4) 24
Branch 14
14: Label
Return
FunctionEnd

View File

@ -0,0 +1,7 @@
remap.literal64.everything.spv
// Module Version 10100
// Generated by (magic number): 70000
// Id's are bound by 0
Capability Shader
MemoryModel Logical GLSL450

View File

@ -0,0 +1,25 @@
remap.literal64.none.spv
// Module Version 10100
// Generated by (magic number): 70000
// Id's are bound by 10
Capability Shader
MemoryModel Logical GLSL450
1: TypeVoid
2: TypeInt 64 1
3: TypeFunction 1
4: 2(int) Constant 0 0
5: 1 Function None 3
6: Label
SelectionMerge 7 None
Switch 4 7
case 0: 0
case 8: 1
case 0: 9
8: Label
Branch 7
9: Label
Branch 7
7: Label
Return
FunctionEnd

View File

@ -0,0 +1,121 @@
remap.similar_1a.everything.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 24916
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 4201 4539 3773
ExecutionMode 5663 OriginUpperLeft
Decorate 4201 Flat
8: TypeVoid
1282: TypeFunction 8
12: TypeInt 32 1
649: TypePointer Function 12(int)
13: TypeFloat 32
204: TypeFunction 13(float) 649(ptr)
650: TypePointer Function 13(float)
2572: 13(float) Constant 0
2571: 12(int) Constant 0
9: TypeBool
252: 13(float) Constant 1056964608
2574: 12(int) Constant 1
2577: 12(int) Constant 2
26: TypeVector 12(int) 4
663: TypePointer Input 26(ivec4)
4201: 663(ptr) Variable Input
11: TypeInt 32 0
2573: 11(int) Constant 1
651: TypePointer Input 12(int)
2576: 11(int) Constant 2
2570: 11(int) Constant 0
29: TypeVector 13(float) 4
666: TypePointer Output 29(fvec4)
4539: 666(ptr) Variable Output
652: TypePointer Input 13(float)
3773: 652(ptr) Variable Input
5663: 8 Function None 1282
24915: Label
18415: 649(ptr) Variable Function
5786: 649(ptr) Variable Function
8366: 13(float) Load 3773
8654: 12(int) ConvertFToS 8366
Store 18415 8654
17256: 13(float) FunctionCall 3782 18415
14512: 13(float) Load 3773
7041: 12(int) ConvertFToS 14512
Store 5786 7041
23993: 13(float) FunctionCall 3836 5786
9180: 13(float) FAdd 17256 23993
15728: 29(fvec4) CompositeConstruct 9180 9180 9180 9180
Store 4539 15728
Return
FunctionEnd
3782: 13(float) Function None 204
6931: 649(ptr) FunctionParameter
12220: Label
4292: 650(ptr) Variable Function
4298: 649(ptr) Variable Function
Store 4292 2572
Store 4298 2571
Branch 14924
14924: Label
LoopMerge 8882 6488 None
Branch 11857
11857: Label
13755: 12(int) Load 4298
22731: 12(int) Load 6931
20007: 9(bool) SLessThan 13755 22731
BranchConditional 20007 24750 8882
24750: Label
22912: 13(float) Load 4292
19471: 13(float) FAdd 22912 252
Store 4292 19471
Branch 6488
6488: Label
19050: 12(int) Load 4298
8593: 12(int) IAdd 19050 2574
Store 4298 8593
Branch 14924
8882: Label
11601: 13(float) Load 4292
ReturnValue 11601
FunctionEnd
3836: 13(float) Function None 204
4408: 649(ptr) FunctionParameter
12143: Label
22102: 649(ptr) Variable Function
24151: 12(int) Load 4408
13868: 9(bool) SGreaterThan 24151 2577
SelectionMerge 22309 None
BranchConditional 13868 9492 17416
9492: Label
15624: 12(int) Load 4408
Store 22102 15624
17278: 13(float) FunctionCall 3782 22102
ReturnValue 17278
17416: Label
19506: 12(int) Load 4408
22773: 12(int) IMul 19506 2577
13472: 651(ptr) AccessChain 4201 2573
15280: 12(int) Load 13472
18079: 651(ptr) AccessChain 4201 2576
15199: 12(int) Load 18079
9343: 12(int) IMul 15280 15199
11462: 12(int) IAdd 22773 9343
11885: 651(ptr) AccessChain 4201 2570
21176: 12(int) Load 11885
10505: 12(int) IAdd 11462 21176
14626: 13(float) ConvertSToF 10505
ReturnValue 14626
22309: Label
6429: 13(float) Undef
ReturnValue 6429
FunctionEnd

View File

@ -0,0 +1,135 @@
remap.similar_1a.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 82
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 50 69 71
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 11 "Test1(i1;"
Name 10 "bound"
Name 14 "Test2(i1;"
Name 13 "bound"
Name 17 "r"
Name 19 "x"
Name 42 "param"
Name 50 "ini4"
Name 69 "outf4"
Name 71 "inf"
Name 74 "param"
Name 78 "param"
Decorate 50(ini4) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Function 6(int)
8: TypeFloat 32
9: TypeFunction 8(float) 7(ptr)
16: TypePointer Function 8(float)
18: 8(float) Constant 0
20: 6(int) Constant 0
28: TypeBool
30: 8(float) Constant 1056964608
34: 6(int) Constant 1
38: 6(int) Constant 2
48: TypeVector 6(int) 4
49: TypePointer Input 48(ivec4)
50(ini4): 49(ptr) Variable Input
51: TypeInt 32 0
52: 51(int) Constant 1
53: TypePointer Input 6(int)
56: 51(int) Constant 2
61: 51(int) Constant 0
67: TypeVector 8(float) 4
68: TypePointer Output 67(fvec4)
69(outf4): 68(ptr) Variable Output
70: TypePointer Input 8(float)
71(inf): 70(ptr) Variable Input
4(main): 2 Function None 3
5: Label
74(param): 7(ptr) Variable Function
78(param): 7(ptr) Variable Function
72: 8(float) Load 71(inf)
73: 6(int) ConvertFToS 72
Store 74(param) 73
75: 8(float) FunctionCall 11(Test1(i1;) 74(param)
76: 8(float) Load 71(inf)
77: 6(int) ConvertFToS 76
Store 78(param) 77
79: 8(float) FunctionCall 14(Test2(i1;) 78(param)
80: 8(float) FAdd 75 79
81: 67(fvec4) CompositeConstruct 80 80 80 80
Store 69(outf4) 81
Return
FunctionEnd
11(Test1(i1;): 8(float) Function None 9
10(bound): 7(ptr) FunctionParameter
12: Label
17(r): 16(ptr) Variable Function
19(x): 7(ptr) Variable Function
Store 17(r) 18
Store 19(x) 20
Branch 21
21: Label
LoopMerge 23 24 None
Branch 25
25: Label
26: 6(int) Load 19(x)
27: 6(int) Load 10(bound)
29: 28(bool) SLessThan 26 27
BranchConditional 29 22 23
22: Label
31: 8(float) Load 17(r)
32: 8(float) FAdd 31 30
Store 17(r) 32
Branch 24
24: Label
33: 6(int) Load 19(x)
35: 6(int) IAdd 33 34
Store 19(x) 35
Branch 21
23: Label
36: 8(float) Load 17(r)
ReturnValue 36
FunctionEnd
14(Test2(i1;): 8(float) Function None 9
13(bound): 7(ptr) FunctionParameter
15: Label
42(param): 7(ptr) Variable Function
37: 6(int) Load 13(bound)
39: 28(bool) SGreaterThan 37 38
SelectionMerge 41 None
BranchConditional 39 40 45
40: Label
43: 6(int) Load 13(bound)
Store 42(param) 43
44: 8(float) FunctionCall 11(Test1(i1;) 42(param)
ReturnValue 44
45: Label
46: 6(int) Load 13(bound)
47: 6(int) IMul 46 38
54: 53(ptr) AccessChain 50(ini4) 52
55: 6(int) Load 54
57: 53(ptr) AccessChain 50(ini4) 56
58: 6(int) Load 57
59: 6(int) IMul 55 58
60: 6(int) IAdd 47 59
62: 53(ptr) AccessChain 50(ini4) 61
63: 6(int) Load 62
64: 6(int) IAdd 60 63
65: 8(float) ConvertSToF 64
ReturnValue 65
41: Label
66: 8(float) Undef
ReturnValue 66
FunctionEnd

View File

@ -0,0 +1,127 @@
remap.similar_1b.everything.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 24916
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 4201 4539 3773
ExecutionMode 5663 OriginUpperLeft
Decorate 4201 Flat
8: TypeVoid
1282: TypeFunction 8
12: TypeInt 32 1
649: TypePointer Function 12(int)
13: TypeFloat 32
204: TypeFunction 13(float) 649(ptr)
650: TypePointer Function 13(float)
2572: 13(float) Constant 0
2571: 12(int) Constant 0
9: TypeBool
252: 13(float) Constant 1056964608
2574: 12(int) Constant 1
2821: 13(float) Constant 1045220557
2577: 12(int) Constant 2
2583: 12(int) Constant 4
26: TypeVector 12(int) 4
663: TypePointer Input 26(ivec4)
4201: 663(ptr) Variable Input
11: TypeInt 32 0
2573: 11(int) Constant 1
651: TypePointer Input 12(int)
2576: 11(int) Constant 2
2570: 11(int) Constant 0
29: TypeVector 13(float) 4
666: TypePointer Output 29(fvec4)
4539: 666(ptr) Variable Output
652: TypePointer Input 13(float)
3773: 652(ptr) Variable Input
5663: 8 Function None 1282
24915: Label
18415: 649(ptr) Variable Function
5786: 649(ptr) Variable Function
8366: 13(float) Load 3773
8654: 12(int) ConvertFToS 8366
Store 18415 8654
17256: 13(float) FunctionCall 3782 18415
14512: 13(float) Load 3773
7041: 12(int) ConvertFToS 14512
Store 5786 7041
23993: 13(float) FunctionCall 3836 5786
9180: 13(float) FAdd 17256 23993
15728: 29(fvec4) CompositeConstruct 9180 9180 9180 9180
Store 4539 15728
Return
FunctionEnd
3782: 13(float) Function None 204
6931: 649(ptr) FunctionParameter
12220: Label
4292: 650(ptr) Variable Function
4298: 649(ptr) Variable Function
Store 4292 2572
Store 4298 2571
Branch 14924
14924: Label
LoopMerge 6507 6488 None
Branch 11857
11857: Label
13755: 12(int) Load 4298
22731: 12(int) Load 6931
20007: 9(bool) SLessThan 13755 22731
BranchConditional 20007 24750 6507
24750: Label
22912: 13(float) Load 4292
19471: 13(float) FAdd 22912 252
Store 4292 19471
Branch 6488
6488: Label
19050: 12(int) Load 4298
8593: 12(int) IAdd 19050 2574
Store 4298 8593
Branch 14924
6507: Label
18877: 13(float) Load 4292
15899: 13(float) FAdd 18877 2821
Store 4292 15899
20342: 13(float) Load 4292
ReturnValue 20342
FunctionEnd
3836: 13(float) Function None 204
4408: 649(ptr) FunctionParameter
12143: Label
22102: 649(ptr) Variable Function
24151: 12(int) Load 4408
13868: 9(bool) SGreaterThan 24151 2577
SelectionMerge 22309 None
BranchConditional 13868 10822 17416
10822: Label
22680: 12(int) Load 4408
23216: 12(int) IMul 22680 2577
Store 22102 23216
7042: 13(float) FunctionCall 3782 22102
ReturnValue 7042
17416: Label
19506: 12(int) Load 4408
22773: 12(int) IMul 19506 2583
13472: 651(ptr) AccessChain 4201 2573
15280: 12(int) Load 13472
18079: 651(ptr) AccessChain 4201 2576
15199: 12(int) Load 18079
9343: 12(int) IMul 15280 15199
11462: 12(int) IAdd 22773 9343
11885: 651(ptr) AccessChain 4201 2570
21176: 12(int) Load 11885
10505: 12(int) IAdd 11462 21176
14626: 13(float) ConvertSToF 10505
ReturnValue 14626
22309: Label
6429: 13(float) Undef
ReturnValue 6429
FunctionEnd

View File

@ -0,0 +1,141 @@
remap.similar_1b.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 87
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 55 74 76
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 11 "Test1(i1;"
Name 10 "bound"
Name 14 "Test2(i1;"
Name 13 "bound"
Name 17 "r"
Name 19 "x"
Name 47 "param"
Name 55 "ini4"
Name 74 "outf4"
Name 76 "inf"
Name 79 "param"
Name 83 "param"
Decorate 55(ini4) Flat
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypePointer Function 6(int)
8: TypeFloat 32
9: TypeFunction 8(float) 7(ptr)
16: TypePointer Function 8(float)
18: 8(float) Constant 0
20: 6(int) Constant 0
28: TypeBool
30: 8(float) Constant 1056964608
34: 6(int) Constant 1
36: 8(float) Constant 1045220557
41: 6(int) Constant 2
51: 6(int) Constant 4
53: TypeVector 6(int) 4
54: TypePointer Input 53(ivec4)
55(ini4): 54(ptr) Variable Input
56: TypeInt 32 0
57: 56(int) Constant 1
58: TypePointer Input 6(int)
61: 56(int) Constant 2
66: 56(int) Constant 0
72: TypeVector 8(float) 4
73: TypePointer Output 72(fvec4)
74(outf4): 73(ptr) Variable Output
75: TypePointer Input 8(float)
76(inf): 75(ptr) Variable Input
4(main): 2 Function None 3
5: Label
79(param): 7(ptr) Variable Function
83(param): 7(ptr) Variable Function
77: 8(float) Load 76(inf)
78: 6(int) ConvertFToS 77
Store 79(param) 78
80: 8(float) FunctionCall 11(Test1(i1;) 79(param)
81: 8(float) Load 76(inf)
82: 6(int) ConvertFToS 81
Store 83(param) 82
84: 8(float) FunctionCall 14(Test2(i1;) 83(param)
85: 8(float) FAdd 80 84
86: 72(fvec4) CompositeConstruct 85 85 85 85
Store 74(outf4) 86
Return
FunctionEnd
11(Test1(i1;): 8(float) Function None 9
10(bound): 7(ptr) FunctionParameter
12: Label
17(r): 16(ptr) Variable Function
19(x): 7(ptr) Variable Function
Store 17(r) 18
Store 19(x) 20
Branch 21
21: Label
LoopMerge 23 24 None
Branch 25
25: Label
26: 6(int) Load 19(x)
27: 6(int) Load 10(bound)
29: 28(bool) SLessThan 26 27
BranchConditional 29 22 23
22: Label
31: 8(float) Load 17(r)
32: 8(float) FAdd 31 30
Store 17(r) 32
Branch 24
24: Label
33: 6(int) Load 19(x)
35: 6(int) IAdd 33 34
Store 19(x) 35
Branch 21
23: Label
37: 8(float) Load 17(r)
38: 8(float) FAdd 37 36
Store 17(r) 38
39: 8(float) Load 17(r)
ReturnValue 39
FunctionEnd
14(Test2(i1;): 8(float) Function None 9
13(bound): 7(ptr) FunctionParameter
15: Label
47(param): 7(ptr) Variable Function
40: 6(int) Load 13(bound)
42: 28(bool) SGreaterThan 40 41
SelectionMerge 44 None
BranchConditional 42 43 49
43: Label
45: 6(int) Load 13(bound)
46: 6(int) IMul 45 41
Store 47(param) 46
48: 8(float) FunctionCall 11(Test1(i1;) 47(param)
ReturnValue 48
49: Label
50: 6(int) Load 13(bound)
52: 6(int) IMul 50 51
59: 58(ptr) AccessChain 55(ini4) 57
60: 6(int) Load 59
62: 58(ptr) AccessChain 55(ini4) 61
63: 6(int) Load 62
64: 6(int) IMul 60 63
65: 6(int) IAdd 52 64
67: 58(ptr) AccessChain 55(ini4) 66
68: 6(int) Load 67
69: 6(int) IAdd 65 68
70: 8(float) ConvertSToF 69
ReturnValue 70
44: Label
71: 8(float) Undef
ReturnValue 71
FunctionEnd

View File

@ -0,0 +1,81 @@
remap.switch.everything.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 23990
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 3719 3994
ExecutionMode 5663 OriginUpperLeft
Decorate 3719 Location 0
Decorate 3994 RelaxedPrecision
Decorate 3994 Location 0
Decorate 12421 RelaxedPrecision
Decorate 12422 RelaxedPrecision
Decorate 12423 RelaxedPrecision
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
29: TypeVector 13(float) 4
666: TypePointer Input 29(fvec4)
3719: 666(ptr) Variable Input
11: TypeInt 32 0
2579: 11(int) Constant 3
650: TypePointer Input 13(float)
12: TypeInt 32 1
667: TypePointer Output 29(fvec4)
3994: 667(ptr) Variable Output
2570: 11(int) Constant 0
2572: 13(float) Constant 0
2573: 11(int) Constant 1
138: 13(float) Constant 1065353216
2576: 11(int) Constant 2
24: 13(float) Constant 1073741824
833: 13(float) Constant 3212836864
1284: 29(fvec4) ConstantComposite 833 833 833 833
5663: 8 Function None 1282
23915: Label
7984: 650(ptr) AccessChain 3719 2579
11376: 13(float) Load 7984
16859: 12(int) ConvertFToS 11376
SelectionMerge 19578 None
Switch 16859 15971
case 0: 8158
case 1: 8159
case 2: 8160
15971: Label
Store 3994 1284
Branch 19578
8158: Label
21848: 650(ptr) AccessChain 3719 2570
23987: 13(float) Load 21848
19989: 13(float) FAdd 23987 2572
12421: 29(fvec4) CompositeConstruct 19989 19989 19989 19989
Store 3994 12421
Branch 19578
8159: Label
21849: 650(ptr) AccessChain 3719 2573
23988: 13(float) Load 21849
19990: 13(float) FAdd 23988 138
12422: 29(fvec4) CompositeConstruct 19990 19990 19990 19990
Store 3994 12422
Branch 19578
8160: Label
21850: 650(ptr) AccessChain 3719 2576
23989: 13(float) Load 21850
19991: 13(float) FAdd 23989 24
12423: 29(fvec4) CompositeConstruct 19991 19991 19991 19991
Store 3994 12423
Branch 19578
19578: Label
Return
FunctionEnd

View File

@ -0,0 +1,85 @@
remap.switch.none.frag
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.:
"precision mediump int; precision highp float;"
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 44
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 9 23
ExecutionMode 4 OriginUpperLeft
Source GLSL 450
Name 4 "main"
Name 9 "in0"
Name 23 "FragColor"
Decorate 9(in0) Location 0
Decorate 23(FragColor) RelaxedPrecision
Decorate 23(FragColor) Location 0
Decorate 29 RelaxedPrecision
Decorate 35 RelaxedPrecision
Decorate 41 RelaxedPrecision
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Input 7(fvec4)
9(in0): 8(ptr) Variable Input
10: TypeInt 32 0
11: 10(int) Constant 3
12: TypePointer Input 6(float)
15: TypeInt 32 1
22: TypePointer Output 7(fvec4)
23(FragColor): 22(ptr) Variable Output
24: 10(int) Constant 0
27: 6(float) Constant 0
30: 10(int) Constant 1
33: 6(float) Constant 1065353216
36: 10(int) Constant 2
39: 6(float) Constant 1073741824
42: 6(float) Constant 3212836864
43: 7(fvec4) ConstantComposite 42 42 42 42
4(main): 2 Function None 3
5: Label
13: 12(ptr) AccessChain 9(in0) 11
14: 6(float) Load 13
16: 15(int) ConvertFToS 14
SelectionMerge 21 None
Switch 16 20
case 0: 17
case 1: 18
case 2: 19
20: Label
Store 23(FragColor) 43
Branch 21
17: Label
25: 12(ptr) AccessChain 9(in0) 24
26: 6(float) Load 25
28: 6(float) FAdd 26 27
29: 7(fvec4) CompositeConstruct 28 28 28 28
Store 23(FragColor) 29
Branch 21
18: Label
31: 12(ptr) AccessChain 9(in0) 30
32: 6(float) Load 31
34: 6(float) FAdd 32 33
35: 7(fvec4) CompositeConstruct 34 34 34 34
Store 23(FragColor) 35
Branch 21
19: Label
37: 12(ptr) AccessChain 9(in0) 36
38: 6(float) Load 37
40: 6(float) FAdd 38 39
41: 7(fvec4) CompositeConstruct 40 40 40 40
Store 23(FragColor) 41
Branch 21
21: Label
Return
FunctionEnd

View File

@ -0,0 +1,67 @@
remap.uniformarray.everything.frag
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 25030
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 3608 4957 4339 5139
ExecutionMode 5663 OriginUpperLeft
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32
29: TypeVector 13(float) 4
666: TypePointer Function 29(fvec4)
11: TypeInt 32 0
2588: 11(int) Constant 6
740: TypeArray 29(fvec4) 2588
1377: TypePointer Input 740
3608: 1377(ptr) Variable Input
12: TypeInt 32 1
2574: 12(int) Constant 1
667: TypePointer Input 29(fvec4)
24: TypeVector 13(float) 3
661: TypePointer Input 24(fvec3)
4957: 661(ptr) Variable Input
2618: 11(int) Constant 16
669: TypeArray 13(float) 2618
1306: TypePointer Input 669
4339: 1306(ptr) Variable Input
2607: 12(int) Constant 12
650: TypePointer Input 13(float)
2579: 11(int) Constant 3
651: TypePointer Function 13(float)
668: TypePointer Output 29(fvec4)
5139: 668(ptr) Variable Output
5663: 8 Function None 1282
25029: Label
4902: 666(ptr) Variable Function
10645: 667(ptr) AccessChain 3608 2574
8181: 29(fvec4) Load 10645
21370: 667(ptr) AccessChain 3608 2574
11355: 29(fvec4) Load 21370
23084: 29(fvec4) FAdd 8181 11355
Store 4902 23084
21218: 24(fvec3) Load 4957
13695: 29(fvec4) Load 4902
23883: 24(fvec3) VectorShuffle 13695 13695 0 1 2
15591: 24(fvec3) FAdd 23883 21218
17086: 29(fvec4) Load 4902
7051: 29(fvec4) VectorShuffle 17086 15591 4 5 6 3
Store 4902 7051
18282: 650(ptr) AccessChain 4339 2607
7372: 13(float) Load 18282
21371: 651(ptr) AccessChain 4902 2579
11412: 13(float) Load 21371
22584: 13(float) FAdd 11412 7372
17318: 651(ptr) AccessChain 4902 2579
Store 17318 22584
17934: 29(fvec4) Load 4902
Store 5139 17934
Return
FunctionEnd

View File

@ -0,0 +1,80 @@
remap.uniformarray.none.frag
Linked fragment stage:
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 53
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 14 25 35 47
ExecutionMode 4 OriginUpperLeft
Source GLSL 140
Name 4 "main"
Name 9 "texColor"
Name 14 "color"
Name 25 "inColor"
Name 35 "alpha"
Name 47 "gl_FragColor"
Name 52 "texSampler2D"
Decorate 52(texSampler2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Function 7(fvec4)
10: TypeInt 32 0
11: 10(int) Constant 6
12: TypeArray 7(fvec4) 11
13: TypePointer Input 12
14(color): 13(ptr) Variable Input
15: TypeInt 32 1
16: 15(int) Constant 1
17: TypePointer Input 7(fvec4)
23: TypeVector 6(float) 3
24: TypePointer Input 23(fvec3)
25(inColor): 24(ptr) Variable Input
32: 10(int) Constant 16
33: TypeArray 6(float) 32
34: TypePointer Input 33
35(alpha): 34(ptr) Variable Input
36: 15(int) Constant 12
37: TypePointer Input 6(float)
40: 10(int) Constant 3
41: TypePointer Function 6(float)
46: TypePointer Output 7(fvec4)
47(gl_FragColor): 46(ptr) Variable Output
49: TypeImage 6(float) 2D sampled format:Unknown
50: TypeSampledImage 49
51: TypePointer UniformConstant 50
52(texSampler2D): 51(ptr) Variable UniformConstant
4(main): 2 Function None 3
5: Label
9(texColor): 8(ptr) Variable Function
18: 17(ptr) AccessChain 14(color) 16
19: 7(fvec4) Load 18
20: 17(ptr) AccessChain 14(color) 16
21: 7(fvec4) Load 20
22: 7(fvec4) FAdd 19 21
Store 9(texColor) 22
26: 23(fvec3) Load 25(inColor)
27: 7(fvec4) Load 9(texColor)
28: 23(fvec3) VectorShuffle 27 27 0 1 2
29: 23(fvec3) FAdd 28 26
30: 7(fvec4) Load 9(texColor)
31: 7(fvec4) VectorShuffle 30 29 4 5 6 3
Store 9(texColor) 31
38: 37(ptr) AccessChain 35(alpha) 36
39: 6(float) Load 38
42: 41(ptr) AccessChain 9(texColor) 40
43: 6(float) Load 42
44: 6(float) FAdd 43 39
45: 41(ptr) AccessChain 9(texColor) 40
Store 45 44
48: 7(fvec4) Load 9(texColor)
Store 47(gl_FragColor) 48
Return
FunctionEnd

View File

@ -0,0 +1,11 @@
#version 450
in float inf;
out vec4 outf4;
vec3 dead_fn() { return vec3(0); }
void main()
{
outf4 = vec4(inf);
}

View File

@ -0,0 +1,11 @@
#version 450
in float inf;
out vec4 outf4;
vec3 dead_fn() { return vec3(0); }
void main()
{
outf4 = vec4(inf);
}

View File

@ -0,0 +1,11 @@
#version 450
in float inf;
out vec4 outf4;
vec3 dead_fn() { return vec3(0); }
void main()
{
outf4 = vec4(inf);
}

View File

@ -0,0 +1,11 @@
#version 450
in float inf;
out vec4 outf4;
vec3 dead_fn() { return vec3(0); }
void main()
{
outf4 = vec4(inf);
}

View File

@ -0,0 +1,90 @@
SamplerState g_sSamp : register(s0);
uniform sampler2D g_sSamp2d
{
AddressU = MIRROR;
AddressV = WRAP;
MinLOD = 0;
MaxLOD = 10;
MaxAnisotropy = 2;
MipLodBias = 0.2;
}, g_sSamp2D_b;
Texture1D g_tTex1df4a : register(t1);
uniform Texture1D <float4> g_tTex1df4 : register(t0);
Texture1D <int4> g_tTex1di4;
Texture1D <uint4> g_tTex1du4;
Texture2D <float4> g_tTex2df4;
Texture2D <int4> g_tTex2di4;
Texture2D <uint4> g_tTex2du4;
Texture3D <float4> g_tTex3df4;
Texture3D <int4> g_tTex3di4;
Texture3D <uint4> g_tTex3du4;
TextureCube <float4> g_tTexcdf4;
TextureCube <int4> g_tTexcdi4;
TextureCube <uint4> g_tTexcdu4;
struct MemberTest
{
int Sample; // in HLSL, method names are valid struct members.
int CalculateLevelOfDetail; // ...
int CalculateLevelOfDetailUnclamped; // ...
int Gather; // ...
int GetDimensions; // ...
int GetSamplePosition; // ...
int Load; // ...
int SampleBias; // ...
int SampleCmp; // ...
int SampleCmpLevelZero; // ...
int SampleGrad; // ...
int SampleLevel; // ...
};
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
MemberTest mtest;
mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members.
mtest.CalculateLevelOfDetailUnclamped = 1; // ...
mtest.Gather = 1; // ...
mtest.GetDimensions = 1; // ...
mtest.GetSamplePosition = 1; // ...
mtest.Load = 1; // ...
mtest.Sample = 1; // ...
mtest.SampleBias = 1; // ...
mtest.SampleCmp = 1; // ...
mtest.SampleCmpLevelZero = 1; // ...
mtest.SampleGrad = 1; // ...
mtest.SampleLevel = 1; // ...
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1);
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2);
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3);
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6));
float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

View File

@ -0,0 +1,90 @@
SamplerState g_sSamp : register(s0);
uniform sampler2D g_sSamp2d
{
AddressU = MIRROR;
AddressV = WRAP;
MinLOD = 0;
MaxLOD = 10;
MaxAnisotropy = 2;
MipLodBias = 0.2;
}, g_sSamp2D_b;
Texture1D g_tTex1df4a : register(t1);
uniform Texture1D <float4> g_tTex1df4 : register(t0);
Texture1D <int4> g_tTex1di4;
Texture1D <uint4> g_tTex1du4;
Texture2D <float4> g_tTex2df4;
Texture2D <int4> g_tTex2di4;
Texture2D <uint4> g_tTex2du4;
Texture3D <float4> g_tTex3df4;
Texture3D <int4> g_tTex3di4;
Texture3D <uint4> g_tTex3du4;
TextureCube <float4> g_tTexcdf4;
TextureCube <int4> g_tTexcdi4;
TextureCube <uint4> g_tTexcdu4;
struct MemberTest
{
int Sample; // in HLSL, method names are valid struct members.
int CalculateLevelOfDetail; // ...
int CalculateLevelOfDetailUnclamped; // ...
int Gather; // ...
int GetDimensions; // ...
int GetSamplePosition; // ...
int Load; // ...
int SampleBias; // ...
int SampleCmp; // ...
int SampleCmpLevelZero; // ...
int SampleGrad; // ...
int SampleLevel; // ...
};
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
MemberTest mtest;
mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members.
mtest.CalculateLevelOfDetailUnclamped = 1; // ...
mtest.Gather = 1; // ...
mtest.GetDimensions = 1; // ...
mtest.GetSamplePosition = 1; // ...
mtest.Load = 1; // ...
mtest.Sample = 1; // ...
mtest.SampleBias = 1; // ...
mtest.SampleCmp = 1; // ...
mtest.SampleCmpLevelZero = 1; // ...
mtest.SampleGrad = 1; // ...
mtest.SampleLevel = 1; // ...
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1);
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2);
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3);
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6));
float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

View File

@ -0,0 +1,90 @@
SamplerState g_sSamp : register(s0);
uniform sampler2D g_sSamp2d
{
AddressU = MIRROR;
AddressV = WRAP;
MinLOD = 0;
MaxLOD = 10;
MaxAnisotropy = 2;
MipLodBias = 0.2;
}, g_sSamp2D_b;
Texture1D g_tTex1df4a : register(t1);
uniform Texture1D <float4> g_tTex1df4 : register(t0);
Texture1D <int4> g_tTex1di4;
Texture1D <uint4> g_tTex1du4;
Texture2D <float4> g_tTex2df4;
Texture2D <int4> g_tTex2di4;
Texture2D <uint4> g_tTex2du4;
Texture3D <float4> g_tTex3df4;
Texture3D <int4> g_tTex3di4;
Texture3D <uint4> g_tTex3du4;
TextureCube <float4> g_tTexcdf4;
TextureCube <int4> g_tTexcdi4;
TextureCube <uint4> g_tTexcdu4;
struct MemberTest
{
int Sample; // in HLSL, method names are valid struct members.
int CalculateLevelOfDetail; // ...
int CalculateLevelOfDetailUnclamped; // ...
int Gather; // ...
int GetDimensions; // ...
int GetSamplePosition; // ...
int Load; // ...
int SampleBias; // ...
int SampleCmp; // ...
int SampleCmpLevelZero; // ...
int SampleGrad; // ...
int SampleLevel; // ...
};
struct PS_OUTPUT
{
float4 Color : SV_Target0;
float Depth : SV_Depth;
};
PS_OUTPUT main()
{
PS_OUTPUT psout;
MemberTest mtest;
mtest.CalculateLevelOfDetail = 1; // in HLSL, method names are valid struct members.
mtest.CalculateLevelOfDetailUnclamped = 1; // ...
mtest.Gather = 1; // ...
mtest.GetDimensions = 1; // ...
mtest.GetSamplePosition = 1; // ...
mtest.Load = 1; // ...
mtest.Sample = 1; // ...
mtest.SampleBias = 1; // ...
mtest.SampleCmp = 1; // ...
mtest.SampleCmpLevelZero = 1; // ...
mtest.SampleGrad = 1; // ...
mtest.SampleLevel = 1; // ...
float4 txval10 = g_tTex1df4 . Sample(g_sSamp, 0.1);
int4 txval11 = g_tTex1di4 . Sample(g_sSamp, 0.2);
uint4 txval12 = g_tTex1du4 . Sample(g_sSamp, 0.3);
float4 txval20 = g_tTex2df4 . Sample(g_sSamp, float2(0.1, 0.2));
int4 txval21 = g_tTex2di4 . Sample(g_sSamp, float2(0.3, 0.4));
uint4 txval22 = g_tTex2du4 . Sample(g_sSamp, float2(0.5, 0.6));
float4 txval30 = g_tTex3df4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval31 = g_tTex3di4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval32 = g_tTex3du4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
float4 txval40 = g_tTexcdf4 . Sample(g_sSamp, float3(0.1, 0.2, 0.3));
int4 txval41 = g_tTexcdi4 . Sample(g_sSamp, float3(0.4, 0.5, 0.6));
uint4 txval42 = g_tTexcdu4 . Sample(g_sSamp, float3(0.7, 0.8, 0.9));
psout.Color = 1.0;
psout.Depth = 1.0;
return psout;
}

View File

@ -0,0 +1,47 @@
float4 main(float4 input) : COLOR0
{
vector r00 = float4(1,2,3,4); // vector means float4
float4 r01 = vector(2,3,4,5); // vector means float4
vector<bool, 1> r12 = bool1(false);
vector<int, 1> r13 = int1(1);
vector<float, 1> r14 = float1(1);
vector<double, 1> r15 = double1(1);
vector<uint, 1> r16 = uint1(1);
vector<bool, 2> r20 = bool2(false, true);
vector<int, 2> r21 = int2(1,2);
vector<float, 2> r22 = float2(1,2);
vector<double, 2> r23 = double2(1,2);
vector<uint, 2> r24 = uint2(1,2);
vector<bool, 3> r30 = bool3(false, true, true);
vector<int, 3> r31 = int3(1,2,3);
vector<float, 3> r32 = float3(1,2,3);
vector<double, 3> r33 = double3(1,2,3);
vector<uint, 3> r34 = uint3(1,2,3);
vector<bool, 4> r40 = bool4(false, true, true, false);
vector<int, 4> r41 = int4(1,2,3,4);
vector<float, 4> r42 = float4(1,2,3,4);
vector<double, 4> r43 = double4(1,2,3,4);
vector<uint, 4> r44 = uint4(1,2,3,4);
matrix r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4
float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4
// matrix<bool, 2, 3> r60 = bool2x3(false, true, false, true, false, true); // TODO:
matrix<float, 2, 3> r61 = float2x3(1,2,3,4,5,6);
matrix<float, 3, 2> r62 = float3x2(1,2,3,4,5,6);
// matrix<float, 4, 1> r63 = float4x1(1,2,3,4); // TODO:
// matrix<float, 1, 4> r64 = float1x4(1,2,3,4); // TODO:
matrix<float, 4, 2> r65 = float4x2(1,2,3,4,5,6,7,8);
matrix<float, 4, 3> r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12);
// TODO: bool mats
// TODO: int mats
return 0.0;
}

View File

@ -0,0 +1,47 @@
float4 main(float4 input) : COLOR0
{
vector r00 = float4(1,2,3,4); // vector means float4
float4 r01 = vector(2,3,4,5); // vector means float4
vector<bool, 1> r12 = bool1(false);
vector<int, 1> r13 = int1(1);
vector<float, 1> r14 = float1(1);
vector<double, 1> r15 = double1(1);
vector<uint, 1> r16 = uint1(1);
vector<bool, 2> r20 = bool2(false, true);
vector<int, 2> r21 = int2(1,2);
vector<float, 2> r22 = float2(1,2);
vector<double, 2> r23 = double2(1,2);
vector<uint, 2> r24 = uint2(1,2);
vector<bool, 3> r30 = bool3(false, true, true);
vector<int, 3> r31 = int3(1,2,3);
vector<float, 3> r32 = float3(1,2,3);
vector<double, 3> r33 = double3(1,2,3);
vector<uint, 3> r34 = uint3(1,2,3);
vector<bool, 4> r40 = bool4(false, true, true, false);
vector<int, 4> r41 = int4(1,2,3,4);
vector<float, 4> r42 = float4(1,2,3,4);
vector<double, 4> r43 = double4(1,2,3,4);
vector<uint, 4> r44 = uint4(1,2,3,4);
matrix r50 = float4x4(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4
float4x4 r51 = matrix(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15); // matrix means float4x4
// matrix<bool, 2, 3> r60 = bool2x3(false, true, false, true, false, true); // TODO:
matrix<float, 2, 3> r61 = float2x3(1,2,3,4,5,6);
matrix<float, 3, 2> r62 = float3x2(1,2,3,4,5,6);
// matrix<float, 4, 1> r63 = float4x1(1,2,3,4); // TODO:
// matrix<float, 1, 4> r64 = float1x4(1,2,3,4); // TODO:
matrix<float, 4, 2> r65 = float4x2(1,2,3,4,5,6,7,8);
matrix<float, 4, 3> r66 = float4x3(1,2,3,4,5,6,7,8,9,10,11,12);
// TODO: bool mats
// TODO: int mats
return 0.0;
}

View File

@ -0,0 +1,12 @@
#version 450
in float inf;
out vec4 outf4;
void main()
{
if (inf > 2.0)
outf4 = vec4(inf);
else
outf4 = vec4(inf + -.5);
}

12
Test/remap.if.none.frag Normal file
View File

@ -0,0 +1,12 @@
#version 450
in float inf;
out vec4 outf4;
void main()
{
if (inf > 2.0)
outf4 = vec4(inf);
else
outf4 = vec4(inf + -.5);
}

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1,29 @@
#version 450
in float inf;
in flat ivec4 ini4;
out vec4 outf4;
float Test1(int bound)
{
float r = 0;
for (int x=0; x<bound; ++x)
r += 0.5;
return r;
}
float Test2(int bound)
{
if (bound > 2)
return Test1(bound);
else
return float(bound * 2 +
ini4.y * ini4.z +
ini4.x);
}
void main()
{
outf4 = vec4(Test1(int(inf)) +
Test2(int(inf)));
}

View File

@ -0,0 +1,29 @@
#version 450
in float inf;
in flat ivec4 ini4;
out vec4 outf4;
float Test1(int bound)
{
float r = 0;
for (int x=0; x<bound; ++x)
r += 0.5;
return r;
}
float Test2(int bound)
{
if (bound > 2)
return Test1(bound);
else
return float(bound * 2 +
ini4.y * ini4.z +
ini4.x);
}
void main()
{
outf4 = vec4(Test1(int(inf)) +
Test2(int(inf)));
}

View File

@ -0,0 +1,30 @@
#version 450
out vec4 outf4;
in flat ivec4 ini4;
in float inf;
float Test1(int bound)
{
float r = 0;
for (int x=0; x<bound; ++x)
r += 0.5;
r += 0.2;
return r;
}
float Test2(int bound)
{
if (bound > 2) {
return Test1(bound * 2);
} else
return float(bound * 4 +
ini4.y * ini4.z +
ini4.x);
}
void main()
{
outf4 = vec4(Test1(int(inf)) +
Test2(int(inf)));
}

View File

@ -0,0 +1,30 @@
#version 450
out vec4 outf4;
in flat ivec4 ini4;
in float inf;
float Test1(int bound)
{
float r = 0;
for (int x=0; x<bound; ++x)
r += 0.5;
r += 0.2;
return r;
}
float Test2(int bound)
{
if (bound > 2) {
return Test1(bound * 2);
} else
return float(bound * 4 +
ini4.y * ini4.z +
ini4.x);
}
void main()
{
outf4 = vec4(Test1(int(inf)) +
Test2(int(inf)));
}

View File

@ -0,0 +1,16 @@
#version 450
precision highp float;
layout(location = 0) out mediump vec4 FragColor;
layout(location = 0) in vec4 in0;
void main()
{
switch(int(in0.w)) {
case 0: FragColor = vec4(in0.x + 0); break;
case 1: FragColor = vec4(in0.y + 1); break;
case 2: FragColor = vec4(in0.z + 2); break;
default: FragColor = vec4(-1);
}
}

View File

@ -0,0 +1,16 @@
#version 450
precision highp float;
layout(location = 0) out mediump vec4 FragColor;
layout(location = 0) in vec4 in0;
void main()
{
switch(int(in0.w)) {
case 0: FragColor = vec4(in0.x + 0); break;
case 1: FragColor = vec4(in0.y + 1); break;
case 2: FragColor = vec4(in0.z + 2); break;
default: FragColor = vec4(-1);
}
}

View File

@ -0,0 +1,17 @@
#version 140
uniform sampler2D texSampler2D;
in vec3 inColor;
in vec4 color[6];
in float alpha[16];
void main()
{
vec4 texColor = color[1] + color[1];
texColor.xyz += inColor;
texColor.a += alpha[12];
gl_FragColor = texColor;
}

View File

@ -0,0 +1,17 @@
#version 140
uniform sampler2D texSampler2D;
in vec3 inColor;
in vec4 color[6];
in float alpha[16];
void main()
{
vec4 texColor = color[1] + color[1];
texColor.xyz += inColor;
texColor.a += alpha[12];
gl_FragColor = texColor;
}

View File

@ -37,4 +37,37 @@ if (TARGET gmock)
glslang OSDependent OGLCompiler HLSL glslang glslang OSDependent OGLCompiler HLSL glslang
SPIRV glslang-default-resource-limits gmock) SPIRV glslang-default-resource-limits gmock)
add_test(NAME glslang-gtests COMMAND glslangtests) add_test(NAME glslang-gtests COMMAND glslangtests)
# -- Remapper tests
set(REMAPPER_TEST_SOURCES
# Framework related source files
${CMAKE_CURRENT_SOURCE_DIR}/Initializer.h
${CMAKE_CURRENT_SOURCE_DIR}/main.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Settings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/Settings.h
${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.cpp
${CMAKE_CURRENT_SOURCE_DIR}/TestFixture.h
# Test related source files
${CMAKE_CURRENT_SOURCE_DIR}/Remap.FromFile.cpp
)
add_executable(remappertests ${REMAPPER_TEST_SOURCES})
set_property(TARGET remappertests PROPERTY FOLDER tests)
glslang_set_link_args(remappertests)
install(TARGETS remappertests
RUNTIME DESTINATION bin)
target_compile_definitions(remappertests
PRIVATE GLSLANG_TEST_DIRECTORY="${CMAKE_CURRENT_SOURCE_DIR}/../Test")
target_include_directories(remappertests PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}
${PROJECT_SOURCE_DIR}
${gmock_SOURCE_DIR}/include
${gtest_SOURCE_DIR}/include)
target_link_libraries(remappertests PRIVATE
SPVRemapper
glslang OSDependent OGLCompiler HLSL glslang
SPIRV glslang-default-resource-limits gmock)
add_test(NAME remapper-gtests COMMAND remappertests)
endif() endif()

117
gtests/Remap.FromFile.cpp Normal file
View File

@ -0,0 +1,117 @@
//
// Copyright (C) 2016 LunarG, Inc.
//
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
//
// Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
//
// Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following
// disclaimer in the documentation and/or other materials provided
// with the distribution.
//
// Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
#include <gtest/gtest.h>
#include "TestFixture.h"
namespace glslangtest {
namespace {
struct RemapTestArgs {
const char* fileName;
const char* entryPoint;
Source sourceLanguage;
unsigned int remapOpts;
};
// We are using FileNameEntryPointPair objects as parameters for instantiating
// the template, so the global FileNameAsCustomTestSuffix() won't work since
// it assumes std::string as parameters. Thus, an overriding one here.
std::string FileNameAsCustomTestSuffix(
const ::testing::TestParamInfo<RemapTestArgs>& info) {
std::string name = info.param.fileName;
// A valid test case suffix cannot have '.' and '-' inside.
std::replace(name.begin(), name.end(), '.', '_');
std::replace(name.begin(), name.end(), '-', '_');
return name;
}
using RemapTest = GlslangTest<::testing::TestWithParam<RemapTestArgs>>;
// Remapping SPIR-V modules.
TEST_P(RemapTest, FromFile)
{
if (GetSuffix(GetParam().fileName) == "spv") {
loadFileRemapAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
GetParam().sourceLanguage,
Semantics::Vulkan,
Target::Spv,
GetParam().remapOpts);
} else {
loadFileCompileRemapAndCheck(GLSLANG_TEST_DIRECTORY, GetParam().fileName,
GetParam().sourceLanguage,
Semantics::Vulkan,
Target::Spv,
GetParam().entryPoint,
GetParam().remapOpts);
}
}
// clang-format off
INSTANTIATE_TEST_CASE_P(
ToSpirv, RemapTest,
::testing::ValuesIn(std::vector<RemapTestArgs>{
// GLSL remapper tests
// testname entry language remapper_options
{ "remap.basic.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.basic.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.basic.dcefunc.frag", "main", Source::GLSL, spv::spirvbin_t::DCE_FUNCS },
{ "remap.basic.strip.frag", "main", Source::GLSL, spv::spirvbin_t::STRIP },
{ "remap.switch.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.switch.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.literal64.none.spv", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.literal64.everything.spv", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.if.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.if.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.similar_1a.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.similar_1b.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.similar_1a.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.similar_1b.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.uniformarray.none.frag", "main", Source::GLSL, spv::spirvbin_t::NONE },
{ "remap.uniformarray.everything.frag", "main", Source::GLSL, spv::spirvbin_t::DO_EVERYTHING },
// HLSL remapper tests
{ "remap.hlsl.sample.basic.strip.frag", "main", Source::HLSL, spv::spirvbin_t::STRIP },
{ "remap.hlsl.sample.basic.everything.frag", "main", Source::HLSL, spv::spirvbin_t::DO_EVERYTHING },
{ "remap.hlsl.sample.basic.none.frag", "main", Source::HLSL, spv::spirvbin_t::NONE },
{ "remap.hlsl.templatetypes.none.frag", "main", Source::HLSL, spv::spirvbin_t::NONE },
{ "remap.hlsl.templatetypes.everything.frag", "main", Source::HLSL, spv::spirvbin_t::DO_EVERYTHING },
}),
FileNameAsCustomTestSuffix
);
// clang-format on
} // anonymous namespace
} // namespace glslangtest

View File

@ -116,6 +116,32 @@ std::pair<bool, std::string> ReadFile(const std::string& path)
return std::make_pair(false, ""); return std::make_pair(false, "");
} }
std::pair<bool, std::vector<std::uint32_t> > ReadSpvBinaryFile(const std::string& path)
{
std::ifstream fstream(path, std::fstream::in | std::fstream::binary);
if (!fstream)
return std::make_pair(false, std::vector<std::uint32_t>());
std::vector<std::uint32_t> contents;
// Reserve space (for efficiency, not for correctness)
fstream.seekg(0, fstream.end);
contents.reserve(size_t(fstream.tellg()) / sizeof(std::uint32_t));
fstream.seekg(0, fstream.beg);
// There is no istream iterator traversing by uint32_t, so we must loop.
while (!fstream.eof()) {
std::uint32_t inWord;
fstream.read((char *)&inWord, sizeof(inWord));
if (!fstream.eof())
contents.push_back(inWord);
}
return std::make_pair(true, contents); // hopefully, c++11 move semantics optimizes the copy away.
}
bool WriteFile(const std::string& path, const std::string& contents) bool WriteFile(const std::string& path, const std::string& contents)
{ {
std::ofstream fstream(path, std::ios::out); std::ofstream fstream(path, std::ios::out);

View File

@ -40,12 +40,14 @@
#include <sstream> #include <sstream>
#include <streambuf> #include <streambuf>
#include <tuple> #include <tuple>
#include <string>
#include <gtest/gtest.h> #include <gtest/gtest.h>
#include "SPIRV/GlslangToSpv.h" #include "SPIRV/GlslangToSpv.h"
#include "SPIRV/disassemble.h" #include "SPIRV/disassemble.h"
#include "SPIRV/doc.h" #include "SPIRV/doc.h"
#include "SPIRV/SPVRemapper.h"
#include "StandAlone/ResourceLimits.h" #include "StandAlone/ResourceLimits.h"
#include "glslang/Public/ShaderLang.h" #include "glslang/Public/ShaderLang.h"
@ -93,6 +95,7 @@ EShMessages DeriveOptions(Source, Semantics, Target);
// Reads the content of the file at the given |path|. On success, returns true // Reads the content of the file at the given |path|. On success, returns true
// and the contents; otherwise, returns false and an empty string. // and the contents; otherwise, returns false and an empty string.
std::pair<bool, std::string> ReadFile(const std::string& path); std::pair<bool, std::string> ReadFile(const std::string& path);
std::pair<bool, std::vector<std::uint32_t> > ReadSpvBinaryFile(const std::string& path);
// Writes the given |contents| into the file at the given |path|. Returns true // Writes the given |contents| into the file at the given |path|. Returns true
// on successful output. // on successful output.
@ -128,6 +131,16 @@ public:
ASSERT_TRUE(fileReadOk) << "Cannot open " << tag << " file: " << path; ASSERT_TRUE(fileReadOk) << "Cannot open " << tag << " file: " << path;
} }
// Tries to load the contents from the file at the given |path|. On success,
// writes the contents into |contents|. On failure, errors out.
void tryLoadSpvFile(const std::string& path, const std::string& tag,
std::vector<uint32_t>& contents)
{
bool fileReadOk;
std::tie(fileReadOk, contents) = ReadSpvBinaryFile(path);
ASSERT_TRUE(fileReadOk) << "Cannot open " << tag << " file: " << path;
}
// Checks the equality of |expected| and |real|. If they are not equal, // Checks the equality of |expected| and |real|. If they are not equal,
// write |real| to the given file named as |fname| if update mode is on. // write |real| to the given file named as |fname| if update mode is on.
void checkEqAndUpdateIfRequested(const std::string& expected, void checkEqAndUpdateIfRequested(const std::string& expected,
@ -221,6 +234,68 @@ public:
} }
} }
// This is like compileAndLink but with remapping of the SPV binary
// through spirvbin_t::remap(). While technically this could be merged
// with compileAndLink() above (with the remap step optionally being a no-op)
// it is given separately here for ease of future extraction.
GlslangResult compileLinkRemap(
const std::string shaderName, const std::string& code,
const std::string& entryPointName, EShMessages controls,
const unsigned int remapOptions = spv::spirvbin_t::NONE)
{
const EShLanguage kind = GetShaderStage(GetSuffix(shaderName));
glslang::TShader shader(kind);
bool success = compile(&shader, code, entryPointName, controls);
glslang::TProgram program;
program.addShader(&shader);
success &= program.link(controls);
spv::SpvBuildLogger logger;
if (success && (controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary;
glslang::GlslangToSpv(*program.getIntermediate(kind),
spirv_binary, &logger);
spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
program.getInfoLog(), program.getInfoDebugLog(),
logger.getAllMessages(), disassembly_stream.str()};
} else {
return {{{shaderName, shader.getInfoLog(), shader.getInfoDebugLog()},},
program.getInfoLog(), program.getInfoDebugLog(), "", ""};
}
}
// remap the binary in 'code' with the options in remapOptions
GlslangResult remap(
const std::string shaderName, const std::vector<uint32_t>& code,
EShMessages controls,
const unsigned int remapOptions = spv::spirvbin_t::NONE)
{
if ((controls & EShMsgSpvRules)) {
std::vector<uint32_t> spirv_binary(code); // scratch copy
spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions);
std::ostringstream disassembly_stream;
spv::Parameterize();
spv::Disassemble(disassembly_stream, spirv_binary);
return {{{shaderName, "", ""},},
"", "",
"", disassembly_stream.str()};
} else {
return {{{shaderName, "", ""},}, "", "", "", ""};
}
}
void outputResultToStream(std::ostringstream* stream, void outputResultToStream(std::ostringstream* stream,
const GlslangResult& result, const GlslangResult& result,
EShMessages controls) EShMessages controls)
@ -272,6 +347,60 @@ public:
expectedOutputFname); expectedOutputFname);
} }
void loadFileCompileRemapAndCheck(const std::string& testDir,
const std::string& testName,
Source source,
Semantics semantics,
Target target,
const std::string& entryPointName="",
const unsigned int remapOptions = spv::spirvbin_t::NONE)
{
const std::string inputFname = testDir + "/" + testName;
const std::string expectedOutputFname =
testDir + "/baseResults/" + testName + ".out";
std::string input, expectedOutput;
tryLoadFile(inputFname, "input", &input);
tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
const EShMessages controls = DeriveOptions(source, semantics, target);
GlslangResult result = compileLinkRemap(testName, input, entryPointName, controls, remapOptions);
// Generate the hybrid output in the way of glslangValidator.
std::ostringstream stream;
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
expectedOutputFname);
}
void loadFileRemapAndCheck(const std::string& testDir,
const std::string& testName,
Source source,
Semantics semantics,
Target target,
const unsigned int remapOptions = spv::spirvbin_t::NONE)
{
const std::string inputFname = testDir + "/" + testName;
const std::string expectedOutputFname =
testDir + "/baseResults/" + testName + ".out";
std::vector<std::uint32_t> input;
std::string expectedOutput;
tryLoadSpvFile(inputFname, "input", input);
tryLoadFile(expectedOutputFname, "expected output", &expectedOutput);
const EShMessages controls = DeriveOptions(source, semantics, target);
GlslangResult result = remap(testName, input, controls, remapOptions);
// Generate the hybrid output in the way of glslangValidator.
std::ostringstream stream;
outputResultToStream(&stream, result, controls);
checkEqAndUpdateIfRequested(expectedOutput, stream.str(),
expectedOutputFname);
}
// Preprocesses the given |source| code. On success, returns true, the // Preprocesses the given |source| code. On success, returns true, the
// preprocessed shader, and warning messages. Otherwise, returns false, an // preprocessed shader, and warning messages. Otherwise, returns false, an
// empty string, and error messages. // empty string, and error messages.