Updated glslang.

This commit is contained in:
Branimir Karadžić
2017-05-27 09:40:00 -07:00
parent 21872101f2
commit 5c8c145fd8
59 changed files with 2104 additions and 694 deletions

View File

@@ -1528,6 +1528,33 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
case glslang::EOpConstructDMat4x2:
case glslang::EOpConstructDMat4x3:
case glslang::EOpConstructDMat4x4:
case glslang::EOpConstructIMat2x2:
case glslang::EOpConstructIMat2x3:
case glslang::EOpConstructIMat2x4:
case glslang::EOpConstructIMat3x2:
case glslang::EOpConstructIMat3x3:
case glslang::EOpConstructIMat3x4:
case glslang::EOpConstructIMat4x2:
case glslang::EOpConstructIMat4x3:
case glslang::EOpConstructIMat4x4:
case glslang::EOpConstructUMat2x2:
case glslang::EOpConstructUMat2x3:
case glslang::EOpConstructUMat2x4:
case glslang::EOpConstructUMat3x2:
case glslang::EOpConstructUMat3x3:
case glslang::EOpConstructUMat3x4:
case glslang::EOpConstructUMat4x2:
case glslang::EOpConstructUMat4x3:
case glslang::EOpConstructUMat4x4:
case glslang::EOpConstructBMat2x2:
case glslang::EOpConstructBMat2x3:
case glslang::EOpConstructBMat2x4:
case glslang::EOpConstructBMat3x2:
case glslang::EOpConstructBMat3x3:
case glslang::EOpConstructBMat3x4:
case glslang::EOpConstructBMat4x2:
case glslang::EOpConstructBMat4x3:
case glslang::EOpConstructBMat4x4:
#ifdef AMD_EXTENSIONS
case glslang::EOpConstructF16Mat2x2:
case glslang::EOpConstructF16Mat2x3:
@@ -2591,19 +2618,24 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I
// Conversion for bool
spv::Id boolType = builder.makeBoolType();
if (nominalTypeId != boolType) {
// keep these outside arguments, for determinant order-of-evaluation
spv::Id one = builder.makeUintConstant(1);
spv::Id zero = builder.makeUintConstant(0);
spv::Id one = builder.makeUintConstant(1);
rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
}
} else if (builder.getTypeId(rvalue) != boolType)
rvalue = builder.createBinOp(spv::OpINotEqual, boolType, rvalue, builder.makeUintConstant(0));
} else if (builder.isVectorType(nominalTypeId)) {
// Conversion for bvec
int vecSize = builder.getNumTypeComponents(nominalTypeId);
spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize);
if (nominalTypeId != bvecType) {
// keep these outside arguments, for determinant order-of-evaluation
spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
spv::Id zero = makeSmearedConstant(builder.makeUintConstant(0), vecSize);
spv::Id one = makeSmearedConstant(builder.makeUintConstant(1), vecSize);
rvalue = builder.createTriOp(spv::OpSelect, nominalTypeId, rvalue, one, zero);
}
} else if (builder.getTypeId(rvalue) != bvecType)
rvalue = builder.createBinOp(spv::OpINotEqual, bvecType, rvalue,
makeSmearedConstant(builder.makeUintConstant(0), vecSize));
}
}
@@ -5356,13 +5388,18 @@ bool TGlslangToSpvTraverser::isTrivialLeaf(const glslang::TIntermTyped* node)
}
// A node is trivial if it is a single operation with no side effects.
// Error on the side of saying non-trivial.
// HLSL (and/or vectors) are always trivial, as it does not short circuit.
// Otherwise, error on the side of saying non-trivial.
// Return true if trivial.
bool TGlslangToSpvTraverser::isTrivial(const glslang::TIntermTyped* node)
{
if (node == nullptr)
return false;
// count non scalars as trivial, as well as anything coming from HLSL
if (! node->getType().isScalarOrVec1() || glslangIntermediate->getSource() == glslang::EShSourceHlsl)
return true;
// symbols and constants are trivial
if (isTrivialLeaf(node))
return true;

View File

@@ -0,0 +1,694 @@
hlsl.constructimat.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @main( ( temp int)
0:2 Function Parameters:
0:? Sequence
0:6 Sequence
0:6 move second child to first child ( temp 4X4 matrix of int)
0:6 'var443' ( temp 4X4 matrix of int)
0:6 Constant:
0:6 0 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 1 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:7 Sequence
0:7 move second child to first child ( temp 4X4 matrix of int)
0:7 'var444' ( temp 4X4 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:11 Sequence
0:11 move second child to first child ( temp 4X2 matrix of int)
0:11 'var423' ( temp 4X2 matrix of int)
0:11 Constant:
0:11 0 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 0 (const int)
0:11 0 (const int)
0:11 0 (const int)
0:12 Sequence
0:12 move second child to first child ( temp 4X2 matrix of int)
0:12 'var424' ( temp 4X2 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:16 Sequence
0:16 move second child to first child ( temp 3X2 matrix of int)
0:16 'var323' ( temp 3X2 matrix of int)
0:16 Constant:
0:16 0 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 0 (const int)
0:17 Sequence
0:17 move second child to first child ( temp 3X2 matrix of int)
0:17 'var234' ( temp 3X2 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:22 Sequence
0:22 move second child to first child ( temp 4X4 matrix of uint)
0:22 'uvar443' ( temp 4X4 matrix of uint)
0:22 Constant:
0:22 0 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 1 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:23 Sequence
0:23 move second child to first child ( temp 4X4 matrix of uint)
0:23 'uvar444' ( temp 4X4 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:27 Sequence
0:27 move second child to first child ( temp 4X2 matrix of uint)
0:27 'uvar423' ( temp 4X2 matrix of uint)
0:27 Constant:
0:27 0 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 0 (const uint)
0:27 0 (const uint)
0:27 0 (const uint)
0:28 Sequence
0:28 move second child to first child ( temp 4X2 matrix of uint)
0:28 'uvar424' ( temp 4X2 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:32 Sequence
0:32 move second child to first child ( temp 3X2 matrix of uint)
0:32 'uvar323' ( temp 3X2 matrix of uint)
0:32 Constant:
0:32 0 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 0 (const uint)
0:33 Sequence
0:33 move second child to first child ( temp 3X2 matrix of uint)
0:33 'uvar234' ( temp 3X2 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:38 Sequence
0:38 move second child to first child ( temp 4X4 matrix of bool)
0:38 'bvar443' ( temp 4X4 matrix of bool)
0:38 Constant:
0:38 false (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 true (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:39 Sequence
0:39 move second child to first child ( temp 4X4 matrix of bool)
0:39 'bvar444' ( temp 4X4 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:43 Sequence
0:43 move second child to first child ( temp 4X2 matrix of bool)
0:43 'bvar423' ( temp 4X2 matrix of bool)
0:43 Constant:
0:43 false (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 false (const bool)
0:43 false (const bool)
0:43 false (const bool)
0:44 Sequence
0:44 move second child to first child ( temp 4X2 matrix of bool)
0:44 'bvar424' ( temp 4X2 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:48 Sequence
0:48 move second child to first child ( temp 3X2 matrix of bool)
0:48 'bvar323' ( temp 3X2 matrix of bool)
0:48 Constant:
0:48 false (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 false (const bool)
0:49 Sequence
0:49 move second child to first child ( temp 3X2 matrix of bool)
0:49 'bvar234' ( temp 3X2 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:51 Branch: Return with expression
0:51 Constant:
0:51 0 (const int)
0:2 Function Definition: main( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:2 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:2 Function Definition: @main( ( temp int)
0:2 Function Parameters:
0:? Sequence
0:6 Sequence
0:6 move second child to first child ( temp 4X4 matrix of int)
0:6 'var443' ( temp 4X4 matrix of int)
0:6 Constant:
0:6 0 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 1 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 1 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:6 0 (const int)
0:7 Sequence
0:7 move second child to first child ( temp 4X4 matrix of int)
0:7 'var444' ( temp 4X4 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:11 Sequence
0:11 move second child to first child ( temp 4X2 matrix of int)
0:11 'var423' ( temp 4X2 matrix of int)
0:11 Constant:
0:11 0 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 1 (const int)
0:11 0 (const int)
0:11 0 (const int)
0:11 0 (const int)
0:12 Sequence
0:12 move second child to first child ( temp 4X2 matrix of int)
0:12 'var424' ( temp 4X2 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:? 0 (const int)
0:16 Sequence
0:16 move second child to first child ( temp 3X2 matrix of int)
0:16 'var323' ( temp 3X2 matrix of int)
0:16 Constant:
0:16 0 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 1 (const int)
0:16 0 (const int)
0:17 Sequence
0:17 move second child to first child ( temp 3X2 matrix of int)
0:17 'var234' ( temp 3X2 matrix of int)
0:? Constant:
0:? 0 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 1 (const int)
0:? 0 (const int)
0:22 Sequence
0:22 move second child to first child ( temp 4X4 matrix of uint)
0:22 'uvar443' ( temp 4X4 matrix of uint)
0:22 Constant:
0:22 0 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 1 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 1 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:22 0 (const uint)
0:23 Sequence
0:23 move second child to first child ( temp 4X4 matrix of uint)
0:23 'uvar444' ( temp 4X4 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:27 Sequence
0:27 move second child to first child ( temp 4X2 matrix of uint)
0:27 'uvar423' ( temp 4X2 matrix of uint)
0:27 Constant:
0:27 0 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 1 (const uint)
0:27 0 (const uint)
0:27 0 (const uint)
0:27 0 (const uint)
0:28 Sequence
0:28 move second child to first child ( temp 4X2 matrix of uint)
0:28 'uvar424' ( temp 4X2 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:? 0 (const uint)
0:32 Sequence
0:32 move second child to first child ( temp 3X2 matrix of uint)
0:32 'uvar323' ( temp 3X2 matrix of uint)
0:32 Constant:
0:32 0 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 1 (const uint)
0:32 0 (const uint)
0:33 Sequence
0:33 move second child to first child ( temp 3X2 matrix of uint)
0:33 'uvar234' ( temp 3X2 matrix of uint)
0:? Constant:
0:? 0 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 1 (const uint)
0:? 0 (const uint)
0:38 Sequence
0:38 move second child to first child ( temp 4X4 matrix of bool)
0:38 'bvar443' ( temp 4X4 matrix of bool)
0:38 Constant:
0:38 false (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 true (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 true (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:38 false (const bool)
0:39 Sequence
0:39 move second child to first child ( temp 4X4 matrix of bool)
0:39 'bvar444' ( temp 4X4 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:43 Sequence
0:43 move second child to first child ( temp 4X2 matrix of bool)
0:43 'bvar423' ( temp 4X2 matrix of bool)
0:43 Constant:
0:43 false (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 true (const bool)
0:43 false (const bool)
0:43 false (const bool)
0:43 false (const bool)
0:44 Sequence
0:44 move second child to first child ( temp 4X2 matrix of bool)
0:44 'bvar424' ( temp 4X2 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:? false (const bool)
0:? false (const bool)
0:48 Sequence
0:48 move second child to first child ( temp 3X2 matrix of bool)
0:48 'bvar323' ( temp 3X2 matrix of bool)
0:48 Constant:
0:48 false (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 true (const bool)
0:48 false (const bool)
0:49 Sequence
0:49 move second child to first child ( temp 3X2 matrix of bool)
0:49 'bvar234' ( temp 3X2 matrix of bool)
0:? Constant:
0:? false (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? true (const bool)
0:? false (const bool)
0:51 Branch: Return with expression
0:51 Constant:
0:51 0 (const int)
0:2 Function Definition: main( ( temp void)
0:2 Function Parameters:
0:? Sequence
0:2 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:2 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 98
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 96
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 8 "@main("
Name 13 "var443"
Name 21 "var444"
Name 25 "var423"
Name 31 "var424"
Name 34 "var323"
Name 36 "var234"
Name 41 "uvar443"
Name 49 "uvar444"
Name 53 "uvar423"
Name 59 "uvar424"
Name 62 "uvar323"
Name 64 "uvar234"
Name 69 "bvar443"
Name 77 "bvar444"
Name 81 "bvar423"
Name 87 "bvar424"
Name 90 "bvar323"
Name 92 "bvar234"
Name 96 "@entryPointOutput"
Decorate 96(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1
7: TypeFunction 6(int)
10: TypeVector 6(int) 4
11: TypeMatrix 10(ivec4) 4
12: TypePointer Function 11
14: 6(int) Constant 0
15: 6(int) Constant 1
16: 10(ivec4) ConstantComposite 14 15 14 14
17: 10(ivec4) ConstantComposite 15 15 14 14
18: 10(ivec4) ConstantComposite 15 14 14 14
19: 10(ivec4) ConstantComposite 14 14 14 14
20: 11 ConstantComposite 16 17 18 19
22: TypeVector 6(int) 2
23: TypeMatrix 22(ivec2) 4
24: TypePointer Function 23
26: 22(ivec2) ConstantComposite 14 15
27: 22(ivec2) ConstantComposite 15 15
28: 22(ivec2) ConstantComposite 15 14
29: 22(ivec2) ConstantComposite 14 14
30: 23 ConstantComposite 26 27 28 29
32: TypeMatrix 22(ivec2) 3
33: TypePointer Function 32
35: 32 ConstantComposite 26 27 28
37: TypeInt 32 0
38: TypeVector 37(int) 4
39: TypeMatrix 38(ivec4) 4
40: TypePointer Function 39
42: 37(int) Constant 0
43: 37(int) Constant 1
44: 38(ivec4) ConstantComposite 42 43 42 42
45: 38(ivec4) ConstantComposite 43 43 42 42
46: 38(ivec4) ConstantComposite 43 42 42 42
47: 38(ivec4) ConstantComposite 42 42 42 42
48: 39 ConstantComposite 44 45 46 47
50: TypeVector 37(int) 2
51: TypeMatrix 50(ivec2) 4
52: TypePointer Function 51
54: 50(ivec2) ConstantComposite 42 43
55: 50(ivec2) ConstantComposite 43 43
56: 50(ivec2) ConstantComposite 43 42
57: 50(ivec2) ConstantComposite 42 42
58: 51 ConstantComposite 54 55 56 57
60: TypeMatrix 50(ivec2) 3
61: TypePointer Function 60
63: 60 ConstantComposite 54 55 56
65: TypeBool
66: TypeVector 65(bool) 4
67: TypeMatrix 66(bvec4) 4
68: TypePointer Function 67
70: 65(bool) ConstantFalse
71: 65(bool) ConstantTrue
72: 66(bvec4) ConstantComposite 70 71 70 70
73: 66(bvec4) ConstantComposite 71 71 70 70
74: 66(bvec4) ConstantComposite 71 70 70 70
75: 66(bvec4) ConstantComposite 70 70 70 70
76: 67 ConstantComposite 72 73 74 75
78: TypeVector 65(bool) 2
79: TypeMatrix 78(bvec2) 4
80: TypePointer Function 79
82: 78(bvec2) ConstantComposite 70 71
83: 78(bvec2) ConstantComposite 71 71
84: 78(bvec2) ConstantComposite 71 70
85: 78(bvec2) ConstantComposite 70 70
86: 79 ConstantComposite 82 83 84 85
88: TypeMatrix 78(bvec2) 3
89: TypePointer Function 88
91: 88 ConstantComposite 82 83 84
95: TypePointer Output 6(int)
96(@entryPointOutput): 95(ptr) Variable Output
4(main): 2 Function None 3
5: Label
97: 6(int) FunctionCall 8(@main()
Store 96(@entryPointOutput) 97
Return
FunctionEnd
8(@main(): 6(int) Function None 7
9: Label
13(var443): 12(ptr) Variable Function
21(var444): 12(ptr) Variable Function
25(var423): 24(ptr) Variable Function
31(var424): 24(ptr) Variable Function
34(var323): 33(ptr) Variable Function
36(var234): 33(ptr) Variable Function
41(uvar443): 40(ptr) Variable Function
49(uvar444): 40(ptr) Variable Function
53(uvar423): 52(ptr) Variable Function
59(uvar424): 52(ptr) Variable Function
62(uvar323): 61(ptr) Variable Function
64(uvar234): 61(ptr) Variable Function
69(bvar443): 68(ptr) Variable Function
77(bvar444): 68(ptr) Variable Function
81(bvar423): 80(ptr) Variable Function
87(bvar424): 80(ptr) Variable Function
90(bvar323): 89(ptr) Variable Function
92(bvar234): 89(ptr) Variable Function
Store 13(var443) 20
Store 21(var444) 20
Store 25(var423) 30
Store 31(var424) 30
Store 34(var323) 35
Store 36(var234) 35
Store 41(uvar443) 48
Store 49(uvar444) 48
Store 53(uvar423) 58
Store 59(uvar424) 58
Store 62(uvar323) 63
Store 64(uvar234) 63
Store 69(bvar443) 76
Store 77(bvar444) 76
Store 81(bvar423) 86
Store 87(bvar424) 86
Store 90(bvar323) 91
Store 92(bvar234) 91
ReturnValue 14
FunctionEnd

View File

@@ -0,0 +1,119 @@
hlsl.function.frag
ERROR: 0:24: 'fun1' : unknown variable
ERROR: 0:24: 'return' : type does not match, or is not convertible to, the function's return type
ERROR: 2 compilation errors. No code generated.
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:2 Function Definition: fun0( ( temp 4-component vector of float)
0:2 Function Parameters:
0:? Sequence
0:3 Branch: Return with expression
0:3 Constant:
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:7 Function Definition: fun2(vf4; ( temp uint)
0:7 Function Parameters:
0:7 'col' ( in 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 7 (const uint)
0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:12 Function Parameters:
0:12 'id1' ( in uint)
0:12 'id2' ( in uint)
0:? Sequence
0:13 Branch: Return with expression
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 component-wise multiply ( temp uint)
0:13 'id1' ( in uint)
0:13 'id2' ( in uint)
0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:17 Function Parameters:
0:17 'index' ( in int)
0:? Sequence
0:18 Sequence
0:18 move second child to first child ( temp uint)
0:18 'entityId' ( temp uint)
0:18 Function Call: fun2(vf4; ( temp uint)
0:18 Function Call: fun0( ( temp 4-component vector of float)
0:19 Branch: Return with expression
0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:19 'entityId' ( temp uint)
0:19 'entityId' ( temp uint)
0:23 Function Definition: @main( ( temp int)
0:23 Function Parameters:
0:23 Function Definition: main( ( temp void)
0:23 Function Parameters:
0:? Sequence
0:23 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:23 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
ERROR: node is still EOpNull!
0:2 Function Definition: fun0( ( temp 4-component vector of float)
0:2 Function Parameters:
0:? Sequence
0:3 Branch: Return with expression
0:3 Constant:
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:3 1.000000
0:7 Function Definition: fun2(vf4; ( temp uint)
0:7 Function Parameters:
0:7 'col' ( in 4-component vector of float)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 7 (const uint)
0:12 Function Definition: fun4(u1;u1; ( temp 4-component vector of float)
0:12 Function Parameters:
0:12 'id1' ( in uint)
0:12 'id2' ( in uint)
0:? Sequence
0:13 Branch: Return with expression
0:13 Construct vec4 ( temp 4-component vector of float)
0:13 Convert uint to float ( temp float)
0:13 component-wise multiply ( temp uint)
0:13 'id1' ( in uint)
0:13 'id2' ( in uint)
0:17 Function Definition: fun1(i1; ( temp 4-component vector of float)
0:17 Function Parameters:
0:17 'index' ( in int)
0:? Sequence
0:18 Sequence
0:18 move second child to first child ( temp uint)
0:18 'entityId' ( temp uint)
0:18 Function Call: fun2(vf4; ( temp uint)
0:18 Function Call: fun0( ( temp 4-component vector of float)
0:19 Branch: Return with expression
0:19 Function Call: fun4(u1;u1; ( temp 4-component vector of float)
0:19 'entityId' ( temp uint)
0:19 'entityId' ( temp uint)
0:23 Function Definition: @main( ( temp int)
0:23 Function Parameters:
0:23 Function Definition: main( ( temp void)
0:23 Function Parameters:
0:? Sequence
0:23 move second child to first child ( temp int)
0:? '@entryPointOutput' (layout( location=0) out int)
0:23 Function Call: @main( ( temp int)
0:? Linker Objects
0:? '@entryPointOutput' (layout( location=0) out int)
SPIR-V is not generated for failed compile or link

View File

@@ -335,12 +335,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 145
// Id's are bound by 140
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 143
EntryPoint Fragment 4 "main" 138
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@@ -352,17 +352,17 @@ gl_FragCoord origin is upper left
MemberName 16($Global) 2 "condf1"
MemberName 16($Global) 3 "condi1"
Name 18 ""
Name 93 "f"
Name 106 "i"
Name 126 "g"
Name 143 "@entryPointOutput"
Name 88 "f"
Name 101 "i"
Name 121 "g"
Name 138 "@entryPointOutput"
MemberDecorate 16($Global) 0 Offset 0
MemberDecorate 16($Global) 1 Offset 4
MemberDecorate 16($Global) 2 Offset 8
MemberDecorate 16($Global) 3 Offset 12
Decorate 16($Global) Block
Decorate 18 DescriptorSet 0
Decorate 143(@entryPointOutput) Location 0
Decorate 138(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -388,25 +388,25 @@ gl_FragCoord origin is upper left
53: 6(float) Constant 1077936128
57: 15(int) Constant 3
64: 6(float) Constant 1082130432
88: 6(float) Constant 1084227584
92: TypePointer Function 6(float)
105: TypePointer Function 15(int)
130: 6(float) Constant 1088421888
131: 6(float) Constant 1090519040
142: TypePointer Output 7(fvec4)
143(@entryPointOutput): 142(ptr) Variable Output
83: 6(float) Constant 1084227584
87: TypePointer Function 6(float)
100: TypePointer Function 15(int)
125: 6(float) Constant 1088421888
126: 6(float) Constant 1090519040
137: TypePointer Output 7(fvec4)
138(@entryPointOutput): 137(ptr) Variable Output
4(main): 2 Function None 3
5: Label
144: 7(fvec4) FunctionCall 9(@main()
Store 143(@entryPointOutput) 144
139: 7(fvec4) FunctionCall 9(@main()
Store 138(@entryPointOutput) 139
Return
FunctionEnd
9(@main(): 7(fvec4) Function None 8
10: Label
12(a): 11(ptr) Variable Function
93(f): 92(ptr) Variable Function
106(i): 105(ptr) Variable Function
126(g): 92(ptr) Variable Function
88(f): 87(ptr) Variable Function
101(i): 100(ptr) Variable Function
121(g): 87(ptr) Variable Function
Store 12(a) 14
21: 20(ptr) AccessChain 18 19
22: 15(int) Load 21
@@ -455,98 +455,87 @@ gl_FragCoord origin is upper left
68: 20(ptr) AccessChain 18 19
69: 15(int) Load 68
70: 23(bool) INotEqual 69 25
SelectionMerge 72 None
BranchConditional 70 71 72
71: Label
73: 35(ptr) AccessChain 18 34
74: 6(float) Load 73
75: 15(int) ConvertFToS 74
76: 23(bool) INotEqual 75 25
Branch 72
72: Label
77: 23(bool) Phi 70 62 76 71
78: 23(bool) LogicalNot 77
SelectionMerge 80 None
BranchConditional 78 79 80
79: Label
81: 35(ptr) AccessChain 18 46
82: 6(float) Load 81
83: 23(bool) FOrdNotEqual 82 38
Branch 80
80: Label
84: 23(bool) Phi 77 72 83 79
SelectionMerge 86 None
BranchConditional 84 85 86
85: Label
87: 7(fvec4) Load 12(a)
89: 7(fvec4) CompositeConstruct 88 88 88 88
90: 7(fvec4) FAdd 87 89
ReturnValue 90
86: Label
94: 35(ptr) AccessChain 18 34
95: 6(float) Load 94
Store 93(f) 95
Branch 96
96: Label
LoopMerge 98 99 None
Branch 100
100: Label
101: 6(float) Load 93(f)
102: 23(bool) FOrdNotEqual 101 38
BranchConditional 102 97 98
97: Label
103: 6(float) Load 93(f)
104: 6(float) FSub 103 30
Store 93(f) 104
Branch 99
99: Label
Branch 96
98: Label
107: 20(ptr) AccessChain 18 19
108: 15(int) Load 107
Store 106(i) 108
Branch 109
109: Label
LoopMerge 111 112 None
Branch 110
110: Label
113: 15(int) Load 106(i)
114: 15(int) ISub 113 19
Store 106(i) 114
71: 35(ptr) AccessChain 18 34
72: 6(float) Load 71
73: 15(int) ConvertFToS 72
74: 23(bool) INotEqual 73 25
75: 23(bool) LogicalAnd 70 74
76: 35(ptr) AccessChain 18 46
77: 6(float) Load 76
78: 23(bool) FOrdNotEqual 77 38
79: 23(bool) LogicalOr 75 78
SelectionMerge 81 None
BranchConditional 79 80 81
80: Label
82: 7(fvec4) Load 12(a)
84: 7(fvec4) CompositeConstruct 83 83 83 83
85: 7(fvec4) FAdd 82 84
ReturnValue 85
81: Label
89: 35(ptr) AccessChain 18 34
90: 6(float) Load 89
Store 88(f) 90
Branch 91
91: Label
LoopMerge 93 94 None
Branch 95
95: Label
96: 6(float) Load 88(f)
97: 23(bool) FOrdNotEqual 96 38
BranchConditional 97 92 93
92: Label
98: 6(float) Load 88(f)
99: 6(float) FSub 98 30
Store 88(f) 99
Branch 94
94: Label
Branch 91
93: Label
102: 20(ptr) AccessChain 18 19
103: 15(int) Load 102
Store 101(i) 103
Branch 104
104: Label
LoopMerge 106 107 None
Branch 105
105: Label
108: 15(int) Load 101(i)
109: 15(int) ISub 108 19
Store 101(i) 109
Branch 107
107: Label
110: 15(int) Load 101(i)
111: 23(bool) INotEqual 110 25
BranchConditional 111 104 106
106: Label
Branch 112
112: Label
115: 15(int) Load 106(i)
116: 23(bool) INotEqual 115 25
BranchConditional 116 109 111
111: Label
Branch 117
117: Label
LoopMerge 119 120 None
Branch 121
121: Label
122: 15(int) Load 106(i)
123: 23(bool) INotEqual 122 25
BranchConditional 123 118 119
118: Label
124: 15(int) Load 106(i)
125: 15(int) ISub 124 19
Store 106(i) 125
Branch 120
120: Label
Branch 117
119: Label
127: 35(ptr) AccessChain 18 34
128: 6(float) Load 127
129: 23(bool) FOrdNotEqual 128 38
132: 6(float) Select 129 130 131
Store 126(g) 132
133: 6(float) Load 126(g)
134: 7(fvec4) Load 12(a)
135: 7(fvec4) CompositeConstruct 133 133 133 133
136: 7(fvec4) FAdd 134 135
Store 12(a) 136
137: 7(fvec4) Load 12(a)
138: 7(fvec4) CompositeConstruct 30 30 30 30
139: 7(fvec4) FSub 137 138
ReturnValue 139
LoopMerge 114 115 None
Branch 116
116: Label
117: 15(int) Load 101(i)
118: 23(bool) INotEqual 117 25
BranchConditional 118 113 114
113: Label
119: 15(int) Load 101(i)
120: 15(int) ISub 119 19
Store 101(i) 120
Branch 115
115: Label
Branch 112
114: Label
122: 35(ptr) AccessChain 18 34
123: 6(float) Load 122
124: 23(bool) FOrdNotEqual 123 38
127: 6(float) Select 124 125 126
Store 121(g) 127
128: 6(float) Load 121(g)
129: 7(fvec4) Load 12(a)
130: 7(fvec4) CompositeConstruct 128 128 128 128
131: 7(fvec4) FAdd 129 130
Store 12(a) 131
132: 7(fvec4) Load 12(a)
133: 7(fvec4) CompositeConstruct 30 30 30 30
134: 7(fvec4) FSub 132 133
ReturnValue 134
FunctionEnd

View File

@@ -173,34 +173,34 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 95
// Id's are bound by 85
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 93
EntryPoint Fragment 4 "main" 83
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 11 "test1(f1;"
Name 10 "v"
Name 15 "@main("
Name 22 "@finitetmp"
Name 36 "@finitetmp"
Name 39 "$Global"
MemberName 39($Global) 0 "f"
MemberName 39($Global) 1 "f2"
MemberName 39($Global) 2 "f3"
Name 41 ""
Name 57 "@finitetmp"
Name 73 "@finitetmp"
Name 93 "@entryPointOutput"
MemberDecorate 39($Global) 0 Offset 0
MemberDecorate 39($Global) 1 Offset 4
MemberDecorate 39($Global) 2 Offset 16
Decorate 39($Global) Block
Decorate 41 DescriptorSet 0
Decorate 93(@entryPointOutput) Location 0
Name 20 "@finitetmp"
Name 32 "@finitetmp"
Name 35 "$Global"
MemberName 35($Global) 0 "f"
MemberName 35($Global) 1 "f2"
MemberName 35($Global) 2 "f3"
Name 37 ""
Name 51 "@finitetmp"
Name 65 "@finitetmp"
Name 83 "@entryPointOutput"
MemberDecorate 35($Global) 0 Offset 0
MemberDecorate 35($Global) 1 Offset 4
MemberDecorate 35($Global) 2 Offset 16
Decorate 35($Global) Block
Decorate 37 DescriptorSet 0
Decorate 83(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -209,110 +209,85 @@ gl_FragCoord origin is upper left
9: TypeFunction 8(bool) 7(ptr)
13: TypeVector 6(float) 4
14: TypeFunction 13(fvec4)
37: TypeVector 6(float) 2
38: TypeVector 6(float) 3
39($Global): TypeStruct 6(float) 37(fvec2) 38(fvec3)
40: TypePointer Uniform 39($Global)
41: 40(ptr) Variable Uniform
42: TypeInt 32 1
43: 42(int) Constant 0
44: TypePointer Uniform 6(float)
56: TypePointer Function 37(fvec2)
58: 42(int) Constant 1
59: TypePointer Uniform 37(fvec2)
63: TypeVector 8(bool) 2
72: TypePointer Function 38(fvec3)
74: 42(int) Constant 2
75: TypePointer Uniform 38(fvec3)
79: TypeVector 8(bool) 3
88: 6(float) Constant 0
89: 13(fvec4) ConstantComposite 88 88 88 88
92: TypePointer Output 13(fvec4)
93(@entryPointOutput): 92(ptr) Variable Output
33: TypeVector 6(float) 2
34: TypeVector 6(float) 3
35($Global): TypeStruct 6(float) 33(fvec2) 34(fvec3)
36: TypePointer Uniform 35($Global)
37: 36(ptr) Variable Uniform
38: TypeInt 32 1
39: 38(int) Constant 0
40: TypePointer Uniform 6(float)
50: TypePointer Function 33(fvec2)
52: 38(int) Constant 1
53: TypePointer Uniform 33(fvec2)
57: TypeVector 8(bool) 2
64: TypePointer Function 34(fvec3)
66: 38(int) Constant 2
67: TypePointer Uniform 34(fvec3)
71: TypeVector 8(bool) 3
78: 6(float) Constant 0
79: 13(fvec4) ConstantComposite 78 78 78 78
82: TypePointer Output 13(fvec4)
83(@entryPointOutput): 82(ptr) Variable Output
4(main): 2 Function None 3
5: Label
94: 13(fvec4) FunctionCall 15(@main()
Store 93(@entryPointOutput) 94
84: 13(fvec4) FunctionCall 15(@main()
Store 83(@entryPointOutput) 84
Return
FunctionEnd
11(test1(f1;): 8(bool) Function None 9
10(v): 7(ptr) FunctionParameter
12: Label
22(@finitetmp): 7(ptr) Variable Function
20(@finitetmp): 7(ptr) Variable Function
17: 6(float) Load 10(v)
18: 8(bool) IsNan 17
19: 8(bool) LogicalNot 18
SelectionMerge 21 None
BranchConditional 19 20 21
20: Label
23: 6(float) Load 10(v)
Store 22(@finitetmp) 23
24: 6(float) Load 22(@finitetmp)
25: 8(bool) IsNan 24
26: 8(bool) LogicalNot 25
SelectionMerge 28 None
BranchConditional 26 27 28
27: Label
29: 6(float) Load 22(@finitetmp)
30: 8(bool) IsInf 29
31: 8(bool) LogicalNot 30
Branch 28
28: Label
32: 8(bool) Phi 26 20 31 27
Branch 21
21: Label
33: 8(bool) Phi 19 12 32 28
ReturnValue 33
21: 6(float) Load 10(v)
Store 20(@finitetmp) 21
22: 6(float) Load 20(@finitetmp)
23: 8(bool) IsNan 22
24: 8(bool) LogicalNot 23
25: 6(float) Load 20(@finitetmp)
26: 8(bool) IsInf 25
27: 8(bool) LogicalNot 26
28: 8(bool) LogicalAnd 24 27
29: 8(bool) LogicalAnd 19 28
ReturnValue 29
FunctionEnd
15(@main(): 13(fvec4) Function None 14
16: Label
36(@finitetmp): 7(ptr) Variable Function
57(@finitetmp): 56(ptr) Variable Function
73(@finitetmp): 72(ptr) Variable Function
45: 44(ptr) AccessChain 41 43
46: 6(float) Load 45
Store 36(@finitetmp) 46
47: 6(float) Load 36(@finitetmp)
48: 8(bool) IsNan 47
49: 8(bool) LogicalNot 48
SelectionMerge 51 None
BranchConditional 49 50 51
50: Label
52: 6(float) Load 36(@finitetmp)
53: 8(bool) IsInf 52
54: 8(bool) LogicalNot 53
Branch 51
51: Label
55: 8(bool) Phi 49 16 54 50
60: 59(ptr) AccessChain 41 58
61: 37(fvec2) Load 60
Store 57(@finitetmp) 61
62: 37(fvec2) Load 57(@finitetmp)
64: 63(bvec2) IsNan 62
65: 63(bvec2) LogicalNot 64
SelectionMerge 67 None
BranchConditional 65 66 67
66: Label
68: 37(fvec2) Load 57(@finitetmp)
69: 63(bvec2) IsInf 68
70: 63(bvec2) LogicalNot 69
Branch 67
67: Label
71: 8(bool) Phi 65 51 70 66
76: 75(ptr) AccessChain 41 74
77: 38(fvec3) Load 76
Store 73(@finitetmp) 77
78: 38(fvec3) Load 73(@finitetmp)
80: 79(bvec3) IsNan 78
81: 79(bvec3) LogicalNot 80
SelectionMerge 83 None
BranchConditional 81 82 83
82: Label
84: 38(fvec3) Load 73(@finitetmp)
85: 79(bvec3) IsInf 84
86: 79(bvec3) LogicalNot 85
Branch 83
83: Label
87: 8(bool) Phi 81 67 86 82
ReturnValue 89
32(@finitetmp): 7(ptr) Variable Function
51(@finitetmp): 50(ptr) Variable Function
65(@finitetmp): 64(ptr) Variable Function
41: 40(ptr) AccessChain 37 39
42: 6(float) Load 41
Store 32(@finitetmp) 42
43: 6(float) Load 32(@finitetmp)
44: 8(bool) IsNan 43
45: 8(bool) LogicalNot 44
46: 6(float) Load 32(@finitetmp)
47: 8(bool) IsInf 46
48: 8(bool) LogicalNot 47
49: 8(bool) LogicalAnd 45 48
54: 53(ptr) AccessChain 37 52
55: 33(fvec2) Load 54
Store 51(@finitetmp) 55
56: 33(fvec2) Load 51(@finitetmp)
58: 57(bvec2) IsNan 56
59: 57(bvec2) LogicalNot 58
60: 33(fvec2) Load 51(@finitetmp)
61: 57(bvec2) IsInf 60
62: 57(bvec2) LogicalNot 61
63: 57(bvec2) LogicalAnd 59 62
68: 67(ptr) AccessChain 37 66
69: 34(fvec3) Load 68
Store 65(@finitetmp) 69
70: 34(fvec3) Load 65(@finitetmp)
72: 71(bvec3) IsNan 70
73: 71(bvec3) LogicalNot 72
74: 34(fvec3) Load 65(@finitetmp)
75: 71(bvec3) IsInf 74
76: 71(bvec3) LogicalNot 75
77: 71(bvec3) LogicalAnd 73 76
ReturnValue 79
FunctionEnd

View File

@@ -129,106 +129,95 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 62
// Id's are bound by 57
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 59
EntryPoint Fragment 4 "main" 54
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 8 "PS_OUTPUT"
MemberName 8(PS_OUTPUT) 0 "Color"
Name 10 "@main("
Name 15 "$Global"
MemberName 15($Global) 0 "ival"
MemberName 15($Global) 1 "ival4"
MemberName 15($Global) 2 "fval"
MemberName 15($Global) 3 "fval4"
Name 17 ""
Name 50 "psout"
Name 59 "Color"
MemberDecorate 15($Global) 0 Offset 0
MemberDecorate 15($Global) 1 Offset 16
MemberDecorate 15($Global) 2 Offset 32
MemberDecorate 15($Global) 3 Offset 48
Decorate 15($Global) Block
Decorate 17 DescriptorSet 0
Decorate 59(Color) Location 0
Name 14 "$Global"
MemberName 14($Global) 0 "ival"
MemberName 14($Global) 1 "ival4"
MemberName 14($Global) 2 "fval"
MemberName 14($Global) 3 "fval4"
Name 16 ""
Name 45 "psout"
Name 54 "Color"
MemberDecorate 14($Global) 0 Offset 0
MemberDecorate 14($Global) 1 Offset 16
MemberDecorate 14($Global) 2 Offset 32
MemberDecorate 14($Global) 3 Offset 48
Decorate 14($Global) Block
Decorate 16 DescriptorSet 0
Decorate 54(Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8(PS_OUTPUT): TypeStruct 7(fvec4)
9: TypeFunction 8(PS_OUTPUT)
12: TypeBool
13: TypeInt 32 1
14: TypeVector 13(int) 4
15($Global): TypeStruct 13(int) 14(ivec4) 6(float) 7(fvec4)
16: TypePointer Uniform 15($Global)
17: 16(ptr) Variable Uniform
18: 13(int) Constant 0
19: TypePointer Uniform 13(int)
12: TypeInt 32 1
13: TypeVector 12(int) 4
14($Global): TypeStruct 12(int) 13(ivec4) 6(float) 7(fvec4)
15: TypePointer Uniform 14($Global)
16: 15(ptr) Variable Uniform
17: 12(int) Constant 0
18: TypePointer Uniform 12(int)
21: TypeBool
22: TypeInt 32 0
23: 22(int) Constant 0
27: 13(int) Constant 2
28: TypePointer Uniform 6(float)
49: TypePointer Function 8(PS_OUTPUT)
51: 6(float) Constant 1065353216
52: 7(fvec4) ConstantComposite 51 51 51 51
53: TypePointer Function 7(fvec4)
58: TypePointer Output 7(fvec4)
59(Color): 58(ptr) Variable Output
25: 12(int) Constant 2
26: TypePointer Uniform 6(float)
44: TypePointer Function 8(PS_OUTPUT)
46: 6(float) Constant 1065353216
47: 7(fvec4) ConstantComposite 46 46 46 46
48: TypePointer Function 7(fvec4)
53: TypePointer Output 7(fvec4)
54(Color): 53(ptr) Variable Output
4(main): 2 Function None 3
5: Label
60:8(PS_OUTPUT) FunctionCall 10(@main()
61: 7(fvec4) CompositeExtract 60 0
Store 59(Color) 61
55:8(PS_OUTPUT) FunctionCall 10(@main()
56: 7(fvec4) CompositeExtract 55 0
Store 54(Color) 56
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
11: Label
50(psout): 49(ptr) Variable Function
20: 19(ptr) AccessChain 17 18
21: 13(int) Load 20
24: 12(bool) INotEqual 21 23
SelectionMerge 26 None
BranchConditional 24 25 26
25: Label
29: 28(ptr) AccessChain 17 27
30: 6(float) Load 29
31: 13(int) ConvertFToS 30
32: 12(bool) INotEqual 31 23
Branch 26
26: Label
33: 12(bool) Phi 24 11 32 25
SelectionMerge 35 None
BranchConditional 33 34 35
34: Label
Branch 35
35: Label
36: 19(ptr) AccessChain 17 18
37: 13(int) Load 36
38: 12(bool) INotEqual 37 23
39: 12(bool) LogicalNot 38
SelectionMerge 41 None
BranchConditional 39 40 41
40: Label
42: 28(ptr) AccessChain 17 27
43: 6(float) Load 42
44: 13(int) ConvertFToS 43
45: 12(bool) INotEqual 44 23
Branch 41
41: Label
46: 12(bool) Phi 38 35 45 40
SelectionMerge 48 None
BranchConditional 46 47 48
47: Label
Branch 48
48: Label
54: 53(ptr) AccessChain 50(psout) 18
Store 54 52
55:8(PS_OUTPUT) Load 50(psout)
ReturnValue 55
45(psout): 44(ptr) Variable Function
19: 18(ptr) AccessChain 16 17
20: 12(int) Load 19
24: 21(bool) INotEqual 20 23
27: 26(ptr) AccessChain 16 25
28: 6(float) Load 27
29: 12(int) ConvertFToS 28
30: 21(bool) INotEqual 29 23
31: 21(bool) LogicalAnd 24 30
SelectionMerge 33 None
BranchConditional 31 32 33
32: Label
Branch 33
33: Label
34: 18(ptr) AccessChain 16 17
35: 12(int) Load 34
36: 21(bool) INotEqual 35 23
37: 26(ptr) AccessChain 16 25
38: 6(float) Load 37
39: 12(int) ConvertFToS 38
40: 21(bool) INotEqual 39 23
41: 21(bool) LogicalOr 36 40
SelectionMerge 43 None
BranchConditional 41 42 43
42: Label
Branch 43
43: Label
49: 48(ptr) AccessChain 45(psout) 17
Store 49 47
50:8(PS_OUTPUT) Load 45(psout)
ReturnValue 50
FunctionEnd

View File

@@ -255,12 +255,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 120
// Id's are bound by 115
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 117
EntryPoint Fragment 4 "main" 112
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@@ -279,16 +279,16 @@ gl_FragCoord origin is upper left
Name 47 "r10"
Name 58 "r11"
Name 67 "r20"
Name 79 "r21"
Name 92 "psout"
Name 117 "Color"
Name 77 "r21"
Name 87 "psout"
Name 112 "Color"
MemberDecorate 18($Global) 0 Offset 0
MemberDecorate 18($Global) 1 Offset 16
MemberDecorate 18($Global) 2 Offset 32
MemberDecorate 18($Global) 3 Offset 36
Decorate 18($Global) Block
Decorate 20 DescriptorSet 0
Decorate 117(Color) Location 0
Decorate 112(Color) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -311,20 +311,20 @@ gl_FragCoord origin is upper left
34: 21(int) Constant 1
48: 21(int) Constant 2
49: TypePointer Uniform 16(int)
73: 21(int) Constant 3
91: TypePointer Function 8(PS_OUTPUT)
106: 6(float) Constant 0
107: 6(float) Constant 1065353216
108: 7(fvec4) ConstantComposite 106 106 106 106
109: 7(fvec4) ConstantComposite 107 107 107 107
111: TypePointer Function 7(fvec4)
116: TypePointer Output 7(fvec4)
117(Color): 116(ptr) Variable Output
71: 21(int) Constant 3
86: TypePointer Function 8(PS_OUTPUT)
101: 6(float) Constant 0
102: 6(float) Constant 1065353216
103: 7(fvec4) ConstantComposite 101 101 101 101
104: 7(fvec4) ConstantComposite 102 102 102 102
106: TypePointer Function 7(fvec4)
111: TypePointer Output 7(fvec4)
112(Color): 111(ptr) Variable Output
4(main): 2 Function None 3
5: Label
118:8(PS_OUTPUT) FunctionCall 10(@main()
119: 7(fvec4) CompositeExtract 118 0
Store 117(Color) 119
113:8(PS_OUTPUT) FunctionCall 10(@main()
114: 7(fvec4) CompositeExtract 113 0
Store 112(Color) 114
Return
FunctionEnd
10(@main():8(PS_OUTPUT) Function None 9
@@ -335,8 +335,8 @@ gl_FragCoord origin is upper left
47(r10): 14(ptr) Variable Function
58(r11): 14(ptr) Variable Function
67(r20): 14(ptr) Variable Function
79(r21): 14(ptr) Variable Function
92(psout): 91(ptr) Variable Function
77(r21): 14(ptr) Variable Function
87(psout): 86(ptr) Variable Function
24: 23(ptr) AccessChain 20 22
25: 17(ivec4) Load 24
28: 13(bvec4) INotEqual 25 27
@@ -379,48 +379,37 @@ gl_FragCoord origin is upper left
68: 23(ptr) AccessChain 20 22
69: 17(ivec4) Load 68
70: 13(bvec4) INotEqual 69 27
SelectionMerge 72 None
BranchConditional 70 71 72
71: Label
74: 49(ptr) AccessChain 20 73
75: 16(int) Load 74
76: 12(bool) INotEqual 75 26
77: 13(bvec4) CompositeConstruct 76 76 76 76
Branch 72
72: Label
78: 12(bool) Phi 70 11 77 71
Store 67(r20) 78
80: 23(ptr) AccessChain 20 22
81: 17(ivec4) Load 80
82: 13(bvec4) INotEqual 81 27
83: 12(bool) LogicalNot 82
SelectionMerge 85 None
BranchConditional 83 84 85
84: Label
86: 49(ptr) AccessChain 20 73
87: 16(int) Load 86
88: 12(bool) INotEqual 87 26
89: 13(bvec4) CompositeConstruct 88 88 88 88
Branch 85
85: Label
90: 12(bool) Phi 82 72 89 84
Store 79(r21) 90
93: 13(bvec4) Load 15(r00)
94: 13(bvec4) Load 30(r01)
95: 13(bvec4) LogicalOr 93 94
96: 13(bvec4) Load 39(r02)
97: 13(bvec4) LogicalOr 95 96
98: 13(bvec4) Load 47(r10)
99: 13(bvec4) LogicalOr 97 98
100: 13(bvec4) Load 58(r11)
101: 13(bvec4) LogicalOr 99 100
102: 13(bvec4) Load 67(r20)
103: 13(bvec4) LogicalOr 101 102
104: 13(bvec4) Load 79(r21)
105: 13(bvec4) LogicalOr 103 104
110: 7(fvec4) Select 105 109 108
112: 111(ptr) AccessChain 92(psout) 22
Store 112 110
113:8(PS_OUTPUT) Load 92(psout)
ReturnValue 113
72: 49(ptr) AccessChain 20 71
73: 16(int) Load 72
74: 12(bool) INotEqual 73 26
75: 13(bvec4) CompositeConstruct 74 74 74 74
76: 13(bvec4) LogicalAnd 70 75
Store 67(r20) 76
78: 23(ptr) AccessChain 20 22
79: 17(ivec4) Load 78
80: 13(bvec4) INotEqual 79 27
81: 49(ptr) AccessChain 20 71
82: 16(int) Load 81
83: 12(bool) INotEqual 82 26
84: 13(bvec4) CompositeConstruct 83 83 83 83
85: 13(bvec4) LogicalOr 80 84
Store 77(r21) 85
88: 13(bvec4) Load 15(r00)
89: 13(bvec4) Load 30(r01)
90: 13(bvec4) LogicalOr 88 89
91: 13(bvec4) Load 39(r02)
92: 13(bvec4) LogicalOr 90 91
93: 13(bvec4) Load 47(r10)
94: 13(bvec4) LogicalOr 92 93
95: 13(bvec4) Load 58(r11)
96: 13(bvec4) LogicalOr 94 95
97: 13(bvec4) Load 67(r20)
98: 13(bvec4) LogicalOr 96 97
99: 13(bvec4) Load 77(r21)
100: 13(bvec4) LogicalOr 98 99
105: 7(fvec4) Select 100 104 103
107: 106(ptr) AccessChain 87(psout) 22
Store 107 105
108:8(PS_OUTPUT) Load 87(psout)
ReturnValue 108
FunctionEnd

View File

@@ -189,12 +189,12 @@ gl_FragCoord origin is upper left
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 94
// Id's are bound by 96
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 87 90
EntryPoint Fragment 4 "main" 89 92
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
@@ -212,15 +212,15 @@ gl_FragCoord origin is upper left
Name 21 "sbuf"
MemberName 21(sbuf) 0 "@data"
Name 23 "sbuf"
Name 40 "size"
Name 42 "stride"
Name 57 "sbuf2"
MemberName 57(sbuf2) 0 "@data"
Name 43 "size"
Name 45 "stride"
Name 59 "sbuf2"
Name 85 "pos"
MemberName 59(sbuf2) 0 "@data"
Name 61 "sbuf2"
Name 87 "pos"
Name 90 "@entryPointOutput"
Name 91 "param"
Name 89 "pos"
Name 92 "@entryPointOutput"
Name 93 "param"
MemberDecorate 19(sb_t) 0 NonWritable
MemberDecorate 19(sb_t) 0 Offset 0
MemberDecorate 19(sb_t) 1 NonWritable
@@ -233,13 +233,13 @@ gl_FragCoord origin is upper left
Decorate 21(sbuf) BufferBlock
Decorate 23(sbuf) DescriptorSet 0
Decorate 23(sbuf) Binding 10
Decorate 56 ArrayStride 4
MemberDecorate 57(sbuf2) 0 NonWritable
MemberDecorate 57(sbuf2) 0 Offset 0
Decorate 57(sbuf2) BufferBlock
Decorate 59(sbuf2) DescriptorSet 0
Decorate 87(pos) Location 0
Decorate 90(@entryPointOutput) Location 0
Decorate 58 ArrayStride 4
MemberDecorate 59(sbuf2) 0 NonWritable
MemberDecorate 59(sbuf2) 0 Offset 0
Decorate 59(sbuf2) BufferBlock
Decorate 61(sbuf2) DescriptorSet 0
Decorate 89(pos) Location 0
Decorate 92(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 0
@@ -261,41 +261,41 @@ gl_FragCoord origin is upper left
27: TypePointer Uniform 19(sb_t)
31: TypePointer Function 14(fvec3)
34: 24(int) Constant 1
35: TypePointer Function 15(bool)
38: 24(int) Constant 2
43: 6(int) Constant 32
45: TypePointer Uniform 6(int)
48: 6(int) Constant 0
53: TypePointer Uniform 14(fvec3)
56: TypeRuntimeArray 8(float)
57(sbuf2): TypeStruct 56
58: TypePointer Uniform 57(sbuf2)
59(sbuf2): 58(ptr) Variable Uniform
61: TypePointer Uniform 8(float)
66: 8(float) Constant 0
73: TypePointer Function 8(float)
86: TypePointer Input 6(int)
87(pos): 86(ptr) Variable Input
89: TypePointer Output 9(fvec4)
90(@entryPointOutput): 89(ptr) Variable Output
35: 6(int) Constant 0
37: TypePointer Function 15(bool)
40: 24(int) Constant 2
46: 6(int) Constant 32
48: TypePointer Uniform 6(int)
55: TypePointer Uniform 14(fvec3)
58: TypeRuntimeArray 8(float)
59(sbuf2): TypeStruct 58
60: TypePointer Uniform 59(sbuf2)
61(sbuf2): 60(ptr) Variable Uniform
63: TypePointer Uniform 8(float)
68: 8(float) Constant 0
75: TypePointer Function 8(float)
88: TypePointer Input 6(int)
89(pos): 88(ptr) Variable Input
91: TypePointer Output 9(fvec4)
92(@entryPointOutput): 91(ptr) Variable Output
4(main): 2 Function None 3
5: Label
85(pos): 7(ptr) Variable Function
91(param): 7(ptr) Variable Function
88: 6(int) Load 87(pos)
Store 85(pos) 88
92: 6(int) Load 85(pos)
Store 91(param) 92
93: 9(fvec4) FunctionCall 12(@main(u1;) 91(param)
Store 90(@entryPointOutput) 93
87(pos): 7(ptr) Variable Function
93(param): 7(ptr) Variable Function
90: 6(int) Load 89(pos)
Store 87(pos) 90
94: 6(int) Load 87(pos)
Store 93(param) 94
95: 9(fvec4) FunctionCall 12(@main(u1;) 93(param)
Store 92(@entryPointOutput) 95
Return
FunctionEnd
12(@main(u1;): 9(fvec4) Function None 10
11(pos): 7(ptr) FunctionParameter
13: Label
18(mydata): 17(ptr) Variable Function
40(size): 7(ptr) Variable Function
42(stride): 7(ptr) Variable Function
43(size): 7(ptr) Variable Function
45(stride): 7(ptr) Variable Function
26: 6(int) Load 11(pos)
28: 27(ptr) AccessChain 23(sbuf) 25 26
29: 19(sb_t) Load 28
@@ -303,46 +303,48 @@ gl_FragCoord origin is upper left
32: 31(ptr) AccessChain 18(mydata) 25
Store 32 30
33: 6(int) CompositeExtract 29 1
36: 35(ptr) AccessChain 18(mydata) 34
Store 36 33
37: 6(int) CompositeExtract 29 2
39: 35(ptr) AccessChain 18(mydata) 38
Store 39 37
41: 24(int) ArrayLength 23(sbuf) 0
Store 40(size) 41
Store 42(stride) 43
44: 6(int) Load 11(pos)
46: 45(ptr) AccessChain 23(sbuf) 25 44 34
47: 6(int) Load 46
49: 15(bool) INotEqual 47 48
SelectionMerge 51 None
BranchConditional 49 50 72
50: Label
52: 6(int) Load 11(pos)
54: 53(ptr) AccessChain 23(sbuf) 25 52 25
55: 14(fvec3) Load 54
60: 6(int) Load 11(pos)
62: 61(ptr) AccessChain 59(sbuf2) 25 60
63: 8(float) Load 62
64: 14(fvec3) CompositeConstruct 63 63 63
65: 14(fvec3) FAdd 55 64
67: 8(float) CompositeExtract 65 0
68: 8(float) CompositeExtract 65 1
69: 8(float) CompositeExtract 65 2
70: 9(fvec4) CompositeConstruct 67 68 69 66
ReturnValue 70
72: Label
74: 73(ptr) AccessChain 18(mydata) 25 48
75: 8(float) Load 74
76: 6(int) Load 40(size)
77: 8(float) ConvertUToF 76
78: 8(float) FAdd 75 77
79: 6(int) Load 42(stride)
80: 8(float) ConvertUToF 79
81: 8(float) FAdd 78 80
82: 9(fvec4) CompositeConstruct 81 81 81 81
ReturnValue 82
51: Label
84: 9(fvec4) Undef
ReturnValue 84
36: 15(bool) INotEqual 33 35
38: 37(ptr) AccessChain 18(mydata) 34
Store 38 36
39: 6(int) CompositeExtract 29 2
41: 15(bool) INotEqual 39 35
42: 37(ptr) AccessChain 18(mydata) 40
Store 42 41
44: 24(int) ArrayLength 23(sbuf) 0
Store 43(size) 44
Store 45(stride) 46
47: 6(int) Load 11(pos)
49: 48(ptr) AccessChain 23(sbuf) 25 47 34
50: 6(int) Load 49
51: 15(bool) INotEqual 50 35
SelectionMerge 53 None
BranchConditional 51 52 74
52: Label
54: 6(int) Load 11(pos)
56: 55(ptr) AccessChain 23(sbuf) 25 54 25
57: 14(fvec3) Load 56
62: 6(int) Load 11(pos)
64: 63(ptr) AccessChain 61(sbuf2) 25 62
65: 8(float) Load 64
66: 14(fvec3) CompositeConstruct 65 65 65
67: 14(fvec3) FAdd 57 66
69: 8(float) CompositeExtract 67 0
70: 8(float) CompositeExtract 67 1
71: 8(float) CompositeExtract 67 2
72: 9(fvec4) CompositeConstruct 69 70 71 68
ReturnValue 72
74: Label
76: 75(ptr) AccessChain 18(mydata) 25 35
77: 8(float) Load 76
78: 6(int) Load 43(size)
79: 8(float) ConvertUToF 78
80: 8(float) FAdd 77 79
81: 6(int) Load 45(stride)
82: 8(float) ConvertUToF 81
83: 8(float) FAdd 80 82
84: 9(fvec4) CompositeConstruct 83 83 83 83
ReturnValue 84
53: Label
86: 9(fvec4) Undef
ReturnValue 86
FunctionEnd

View File

@@ -0,0 +1,228 @@
hlsl.tx.overload.frag
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: Func(t211; ( temp float)
0:8 Function Parameters:
0:8 'DummyTex' ( in texture2D)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 1.000000
0:9 Function Definition: Func(t21; ( temp 4-component vector of float)
0:9 Function Parameters:
0:9 'DummyTex' ( in texture2D)
0:? Sequence
0:9 Branch: Return with expression
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:11 Function Definition: Func(I211; ( temp float)
0:11 Function Parameters:
0:11 'DummyTex' (layout( r32f) in image2D)
0:? Sequence
0:11 Branch: Return with expression
0:11 Constant:
0:11 1.000000
0:12 Function Definition: Func(I21; ( temp 4-component vector of float)
0:12 Function Parameters:
0:12 'DummyTex' (layout( rgba32f) in image2D)
0:? Sequence
0:12 Branch: Return with expression
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:15 Function Definition: @main( ( temp 4-component vector of float)
0:15 Function Parameters:
0:? Sequence
0:16 Branch: Return with expression
0:16 add ( temp 4-component vector of float)
0:16 add ( temp 4-component vector of float)
0:16 add ( temp 4-component vector of float)
0:16 Function Call: Func(t211; ( temp float)
0:16 'tf1' ( uniform texture2D)
0:16 Function Call: Func(t21; ( temp 4-component vector of float)
0:16 'tf4' ( uniform texture2D)
0:16 Function Call: Func(I211; ( temp float)
0:16 'twf1' (layout( r32f) uniform image2D)
0:16 Function Call: Func(I21; ( temp 4-component vector of float)
0:16 'twf4' (layout( rgba32f) uniform image2D)
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
0:15 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:15 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'tf1' ( uniform texture2D)
0:? 'tf4' ( uniform texture2D)
0:? 'twf1' (layout( r32f) uniform image2D)
0:? 'twf4' (layout( rgba32f) uniform image2D)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
Linked fragment stage:
Shader version: 500
gl_FragCoord origin is upper left
0:? Sequence
0:8 Function Definition: Func(t211; ( temp float)
0:8 Function Parameters:
0:8 'DummyTex' ( in texture2D)
0:? Sequence
0:8 Branch: Return with expression
0:8 Constant:
0:8 1.000000
0:9 Function Definition: Func(t21; ( temp 4-component vector of float)
0:9 Function Parameters:
0:9 'DummyTex' ( in texture2D)
0:? Sequence
0:9 Branch: Return with expression
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:11 Function Definition: Func(I211; ( temp float)
0:11 Function Parameters:
0:11 'DummyTex' (layout( r32f) in image2D)
0:? Sequence
0:11 Branch: Return with expression
0:11 Constant:
0:11 1.000000
0:12 Function Definition: Func(I21; ( temp 4-component vector of float)
0:12 Function Parameters:
0:12 'DummyTex' (layout( rgba32f) in image2D)
0:? Sequence
0:12 Branch: Return with expression
0:? Constant:
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:? 0.000000
0:15 Function Definition: @main( ( temp 4-component vector of float)
0:15 Function Parameters:
0:? Sequence
0:16 Branch: Return with expression
0:16 add ( temp 4-component vector of float)
0:16 add ( temp 4-component vector of float)
0:16 add ( temp 4-component vector of float)
0:16 Function Call: Func(t211; ( temp float)
0:16 'tf1' ( uniform texture2D)
0:16 Function Call: Func(t21; ( temp 4-component vector of float)
0:16 'tf4' ( uniform texture2D)
0:16 Function Call: Func(I211; ( temp float)
0:16 'twf1' (layout( r32f) uniform image2D)
0:16 Function Call: Func(I21; ( temp 4-component vector of float)
0:16 'twf4' (layout( rgba32f) uniform image2D)
0:15 Function Definition: main( ( temp void)
0:15 Function Parameters:
0:? Sequence
0:15 move second child to first child ( temp 4-component vector of float)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
0:15 Function Call: @main( ( temp 4-component vector of float)
0:? Linker Objects
0:? 'tf1' ( uniform texture2D)
0:? 'tf4' ( uniform texture2D)
0:? 'twf1' (layout( r32f) uniform image2D)
0:? 'twf4' (layout( rgba32f) uniform image2D)
0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float)
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 62
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 60
ExecutionMode 4 OriginUpperLeft
Source HLSL 500
Name 4 "main"
Name 11 "Func(t211;"
Name 10 "DummyTex"
Name 16 "Func(t21;"
Name 15 "DummyTex"
Name 22 "Func(I211;"
Name 21 "DummyTex"
Name 28 "Func(I21;"
Name 27 "DummyTex"
Name 31 "@main("
Name 44 "tf1"
Name 46 "tf4"
Name 50 "twf1"
Name 54 "twf4"
Name 60 "@entryPointOutput"
Decorate 44(tf1) DescriptorSet 0
Decorate 46(tf4) DescriptorSet 0
Decorate 50(twf1) DescriptorSet 0
Decorate 54(twf4) DescriptorSet 0
Decorate 60(@entryPointOutput) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeImage 6(float) 2D sampled format:Unknown
8: TypePointer UniformConstant 7
9: TypeFunction 6(float) 8(ptr)
13: TypeVector 6(float) 4
14: TypeFunction 13(fvec4) 8(ptr)
18: TypeImage 6(float) 2D nonsampled format:R32f
19: TypePointer UniformConstant 18
20: TypeFunction 6(float) 19(ptr)
24: TypeImage 6(float) 2D nonsampled format:Rgba32f
25: TypePointer UniformConstant 24
26: TypeFunction 13(fvec4) 25(ptr)
30: TypeFunction 13(fvec4)
33: 6(float) Constant 1065353216
36: 6(float) Constant 0
37: 13(fvec4) ConstantComposite 36 36 36 36
44(tf1): 8(ptr) Variable UniformConstant
46(tf4): 8(ptr) Variable UniformConstant
50(twf1): 19(ptr) Variable UniformConstant
54(twf4): 25(ptr) Variable UniformConstant
59: TypePointer Output 13(fvec4)
60(@entryPointOutput): 59(ptr) Variable Output
4(main): 2 Function None 3
5: Label
61: 13(fvec4) FunctionCall 31(@main()
Store 60(@entryPointOutput) 61
Return
FunctionEnd
11(Func(t211;): 6(float) Function None 9
10(DummyTex): 8(ptr) FunctionParameter
12: Label
ReturnValue 33
FunctionEnd
16(Func(t21;): 13(fvec4) Function None 14
15(DummyTex): 8(ptr) FunctionParameter
17: Label
ReturnValue 37
FunctionEnd
22(Func(I211;): 6(float) Function None 20
21(DummyTex): 19(ptr) FunctionParameter
23: Label
ReturnValue 33
FunctionEnd
28(Func(I21;): 13(fvec4) Function None 26
27(DummyTex): 25(ptr) FunctionParameter
29: Label
ReturnValue 37
FunctionEnd
31(@main(): 13(fvec4) Function None 30
32: Label
45: 6(float) FunctionCall 11(Func(t211;) 44(tf1)
47: 13(fvec4) FunctionCall 16(Func(t21;) 46(tf4)
48: 13(fvec4) CompositeConstruct 45 45 45 45
49: 13(fvec4) FAdd 48 47
51: 6(float) FunctionCall 22(Func(I211;) 50(twf1)
52: 13(fvec4) CompositeConstruct 51 51 51 51
53: 13(fvec4) FAdd 49 52
55: 13(fvec4) FunctionCall 28(Func(I21;) 54(twf4)
56: 13(fvec4) FAdd 53 55
ReturnValue 56
FunctionEnd

View File

@@ -8,6 +8,7 @@ remap.uniformarray.everything.frag
MemoryModel Logical GLSL450
EntryPoint Fragment 5663 "main" 3608 4957 4339 5139
ExecutionMode 5663 OriginUpperLeft
Decorate 5139 Location 0
8: TypeVoid
1282: TypeFunction 8
13: TypeFloat 32

View File

@@ -16,6 +16,7 @@ remap.uniformarray.none.frag
Name 35 "alpha"
Name 47 "gl_FragColor"
Name 52 "texSampler2D"
Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2

View File

@@ -18,6 +18,7 @@ spv.always-discard.frag
Name 30 "y"
Name 36 "radius"
Name 59 "gl_FragColor"
Decorate 59(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -17,6 +17,7 @@ spv.always-discard2.frag
Name 21 "tex_coord"
Name 30 "y"
Name 38 "gl_FragColor"
Decorate 38(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -52,9 +52,9 @@ Warning, version 450 is not yet complete; most version-specific features are pre
28: 27(int) Constant 0
29: 6(bool) ConstantFalse
30: 9(bvec2) ConstantComposite 29 29
31: 22(int) Constant 0
31: 22(int) Constant 1
32: 23(ivec2) ConstantComposite 31 31
33: 22(int) Constant 1
33: 22(int) Constant 0
34: 23(ivec2) ConstantComposite 33 33
36: TypePointer Uniform 23(ivec2)
38: TypeVector 22(int) 4
@@ -62,7 +62,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
40: TypePointer Uniform 39(Uniform)
41: 40(ptr) Variable Uniform
42: TypePointer Uniform 38(ivec4)
65: 38(ivec4) ConstantComposite 31 31 31 31
65: 38(ivec4) ConstantComposite 33 33 33 33
72: TypeFloat 32
73: TypeVector 72(float) 4
74: TypePointer Output 73(fvec4)
@@ -73,22 +73,22 @@ Warning, version 450 is not yet complete; most version-specific features are pre
5: Label
62(param): 8(ptr) Variable Function
67(param): 10(ptr) Variable Function
35: 23(ivec2) Select 30 34 32
35: 23(ivec2) Select 30 32 34
37: 36(ptr) AccessChain 26 28
Store 37 35
43: 42(ptr) AccessChain 41 28
44: 38(ivec4) Load 43
45: 22(int) CompositeExtract 44 2
46: 6(bool) INotEqual 45 31
46: 6(bool) INotEqual 45 33
SelectionMerge 48 None
BranchConditional 46 47 48
47: Label
49: 42(ptr) AccessChain 41 28
50: 38(ivec4) Load 49
51: 22(int) CompositeExtract 50 0
52: 6(bool) INotEqual 51 31
52: 6(bool) INotEqual 51 33
53: 9(bvec2) CompositeConstruct 52 52
54: 23(ivec2) Select 53 34 32
54: 23(ivec2) Select 53 32 34
55: 36(ptr) AccessChain 26 28
Store 55 54
Branch 48
@@ -96,7 +96,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
56: 36(ptr) AccessChain 26 28
57: 23(ivec2) Load 56
58: 22(int) CompositeExtract 57 0
59: 6(bool) INotEqual 58 31
59: 6(bool) INotEqual 58 33
SelectionMerge 61 None
BranchConditional 59 60 61
60: Label
@@ -106,7 +106,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Store 62(param) 66
68: 2 FunctionCall 14(foo(vb4;vb2;) 62(param) 67(param)
69: 9(bvec2) Load 67(param)
70: 23(ivec2) Select 69 34 32
70: 23(ivec2) Select 69 32 34
71: 36(ptr) AccessChain 26 28
Store 71 70
Branch 61
@@ -114,14 +114,14 @@ Warning, version 450 is not yet complete; most version-specific features are pre
76: 42(ptr) AccessChain 41 28
77: 38(ivec4) Load 76
78: 22(int) CompositeExtract 77 0
79: 6(bool) INotEqual 78 31
79: 6(bool) INotEqual 78 33
SelectionMerge 81 None
BranchConditional 79 80 81
80: Label
82: 42(ptr) AccessChain 41 28
83: 38(ivec4) Load 82
84: 22(int) CompositeExtract 83 1
85: 6(bool) INotEqual 84 31
85: 6(bool) INotEqual 84 33
Branch 81
81: Label
86: 6(bool) Phi 79 61 85 80
@@ -131,7 +131,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
91: 42(ptr) AccessChain 41 28
92: 38(ivec4) Load 91
93: 22(int) CompositeExtract 92 0
94: 6(bool) INotEqual 93 31
94: 6(bool) INotEqual 93 33
95: 6(bool) LogicalNot 94
SelectionMerge 97 None
BranchConditional 95 96 97
@@ -139,7 +139,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
98: 42(ptr) AccessChain 41 28
99: 38(ivec4) Load 98
100: 22(int) CompositeExtract 99 1
101: 6(bool) INotEqual 100 31
101: 6(bool) INotEqual 100 33
Branch 97
97: Label
102: 6(bool) Phi 94 81 101 96

View File

@@ -17,6 +17,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 17 "coord"
Name 34 "gl_FragColor"
Decorate 13(tex) DescriptorSet 0
Decorate 34(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -51,6 +51,7 @@ spv.conversion.frag
Name 454 "i_f4"
Decorate 39(i_i) Flat
Decorate 157(i_i4) Flat
Decorate 322(gl_FragColor) Location 0
Decorate 446(i_i2) Flat
Decorate 448(i_i3) Flat
2: TypeVoid

View File

@@ -28,6 +28,7 @@ spv.deepRvalue.frag
Name 133 "t"
Name 146 "gl_FragColor"
Decorate 111(samp2D) DescriptorSet 0
Decorate 146(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -18,6 +18,7 @@ spv.discard-dce.frag
Name 30 "y"
Name 36 "radius"
Name 59 "gl_FragColor"
Decorate 59(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -15,6 +15,7 @@ spv.doWhileLoop.frag
Name 17 "bigColor"
Name 27 "d"
Name 32 "gl_FragColor"
Decorate 32(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -24,6 +24,7 @@ spv.earlyReturnDiscard.frag
Name 77 "b"
Name 105 "gl_FragColor"
Name 109 "threshhold3"
Decorate 105(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -19,6 +19,7 @@ spv.flowControl.frag
Name 25 "bigColor"
Name 30 "smallColor"
Name 35 "gl_FragColor"
Decorate 35(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -26,6 +26,7 @@ spv.forLoop.frag
Name 104 "f"
Name 117 "i"
Decorate 24(Count) Flat
Decorate 36(gl_FragColor) Location 0
Decorate 53(v4) Flat
2: TypeVoid
3: TypeFunction 2

View File

@@ -32,6 +32,7 @@ spv.forwardFun.frag
Decorate 27(f) RelaxedPrecision
Decorate 28 RelaxedPrecision
Decorate 30(gl_FragColor) RelaxedPrecision
Decorate 30(gl_FragColor) Location 0
Decorate 31 RelaxedPrecision
Decorate 32 RelaxedPrecision
Decorate 33 RelaxedPrecision

View File

@@ -28,6 +28,7 @@ WARNING: 0:5: varying deprecated in version 130; may be removed in future releas
Name 66 "g"
Name 69 "gl_FragColor"
Name 75 "bigColor"
Decorate 69(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -44,6 +44,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 133 "param"
Name 136 "arg"
Name 152 "gl_FragColor"
Decorate 152(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1

View File

@@ -11,6 +11,7 @@ spv.glFragColor.frag
Source GLSL 330
Name 4 "main"
Name 9 "gl_FragColor"
Decorate 9(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -14,6 +14,7 @@ spv.length.frag
Name 14 "v"
Name 26 "gl_FragColor"
Name 32 "u"
Decorate 26(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -42,6 +42,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 135 "foo2"
Decorate 15(foo3) Flat
Decorate 90(condition) Flat
Decorate 108(gl_FragColor) Location 0
Decorate 128(samp2D) DescriptorSet 0
Decorate 134(foo) Flat
Decorate 135(foo2) Flat

View File

@@ -49,6 +49,7 @@ spv.loops.frag
Name 687 "d18"
Name 698 "d17"
Decorate 157(Count) Flat
Decorate 615(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -30,6 +30,7 @@ spv.loopsArtificial.frag
Name 153 "d2"
Name 154 "d3"
Name 157 "Count"
Decorate 140(gl_FragColor) Location 0
Decorate 157(Count) Flat
2: TypeVoid
3: TypeFunction 2

View File

@@ -3,7 +3,7 @@ Warning, version 450 is not yet complete; most version-specific features are pre
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 157
// Id's are bound by 161
Capability Shader
1: ExtInstImport "GLSL.std.450"
@@ -22,31 +22,31 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Name 17 "SSBO0"
MemberName 17(SSBO0) 0 "a"
Name 19 "inBuf"
Name 37 "SSBO1"
MemberName 37(SSBO1) 0 "b"
Name 39 "outBuf"
Name 57 "MyStruct"
MemberName 57(MyStruct) 0 "foo"
MemberName 57(MyStruct) 1 "sb"
Name 58 "UBO"
MemberName 58(UBO) 0 "c"
Name 60 "uBuf"
Name 84 "Nested"
MemberName 84(Nested) 0 "f"
MemberName 84(Nested) 1 "S"
Name 86 "n"
Name 88 "Nested"
MemberName 88(Nested) 0 "f"
MemberName 88(Nested) 1 "S"
Name 89 "UBON"
MemberName 89(UBON) 0 "N1"
Name 91 "uBufN"
Name 122 "Nested"
MemberName 122(Nested) 0 "f"
MemberName 122(Nested) 1 "S"
Name 123 "SSBO1N"
MemberName 123(SSBO1N) 0 "N2"
Name 125 "outBufN"
Name 39 "SSBO1"
MemberName 39(SSBO1) 0 "b"
Name 41 "outBuf"
Name 58 "MyStruct"
MemberName 58(MyStruct) 0 "foo"
MemberName 58(MyStruct) 1 "sb"
Name 59 "UBO"
MemberName 59(UBO) 0 "c"
Name 61 "uBuf"
Name 86 "Nested"
MemberName 86(Nested) 0 "f"
MemberName 86(Nested) 1 "S"
Name 88 "n"
Name 90 "Nested"
MemberName 90(Nested) 0 "f"
MemberName 90(Nested) 1 "S"
Name 91 "UBON"
MemberName 91(UBON) 0 "N1"
Name 93 "uBufN"
Name 126 "Nested"
MemberName 126(Nested) 0 "f"
MemberName 126(Nested) 1 "S"
Name 127 "SSBO1N"
MemberName 127(SSBO1N) 0 "N2"
Name 129 "outBufN"
Decorate 15 ArrayStride 8
MemberDecorate 16(MyStruct) 0 Offset 0
MemberDecorate 16(MyStruct) 1 Offset 16
@@ -54,31 +54,31 @@ Warning, version 450 is not yet complete; most version-specific features are pre
Decorate 17(SSBO0) BufferBlock
Decorate 19(inBuf) DescriptorSet 0
Decorate 19(inBuf) Binding 0
MemberDecorate 37(SSBO1) 0 Offset 0
Decorate 37(SSBO1) BufferBlock
Decorate 39(outBuf) DescriptorSet 0
Decorate 39(outBuf) Binding 1
Decorate 56 ArrayStride 16
MemberDecorate 57(MyStruct) 0 Offset 0
MemberDecorate 57(MyStruct) 1 Offset 32
MemberDecorate 58(UBO) 0 Offset 0
Decorate 58(UBO) Block
Decorate 60(uBuf) DescriptorSet 0
Decorate 60(uBuf) Binding 2
Decorate 87 ArrayStride 48
MemberDecorate 88(Nested) 0 Offset 0
MemberDecorate 88(Nested) 1 Offset 16
MemberDecorate 89(UBON) 0 Offset 0
Decorate 89(UBON) Block
Decorate 91(uBufN) DescriptorSet 0
Decorate 91(uBufN) Binding 2
Decorate 121 ArrayStride 24
MemberDecorate 122(Nested) 0 Offset 0
MemberDecorate 122(Nested) 1 Offset 8
MemberDecorate 123(SSBO1N) 0 Offset 0
Decorate 123(SSBO1N) BufferBlock
Decorate 125(outBufN) DescriptorSet 0
Decorate 125(outBufN) Binding 1
MemberDecorate 39(SSBO1) 0 Offset 0
Decorate 39(SSBO1) BufferBlock
Decorate 41(outBuf) DescriptorSet 0
Decorate 41(outBuf) Binding 1
Decorate 57 ArrayStride 16
MemberDecorate 58(MyStruct) 0 Offset 0
MemberDecorate 58(MyStruct) 1 Offset 32
MemberDecorate 59(UBO) 0 Offset 0
Decorate 59(UBO) Block
Decorate 61(uBuf) DescriptorSet 0
Decorate 61(uBuf) Binding 2
Decorate 89 ArrayStride 48
MemberDecorate 90(Nested) 0 Offset 0
MemberDecorate 90(Nested) 1 Offset 16
MemberDecorate 91(UBON) 0 Offset 0
Decorate 91(UBON) Block
Decorate 93(uBufN) DescriptorSet 0
Decorate 93(uBufN) Binding 2
Decorate 125 ArrayStride 24
MemberDecorate 126(Nested) 0 Offset 0
MemberDecorate 126(Nested) 1 Offset 8
MemberDecorate 127(SSBO1N) 0 Offset 0
Decorate 127(SSBO1N) BufferBlock
Decorate 129(outBufN) DescriptorSet 0
Decorate 129(outBufN) Binding 1
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
@@ -100,44 +100,44 @@ Warning, version 450 is not yet complete; most version-specific features are pre
26: TypePointer Function 10
29: TypePointer Function 7(fvec2)
32: 20(int) Constant 1
35: TypePointer Function 11(bool)
37(SSBO1): TypeStruct 16(MyStruct)
38: TypePointer Uniform 37(SSBO1)
39(outBuf): 38(ptr) Variable Uniform
43: TypePointer Uniform 15
46: TypePointer Uniform 7(fvec2)
51: 8(int) Constant 0
52: 8(int) Constant 1
54: TypePointer Uniform 8(int)
56: TypeArray 7(fvec2) 9
57(MyStruct): TypeStruct 56 8(int)
58(UBO): TypeStruct 57(MyStruct)
59: TypePointer Uniform 58(UBO)
60(uBuf): 59(ptr) Variable Uniform
61: TypePointer Uniform 57(MyStruct)
83: TypeArray 12(MyStruct) 9
84(Nested): TypeStruct 6(float) 83
85: TypePointer Function 84(Nested)
87: TypeArray 57(MyStruct) 9
88(Nested): TypeStruct 6(float) 87
89(UBON): TypeStruct 88(Nested)
90: TypePointer Uniform 89(UBON)
91(uBufN): 90(ptr) Variable Uniform
92: TypePointer Uniform 88(Nested)
96: TypePointer Function 6(float)
99: TypePointer Function 83
121: TypeArray 16(MyStruct) 9
122(Nested): TypeStruct 6(float) 121
123(SSBO1N): TypeStruct 122(Nested)
124: TypePointer Uniform 123(SSBO1N)
125(outBufN): 124(ptr) Variable Uniform
127: TypePointer Uniform 122(Nested)
130: TypePointer Uniform 6(float)
133: TypePointer Uniform 121
35: 8(int) Constant 0
37: TypePointer Function 11(bool)
39(SSBO1): TypeStruct 16(MyStruct)
40: TypePointer Uniform 39(SSBO1)
41(outBuf): 40(ptr) Variable Uniform
45: TypePointer Uniform 15
48: TypePointer Uniform 7(fvec2)
53: 8(int) Constant 1
55: TypePointer Uniform 8(int)
57: TypeArray 7(fvec2) 9
58(MyStruct): TypeStruct 57 8(int)
59(UBO): TypeStruct 58(MyStruct)
60: TypePointer Uniform 59(UBO)
61(uBuf): 60(ptr) Variable Uniform
62: TypePointer Uniform 58(MyStruct)
85: TypeArray 12(MyStruct) 9
86(Nested): TypeStruct 6(float) 85
87: TypePointer Function 86(Nested)
89: TypeArray 58(MyStruct) 9
90(Nested): TypeStruct 6(float) 89
91(UBON): TypeStruct 90(Nested)
92: TypePointer Uniform 91(UBON)
93(uBufN): 92(ptr) Variable Uniform
94: TypePointer Uniform 90(Nested)
98: TypePointer Function 6(float)
101: TypePointer Function 85
125: TypeArray 16(MyStruct) 9
126(Nested): TypeStruct 6(float) 125
127(SSBO1N): TypeStruct 126(Nested)
128: TypePointer Uniform 127(SSBO1N)
129(outBufN): 128(ptr) Variable Uniform
131: TypePointer Uniform 126(Nested)
134: TypePointer Uniform 6(float)
137: TypePointer Uniform 125
4(main): 2 Function None 3
5: Label
14(t): 13(ptr) Variable Function
86(n): 85(ptr) Variable Function
88(n): 87(ptr) Variable Function
23: 22(ptr) AccessChain 19(inBuf) 21
24:16(MyStruct) Load 23
25: 15 CompositeExtract 24 0
@@ -149,116 +149,120 @@ Warning, version 450 is not yet complete; most version-specific features are pre
33: 29(ptr) AccessChain 27 32
Store 33 31
34: 8(int) CompositeExtract 24 1
36: 35(ptr) AccessChain 14(t) 32
Store 36 34
40:12(MyStruct) Load 14(t)
41: 22(ptr) AccessChain 39(outBuf) 21
42: 10 CompositeExtract 40 0
44: 43(ptr) AccessChain 41 21
45: 7(fvec2) CompositeExtract 42 0
47: 46(ptr) AccessChain 44 21
Store 47 45
48: 7(fvec2) CompositeExtract 42 1
49: 46(ptr) AccessChain 44 32
Store 49 48
50: 11(bool) CompositeExtract 40 1
53: 8(int) Select 50 52 51
55: 54(ptr) AccessChain 41 32
Store 55 53
62: 61(ptr) AccessChain 60(uBuf) 21
63:57(MyStruct) Load 62
64: 56 CompositeExtract 63 0
65: 26(ptr) AccessChain 14(t) 21
66: 7(fvec2) CompositeExtract 64 0
67: 29(ptr) AccessChain 65 21
Store 67 66
68: 7(fvec2) CompositeExtract 64 1
69: 29(ptr) AccessChain 65 32
Store 69 68
70: 8(int) CompositeExtract 63 1
71: 35(ptr) AccessChain 14(t) 32
Store 71 70
72:12(MyStruct) Load 14(t)
73: 22(ptr) AccessChain 39(outBuf) 21
74: 10 CompositeExtract 72 0
75: 43(ptr) AccessChain 73 21
76: 7(fvec2) CompositeExtract 74 0
77: 46(ptr) AccessChain 75 21
Store 77 76
78: 7(fvec2) CompositeExtract 74 1
79: 46(ptr) AccessChain 75 32
36: 11(bool) INotEqual 34 35
38: 37(ptr) AccessChain 14(t) 32
Store 38 36
42:12(MyStruct) Load 14(t)
43: 22(ptr) AccessChain 41(outBuf) 21
44: 10 CompositeExtract 42 0
46: 45(ptr) AccessChain 43 21
47: 7(fvec2) CompositeExtract 44 0
49: 48(ptr) AccessChain 46 21
Store 49 47
50: 7(fvec2) CompositeExtract 44 1
51: 48(ptr) AccessChain 46 32
Store 51 50
52: 11(bool) CompositeExtract 42 1
54: 8(int) Select 52 53 35
56: 55(ptr) AccessChain 43 32
Store 56 54
63: 62(ptr) AccessChain 61(uBuf) 21
64:58(MyStruct) Load 63
65: 57 CompositeExtract 64 0
66: 26(ptr) AccessChain 14(t) 21
67: 7(fvec2) CompositeExtract 65 0
68: 29(ptr) AccessChain 66 21
Store 68 67
69: 7(fvec2) CompositeExtract 65 1
70: 29(ptr) AccessChain 66 32
Store 70 69
71: 8(int) CompositeExtract 64 1
72: 11(bool) INotEqual 71 35
73: 37(ptr) AccessChain 14(t) 32
Store 73 72
74:12(MyStruct) Load 14(t)
75: 22(ptr) AccessChain 41(outBuf) 21
76: 10 CompositeExtract 74 0
77: 45(ptr) AccessChain 75 21
78: 7(fvec2) CompositeExtract 76 0
79: 48(ptr) AccessChain 77 21
Store 79 78
80: 11(bool) CompositeExtract 72 1
81: 8(int) Select 80 52 51
82: 54(ptr) AccessChain 73 32
Store 82 81
93: 92(ptr) AccessChain 91(uBufN) 21
94: 88(Nested) Load 93
95: 6(float) CompositeExtract 94 0
97: 96(ptr) AccessChain 86(n) 21
Store 97 95
98: 87 CompositeExtract 94 1
100: 99(ptr) AccessChain 86(n) 32
101:57(MyStruct) CompositeExtract 98 0
102: 13(ptr) AccessChain 100 21
103: 56 CompositeExtract 101 0
104: 26(ptr) AccessChain 102 21
105: 7(fvec2) CompositeExtract 103 0
106: 29(ptr) AccessChain 104 21
Store 106 105
107: 7(fvec2) CompositeExtract 103 1
108: 29(ptr) AccessChain 104 32
80: 7(fvec2) CompositeExtract 76 1
81: 48(ptr) AccessChain 77 32
Store 81 80
82: 11(bool) CompositeExtract 74 1
83: 8(int) Select 82 53 35
84: 55(ptr) AccessChain 75 32
Store 84 83
95: 94(ptr) AccessChain 93(uBufN) 21
96: 90(Nested) Load 95
97: 6(float) CompositeExtract 96 0
99: 98(ptr) AccessChain 88(n) 21
Store 99 97
100: 89 CompositeExtract 96 1
102: 101(ptr) AccessChain 88(n) 32
103:58(MyStruct) CompositeExtract 100 0
104: 13(ptr) AccessChain 102 21
105: 57 CompositeExtract 103 0
106: 26(ptr) AccessChain 104 21
107: 7(fvec2) CompositeExtract 105 0
108: 29(ptr) AccessChain 106 21
Store 108 107
109: 8(int) CompositeExtract 101 1
110: 35(ptr) AccessChain 102 32
109: 7(fvec2) CompositeExtract 105 1
110: 29(ptr) AccessChain 106 32
Store 110 109
111:57(MyStruct) CompositeExtract 98 1
112: 13(ptr) AccessChain 100 32
113: 56 CompositeExtract 111 0
114: 26(ptr) AccessChain 112 21
115: 7(fvec2) CompositeExtract 113 0
116: 29(ptr) AccessChain 114 21
Store 116 115
117: 7(fvec2) CompositeExtract 113 1
118: 29(ptr) AccessChain 114 32
Store 118 117
119: 8(int) CompositeExtract 111 1
120: 35(ptr) AccessChain 112 32
Store 120 119
126: 84(Nested) Load 86(n)
128: 127(ptr) AccessChain 125(outBufN) 21
129: 6(float) CompositeExtract 126 0
131: 130(ptr) AccessChain 128 21
Store 131 129
132: 83 CompositeExtract 126 1
134: 133(ptr) AccessChain 128 32
135:12(MyStruct) CompositeExtract 132 0
136: 22(ptr) AccessChain 134 21
137: 10 CompositeExtract 135 0
138: 43(ptr) AccessChain 136 21
139: 7(fvec2) CompositeExtract 137 0
140: 46(ptr) AccessChain 138 21
Store 140 139
141: 7(fvec2) CompositeExtract 137 1
142: 46(ptr) AccessChain 138 32
Store 142 141
143: 11(bool) CompositeExtract 135 1
144: 8(int) Select 143 52 51
145: 54(ptr) AccessChain 136 32
Store 145 144
146:12(MyStruct) CompositeExtract 132 1
147: 22(ptr) AccessChain 134 32
148: 10 CompositeExtract 146 0
149: 43(ptr) AccessChain 147 21
150: 7(fvec2) CompositeExtract 148 0
151: 46(ptr) AccessChain 149 21
Store 151 150
152: 7(fvec2) CompositeExtract 148 1
153: 46(ptr) AccessChain 149 32
Store 153 152
154: 11(bool) CompositeExtract 146 1
155: 8(int) Select 154 52 51
156: 54(ptr) AccessChain 147 32
Store 156 155
111: 8(int) CompositeExtract 103 1
112: 11(bool) INotEqual 111 35
113: 37(ptr) AccessChain 104 32
Store 113 112
114:58(MyStruct) CompositeExtract 100 1
115: 13(ptr) AccessChain 102 32
116: 57 CompositeExtract 114 0
117: 26(ptr) AccessChain 115 21
118: 7(fvec2) CompositeExtract 116 0
119: 29(ptr) AccessChain 117 21
Store 119 118
120: 7(fvec2) CompositeExtract 116 1
121: 29(ptr) AccessChain 117 32
Store 121 120
122: 8(int) CompositeExtract 114 1
123: 11(bool) INotEqual 122 35
124: 37(ptr) AccessChain 115 32
Store 124 123
130: 86(Nested) Load 88(n)
132: 131(ptr) AccessChain 129(outBufN) 21
133: 6(float) CompositeExtract 130 0
135: 134(ptr) AccessChain 132 21
Store 135 133
136: 85 CompositeExtract 130 1
138: 137(ptr) AccessChain 132 32
139:12(MyStruct) CompositeExtract 136 0
140: 22(ptr) AccessChain 138 21
141: 10 CompositeExtract 139 0
142: 45(ptr) AccessChain 140 21
143: 7(fvec2) CompositeExtract 141 0
144: 48(ptr) AccessChain 142 21
Store 144 143
145: 7(fvec2) CompositeExtract 141 1
146: 48(ptr) AccessChain 142 32
Store 146 145
147: 11(bool) CompositeExtract 139 1
148: 8(int) Select 147 53 35
149: 55(ptr) AccessChain 140 32
Store 149 148
150:12(MyStruct) CompositeExtract 136 1
151: 22(ptr) AccessChain 138 32
152: 10 CompositeExtract 150 0
153: 45(ptr) AccessChain 151 21
154: 7(fvec2) CompositeExtract 152 0
155: 48(ptr) AccessChain 153 21
Store 155 154
156: 7(fvec2) CompositeExtract 152 1
157: 48(ptr) AccessChain 153 32
Store 157 156
158: 11(bool) CompositeExtract 150 1
159: 8(int) Select 158 53 35
160: 55(ptr) AccessChain 151 32
Store 160 159
Return
FunctionEnd

View File

@@ -2,7 +2,10 @@ spv.noLocation.vert
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
ERROR: spv.noLocation.vert:4: 'location' : SPIR-V requires location for user input/output
ERROR: spv.noLocation.vert:8: 'location' : SPIR-V requires location for user input/output
ERROR: 2 compilation errors. No code generated.
ERROR: spv.noLocation.vert:19: 'location' : SPIR-V requires location for user input/output
ERROR: spv.noLocation.vert:25: 'location' : SPIR-V requires location for user input/output
ERROR: spv.noLocation.vert:29: 'location' : SPIR-V requires location for user input/output
ERROR: 5 compilation errors. No code generated.
SPIR-V is not generated for failed compile or link

View File

@@ -20,6 +20,7 @@ spv.prepost.frag
Name 66 "z"
Name 73 "v"
Name 90 "gl_FragColor"
Decorate 90(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeInt 32 1

View File

@@ -13,6 +13,7 @@ spv.simpleFunctionCall.frag
Name 9 "foo("
Name 12 "BaseColor"
Name 17 "gl_FragColor"
Decorate 17(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -36,6 +36,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to
MemberDecorate 9(lunarStruct2) 0 RelaxedPrecision
MemberDecorate 10(lunarStruct3) 1 RelaxedPrecision
Decorate 16 RelaxedPrecision
Decorate 31(gl_FragColor) Location 0
Decorate 40(samp2D) DescriptorSet 0
Decorate 44(coord) RelaxedPrecision
Decorate 45 RelaxedPrecision

View File

@@ -40,6 +40,7 @@ spv.structDeref.frag
Name 99 "gl_FragColor"
Name 116 "samp2D"
Name 122 "foo2"
Decorate 99(gl_FragColor) Location 0
Decorate 116(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2

View File

@@ -24,6 +24,7 @@ spv.structure.frag
Name 50 "samp2D"
Name 54 "coord"
Name 59 "foo"
Decorate 45(gl_FragColor) Location 0
Decorate 50(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2

View File

@@ -24,6 +24,7 @@ spv.swizzle.frag
Name 81 "c"
Name 83 "rep"
Name 107 "blend"
Decorate 69(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -25,6 +25,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 49 "blend"
Decorate 16(texSampler2D) DescriptorSet 0
Decorate 33(texSampler3D) DescriptorSet 0
Decorate 43(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -45,6 +45,7 @@ WARNING: 0:12: varying deprecated in version 130; may be removed in future relea
Decorate 130(texSamplerCube) DescriptorSet 0
Decorate 145(shadowSampler1D) DescriptorSet 0
Decorate 164(shadowSampler2D) DescriptorSet 0
Decorate 291(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -55,6 +55,7 @@ spv.types.frag
Decorate 111(i_i3) Flat
Decorate 118(u_i4) Flat
Decorate 120(i_i4) Flat
Decorate 160(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeBool

View File

@@ -16,6 +16,7 @@ spv.uniformArray.frag
Name 35 "alpha"
Name 47 "gl_FragColor"
Name 52 "texSampler2D"
Decorate 47(gl_FragColor) Location 0
Decorate 52(texSampler2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2

View File

@@ -38,6 +38,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Decorate 20(foo3) Flat
Decorate 34(foo2) Flat
Decorate 36(foo) Flat
Decorate 54(gl_FragColor) Location 0
Decorate 59(samp2D) DescriptorSet 0
2: TypeVoid
3: TypeFunction 2

View File

@@ -18,6 +18,7 @@ spv.varyingArray.frag
Name 45 "gl_FragColor"
Name 48 "foo"
Decorate 13(texSampler2D) DescriptorSet 0
Decorate 45(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -22,6 +22,7 @@ spv.varyingArrayIndirect.frag
Decorate 13(texSampler2D) DescriptorSet 0
Decorate 22(b) Flat
Decorate 31(a) Flat
Decorate 56(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -20,6 +20,7 @@ Warning, version 400 is not yet complete; most version-specific features are pre
Name 37 "gl_FragColor"
Name 40 "BaseColor"
Name 42 "d"
Decorate 37(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
10: TypeFloat 32

View File

@@ -15,6 +15,7 @@ spv.whileLoop.frag
Name 24 "d"
Name 28 "bigColor"
Name 33 "gl_FragColor"
Decorate 33(gl_FragColor) Location 0
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32

View File

@@ -0,0 +1,52 @@
int main() : SV_TARGET
{
// integer mat constructors
const int4x4 var441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
const int4x4 var442 = int4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
int4x4 var443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
int4x4 var444 = int4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
const int4x2 var421 = { 0,1, 1,1, 1,0, 0,0 };
const int4x2 var422 = int4x2( 0,1, 1,1, 1,0, 0,0 );
int4x2 var423 = { 0,1, 1,1, 1,0, 0,0 };
int4x2 var424 = int4x2( 0,1, 1,1, 1,0, 0,0 );
const int3x2 var321 = { 0,1, 1,1, 1,0 };
const int3x2 var322 = int3x2( 0,1, 1,1, 1,0 );
int3x2 var323 = { 0,1, 1,1, 1,0 };
int3x2 var234 = int3x2( 0,1, 1,1, 1,0);
// unsigned integer mat constructors
const uint4x4 uvar441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
const uint4x4 uvar442 = uint4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
uint4x4 uvar443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
uint4x4 uvar444 = uint4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
const uint4x2 uvar421 = { 0,1, 1,1, 1,0, 0,0 };
const uint4x2 uvar422 = uint4x2( 0,1, 1,1, 1,0, 0,0 );
uint4x2 uvar423 = { 0,1, 1,1, 1,0, 0,0 };
uint4x2 uvar424 = uint4x2( 0,1, 1,1, 1,0, 0,0 );
const uint3x2 uvar321 = { 0,1, 1,1, 1,0 };
const uint3x2 uvar322 = uint3x2( 0,1, 1,1, 1,0 );
uint3x2 uvar323 = { 0,1, 1,1, 1,0 };
uint3x2 uvar234 = uint3x2( 0,1, 1,1, 1,0);
// boolean mat constructors
const bool4x4 bvar441 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
const bool4x4 bvar442 = bool4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
bool4x4 bvar443 = { 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 };
bool4x4 bvar444 = bool4x4( 0,1,0,0, 1,1,0,0, 1,0,0,0, 0,0,0,0 );
const bool4x2 bvar421 = { 0,1, 1,1, 1,0, 0,0 };
const bool4x2 bvar422 = bool4x2( 0,1, 1,1, 1,0, 0,0 );
bool4x2 bvar423 = { 0,1, 1,1, 1,0, 0,0 };
bool4x2 bvar424 = bool4x2( 0,1, 1,1, 1,0, 0,0 );
const bool3x2 bvar321 = { 0,1, 1,1, 1,0 };
const bool3x2 bvar322 = bool3x2( 0,1, 1,1, 1,0 );
bool3x2 bvar323 = { 0,1, 1,1, 1,0 };
bool3x2 bvar234 = bool3x2( 0,1, 1,1, 1,0);
return 0;
}

View File

@@ -0,0 +1,25 @@
float4 fun0()
{
return 1.0f;
}
uint fun2(float4 col)
{
return 7;
}
float4 fun4(uint id1, uint id2)
{
return id1 * id2;
}
float4 fun1(int index)
{
uint entityId = fun2(fun0());
return fun4(entityId, entityId);
}
int main() : SV_TARGET
{
return fun1;
}

View File

@@ -0,0 +1,17 @@
Texture2D<float> tf1;
Texture2D<float4> tf4;
RWTexture2D<float> twf1;
RWTexture2D<float4> twf4;
float Func(Texture2D<float> DummyTex) { return 1.0f; }
float4 Func(Texture2D<float4> DummyTex) { return float4(0,0,0,0); }
float Func(RWTexture2D<float> DummyTex) { return 1.0f; }
float4 Func(RWTexture2D<float4> DummyTex) { return float4(0,0,0,0); }
float4 main() : SV_TARGET
{
return Func(tf1) + Func(tf4) + Func(twf1) + Func(twf4);
}

View File

@@ -1,14 +1,39 @@
#version 450
layout(location = 1) in vec4 in1;
in vec4 in2;
in vec4 in2; // ERROR
layout(location = 3) in vec4 in3;
layout(location = 1) out vec4 out1;
out vec4 out2;
out vec4 out2; // ERROR
layout(location = 3) out vec4 out3;
layout(location = 10) out inb1 {
vec4 a;
vec4 b;
} inbi1;
out inb2 {
layout(location = 12) vec4 a;
layout(location = 13) vec4 b;
} inbi2;
out inb3 { // ERROR
vec4 a;
vec4 b;
} inbi3;
layout(location = 14) out struct S1 { vec4 a; } s1;
out struct S2 { vec4 a; } s2; // ERROR
struct SS { int a; };
out layout(location = 15) SS ss1;
out SS ss2; // ERROR
out gl_PerVertex {
vec4 gl_Position;
float gl_ClipDistance[2];
};
void main()
{
gl_ClipDistance[0] = 1.0;
}

View File

@@ -436,6 +436,33 @@ enum TOperator {
EOpConstructDMat4x2,
EOpConstructDMat4x3,
EOpConstructDMat4x4,
EOpConstructIMat2x2,
EOpConstructIMat2x3,
EOpConstructIMat2x4,
EOpConstructIMat3x2,
EOpConstructIMat3x3,
EOpConstructIMat3x4,
EOpConstructIMat4x2,
EOpConstructIMat4x3,
EOpConstructIMat4x4,
EOpConstructUMat2x2,
EOpConstructUMat2x3,
EOpConstructUMat2x4,
EOpConstructUMat3x2,
EOpConstructUMat3x3,
EOpConstructUMat3x4,
EOpConstructUMat4x2,
EOpConstructUMat4x3,
EOpConstructUMat4x4,
EOpConstructBMat2x2,
EOpConstructBMat2x3,
EOpConstructBMat2x4,
EOpConstructBMat3x2,
EOpConstructBMat3x3,
EOpConstructBMat3x4,
EOpConstructBMat4x2,
EOpConstructBMat4x3,
EOpConstructBMat4x4,
#ifdef AMD_EXTENSIONS
EOpConstructFloat16,
EOpConstructF16Vec2,

View File

@@ -5187,7 +5187,15 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
SpecialQualifier("gl_FrontFacing", EvqFace, EbvFace, symbolTable);
SpecialQualifier("gl_FragCoord", EvqFragCoord, EbvFragCoord, symbolTable);
SpecialQualifier("gl_PointCoord", EvqPointCoord, EbvPointCoord, symbolTable);
SpecialQualifier("gl_FragColor", EvqFragColor, EbvFragColor, symbolTable);
if (spvVersion.spv == 0)
SpecialQualifier("gl_FragColor", EvqFragColor, EbvFragColor, symbolTable);
else {
TSymbol* symbol = symbolTable.find("gl_FragColor");
if (symbol) {
symbol->getWritableType().getQualifier().storage = EvqVaryingOut;
symbol->getWritableType().getQualifier().layoutLocation = 0;
}
}
SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable);
SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable);
SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable);

View File

@@ -1220,21 +1220,79 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
break;
#endif
case EbtInt:
switch(type.getVectorSize()) {
case 1: op = EOpConstructInt; break;
case 2: op = EOpConstructIVec2; break;
case 3: op = EOpConstructIVec3; break;
case 4: op = EOpConstructIVec4; break;
default: break; // some compilers want this
if (type.getMatrixCols()) {
switch (type.getMatrixCols()) {
case 2:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructIMat2x2; break;
case 3: op = EOpConstructIMat2x3; break;
case 4: op = EOpConstructIMat2x4; break;
default: break; // some compilers want this
}
break;
case 3:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructIMat3x2; break;
case 3: op = EOpConstructIMat3x3; break;
case 4: op = EOpConstructIMat3x4; break;
default: break; // some compilers want this
}
break;
case 4:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructIMat4x2; break;
case 3: op = EOpConstructIMat4x3; break;
case 4: op = EOpConstructIMat4x4; break;
default: break; // some compilers want this
}
break;
}
} else {
switch(type.getVectorSize()) {
case 1: op = EOpConstructInt; break;
case 2: op = EOpConstructIVec2; break;
case 3: op = EOpConstructIVec3; break;
case 4: op = EOpConstructIVec4; break;
default: break; // some compilers want this
}
}
break;
case EbtUint:
switch(type.getVectorSize()) {
case 1: op = EOpConstructUint; break;
case 2: op = EOpConstructUVec2; break;
case 3: op = EOpConstructUVec3; break;
case 4: op = EOpConstructUVec4; break;
default: break; // some compilers want this
if (type.getMatrixCols()) {
switch (type.getMatrixCols()) {
case 2:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructUMat2x2; break;
case 3: op = EOpConstructUMat2x3; break;
case 4: op = EOpConstructUMat2x4; break;
default: break; // some compilers want this
}
break;
case 3:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructUMat3x2; break;
case 3: op = EOpConstructUMat3x3; break;
case 4: op = EOpConstructUMat3x4; break;
default: break; // some compilers want this
}
break;
case 4:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructUMat4x2; break;
case 3: op = EOpConstructUMat4x3; break;
case 4: op = EOpConstructUMat4x4; break;
default: break; // some compilers want this
}
break;
}
} else {
switch(type.getVectorSize()) {
case 1: op = EOpConstructUint; break;
case 2: op = EOpConstructUVec2; break;
case 3: op = EOpConstructUVec3; break;
case 4: op = EOpConstructUVec4; break;
default: break; // some compilers want this
}
}
break;
case EbtInt64:
@@ -1256,12 +1314,41 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const
}
break;
case EbtBool:
switch(type.getVectorSize()) {
case 1: op = EOpConstructBool; break;
case 2: op = EOpConstructBVec2; break;
case 3: op = EOpConstructBVec3; break;
case 4: op = EOpConstructBVec4; break;
default: break; // some compilers want this
if (type.getMatrixCols()) {
switch (type.getMatrixCols()) {
case 2:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructBMat2x2; break;
case 3: op = EOpConstructBMat2x3; break;
case 4: op = EOpConstructBMat2x4; break;
default: break; // some compilers want this
}
break;
case 3:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructBMat3x2; break;
case 3: op = EOpConstructBMat3x3; break;
case 4: op = EOpConstructBMat3x4; break;
default: break; // some compilers want this
}
break;
case 4:
switch (type.getMatrixRows()) {
case 2: op = EOpConstructBMat4x2; break;
case 3: op = EOpConstructBMat4x3; break;
case 4: op = EOpConstructBMat4x4; break;
default: break; // some compilers want this
}
break;
}
} else {
switch(type.getVectorSize()) {
case 1: op = EOpConstructBool; break;
case 2: op = EOpConstructBVec2; break;
case 3: op = EOpConstructBVec3; break;
case 4: op = EOpConstructBVec4; break;
default: break; // some compilers want this
}
}
break;
default:

View File

@@ -4332,14 +4332,21 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb
default:
break;
}
} else if (spvVersion.spv > 0) {
}
// user-variable location check, which are required for SPIR-V in/out:
// - variables have it directly,
// - blocks have it on each member (already enforced), so check first one
if (spvVersion.spv > 0 && !parsingBuiltins && qualifier.builtIn == EbvNone &&
!qualifier.hasLocation() && !intermediate.getAutoMapLocations()) {
switch (qualifier.storage) {
case EvqVaryingIn:
case EvqVaryingOut:
if (! parsingBuiltins && qualifier.builtIn == EbvNone) {
if (!intermediate.getAutoMapLocations())
error(loc, "SPIR-V requires location for user input/output", "location", "");
}
if (type.getBasicType() != EbtBlock ||
(!(*type.getStruct())[0].type->getQualifier().hasLocation() &&
(*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))
error(loc, "SPIR-V requires location for user input/output", "location", "");
break;
default:
break;

View File

@@ -99,6 +99,14 @@ void TType::buildMangledName(TString& mangledName) const
case EsdSubpass: mangledName += "P"; break;
default: break; // some compilers want this
}
switch (sampler.vectorSize) {
case 1: mangledName += "1"; break;
case 2: mangledName += "2"; break;
case 3: mangledName += "3"; break;
case 4: break; // default to prior name mangle behavior
}
if (sampler.ms)
mangledName += "M";
break;

View File

@@ -505,6 +505,33 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node
case EOpConstructDMat4x2: out.debug << "Construct dmat4x2"; break;
case EOpConstructDMat4x3: out.debug << "Construct dmat4x3"; break;
case EOpConstructDMat4x4: out.debug << "Construct dmat4"; break;
case EOpConstructIMat2x2: out.debug << "Construct imat2"; break;
case EOpConstructIMat2x3: out.debug << "Construct imat2x3"; break;
case EOpConstructIMat2x4: out.debug << "Construct imat2x4"; break;
case EOpConstructIMat3x2: out.debug << "Construct imat3x2"; break;
case EOpConstructIMat3x3: out.debug << "Construct imat3"; break;
case EOpConstructIMat3x4: out.debug << "Construct imat3x4"; break;
case EOpConstructIMat4x2: out.debug << "Construct imat4x2"; break;
case EOpConstructIMat4x3: out.debug << "Construct imat4x3"; break;
case EOpConstructIMat4x4: out.debug << "Construct imat4"; break;
case EOpConstructUMat2x2: out.debug << "Construct umat2"; break;
case EOpConstructUMat2x3: out.debug << "Construct umat2x3"; break;
case EOpConstructUMat2x4: out.debug << "Construct umat2x4"; break;
case EOpConstructUMat3x2: out.debug << "Construct umat3x2"; break;
case EOpConstructUMat3x3: out.debug << "Construct umat3"; break;
case EOpConstructUMat3x4: out.debug << "Construct umat3x4"; break;
case EOpConstructUMat4x2: out.debug << "Construct umat4x2"; break;
case EOpConstructUMat4x3: out.debug << "Construct umat4x3"; break;
case EOpConstructUMat4x4: out.debug << "Construct umat4"; break;
case EOpConstructBMat2x2: out.debug << "Construct bmat2"; break;
case EOpConstructBMat2x3: out.debug << "Construct bmat2x3"; break;
case EOpConstructBMat2x4: out.debug << "Construct bmat2x4"; break;
case EOpConstructBMat3x2: out.debug << "Construct bmat3x2"; break;
case EOpConstructBMat3x3: out.debug << "Construct bmat3"; break;
case EOpConstructBMat3x4: out.debug << "Construct bmat3x4"; break;
case EOpConstructBMat4x2: out.debug << "Construct bmat4x2"; break;
case EOpConstructBMat4x3: out.debug << "Construct bmat4x3"; break;
case EOpConstructBMat4x4: out.debug << "Construct bmat4"; break;
#ifdef AMD_EXTENSIONS
case EOpConstructFloat16: out.debug << "Construct float16_t"; break;
case EOpConstructF16Vec2: out.debug << "Construct f16vec2"; break;

View File

@@ -100,6 +100,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.conditional.frag", "PixelShaderFunction"},
{"hlsl.constantbuffer.frag", "main"},
{"hlsl.constructexpr.frag", "main"},
{"hlsl.constructimat.frag", "main"},
{"hlsl.depthGreater.frag", "PixelShaderFunction"},
{"hlsl.depthLess.frag", "PixelShaderFunction"},
{"hlsl.discard.frag", "PixelShaderFunction"},
@@ -131,6 +132,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.domain.1.tese", "main"},
{"hlsl.domain.2.tese", "main"},
{"hlsl.domain.3.tese", "main"},
{"hlsl.function.frag", "main"},
{"hlsl.hull.1.tesc", "main"},
{"hlsl.hull.2.tesc", "main"},
{"hlsl.hull.void.tesc", "main"},
@@ -287,6 +289,7 @@ INSTANTIATE_TEST_CASE_P(
{"hlsl.swizzle.frag", "PixelShaderFunction"},
{"hlsl.templatetypes.frag", "PixelShaderFunction"},
{"hlsl.tx.bracket.frag", "main"},
{"hlsl.tx.overload.frag", "main"},
{"hlsl.type.half.frag", "main"},
{"hlsl.type.identifier.frag", "main"},
{"hlsl.typeGraphCopy.vert", "main"},

View File

@@ -2988,13 +2988,19 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType
const TOperator op = node->getAsOperator()->getOp();
const TIntermAggregate* argAggregate = arguments ? arguments->getAsAggregate() : nullptr;
// Bail out if not a sampler method
// Bail out if not a sampler method.
// Note though this is odd to do before checking the op, because the op
// could be something that takes the arguments, and the function in question
// takes the result of the op. So, this is not the final word.
if (arguments != nullptr) {
if ((argAggregate != nullptr && argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler))
return;
if (argAggregate == nullptr && arguments->getAsTyped()->getBasicType() != EbtSampler)
return;
if (argAggregate == nullptr) {
if (arguments->getAsTyped()->getBasicType() != EbtSampler)
return;
} else {
if (argAggregate->getSequence().size() == 0 ||
argAggregate->getSequence()[0]->getAsTyped()->getBasicType() != EbtSampler)
return;
}
}
switch (op) {
@@ -5150,6 +5156,33 @@ bool HlslParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node
case EOpConstructDMat4x2:
case EOpConstructDMat4x3:
case EOpConstructDMat4x4:
case EOpConstructIMat2x2:
case EOpConstructIMat2x3:
case EOpConstructIMat2x4:
case EOpConstructIMat3x2:
case EOpConstructIMat3x3:
case EOpConstructIMat3x4:
case EOpConstructIMat4x2:
case EOpConstructIMat4x3:
case EOpConstructIMat4x4:
case EOpConstructUMat2x2:
case EOpConstructUMat2x3:
case EOpConstructUMat2x4:
case EOpConstructUMat3x2:
case EOpConstructUMat3x3:
case EOpConstructUMat3x4:
case EOpConstructUMat4x2:
case EOpConstructUMat4x3:
case EOpConstructUMat4x4:
case EOpConstructBMat2x2:
case EOpConstructBMat2x3:
case EOpConstructBMat2x4:
case EOpConstructBMat3x2:
case EOpConstructBMat3x3:
case EOpConstructBMat3x4:
case EOpConstructBMat4x2:
case EOpConstructBMat4x3:
case EOpConstructBMat4x4:
constructingMatrix = true;
break;
default:
@@ -7274,6 +7307,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructIVec2:
case EOpConstructIVec3:
case EOpConstructIVec4:
case EOpConstructIMat2x2:
case EOpConstructIMat2x3:
case EOpConstructIMat2x4:
case EOpConstructIMat3x2:
case EOpConstructIMat3x3:
case EOpConstructIMat3x4:
case EOpConstructIMat4x2:
case EOpConstructIMat4x3:
case EOpConstructIMat4x4:
case EOpConstructInt:
basicOp = EOpConstructInt;
break;
@@ -7281,6 +7323,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructUVec2:
case EOpConstructUVec3:
case EOpConstructUVec4:
case EOpConstructUMat2x2:
case EOpConstructUMat2x3:
case EOpConstructUMat2x4:
case EOpConstructUMat3x2:
case EOpConstructUMat3x3:
case EOpConstructUMat3x4:
case EOpConstructUMat4x2:
case EOpConstructUMat4x3:
case EOpConstructUMat4x4:
case EOpConstructUint:
basicOp = EOpConstructUint;
break;
@@ -7288,6 +7339,15 @@ TIntermTyped* HlslParseContext::constructBuiltIn(const TType& type, TOperator op
case EOpConstructBVec2:
case EOpConstructBVec3:
case EOpConstructBVec4:
case EOpConstructBMat2x2:
case EOpConstructBMat2x3:
case EOpConstructBMat2x4:
case EOpConstructBMat3x2:
case EOpConstructBMat3x3:
case EOpConstructBMat3x4:
case EOpConstructBMat4x2:
case EOpConstructBMat4x3:
case EOpConstructBMat4x4:
case EOpConstructBool:
basicOp = EOpConstructBool;
break;