SPV: Implement all matrix operators {+,-,*,/} for {matrix,scalar,vector}.

This commit is contained in:
John Kessenich 2015-12-12 12:28:14 -07:00
parent 494a02a2b0
commit 04bb8a01d6
9 changed files with 1140 additions and 76 deletions

View File

@ -108,6 +108,7 @@ protected:
spv::Id handleUserFunctionCall(const glslang::TIntermAggregate*);
spv::Id createBinaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right, glslang::TBasicType typeProxy, bool reduceComparison = true);
spv::Id createBinaryMatrixOperation(spv::Op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right);
spv::Id createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand,glslang::TBasicType typeProxy);
spv::Id createConversion(glslang::TOperator op, spv::Decoration precision, spv::Id destTypeId, spv::Id operand);
spv::Id makeSmearedConstant(spv::Id constant, int vectorSize);
@ -2122,26 +2123,17 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
break;
case glslang::EOpVectorTimesMatrix:
case glslang::EOpVectorTimesMatrixAssign:
assert(builder.isVector(left));
assert(builder.isMatrix(right));
binOp = spv::OpVectorTimesMatrix;
break;
case glslang::EOpMatrixTimesVector:
assert(builder.isMatrix(left));
assert(builder.isVector(right));
binOp = spv::OpMatrixTimesVector;
break;
case glslang::EOpMatrixTimesScalar:
case glslang::EOpMatrixTimesScalarAssign:
if (builder.isMatrix(right))
std::swap(left, right);
assert(builder.isScalar(right));
binOp = spv::OpMatrixTimesScalar;
break;
case glslang::EOpMatrixTimesMatrix:
case glslang::EOpMatrixTimesMatrixAssign:
assert(builder.isMatrix(left));
assert(builder.isMatrix(right));
binOp = spv::OpMatrixTimesMatrix;
break;
case glslang::EOpOuterProduct:
@ -2220,29 +2212,8 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
// handle mapped binary operations (should be non-comparison)
if (binOp != spv::OpNop) {
assert(comparison == false);
if (builder.isMatrix(left) || builder.isMatrix(right)) {
switch (binOp) {
case spv::OpMatrixTimesScalar:
case spv::OpVectorTimesMatrix:
case spv::OpMatrixTimesVector:
case spv::OpMatrixTimesMatrix:
break;
case spv::OpFDiv:
// turn it into a multiply...
assert(builder.isMatrix(left) && builder.isScalar(right));
right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
binOp = spv::OpFMul;
break;
default:
spv::MissingFunctionality("binary operation on matrix");
break;
}
spv::Id id = builder.createBinOp(binOp, typeId, left, right);
builder.setPrecision(id, precision);
return id;
}
if (builder.isMatrix(left) || builder.isMatrix(right))
return createBinaryMatrixOperation(binOp, precision, typeId, left, right);
// No matrix involved; make both operands be the same number of components, if needed
if (needMatchingVectors)
@ -2326,6 +2297,111 @@ spv::Id TGlslangToSpvTraverser::createBinaryOperation(glslang::TOperator op, spv
return 0;
}
//
// Translate AST matrix operation to SPV operation, already having SPV-based operands/types.
// These can be any of:
//
// matrix * scalar
// scalar * matrix
// matrix * matrix linear algebraic
// matrix * vector
// vector * matrix
// matrix * matrix componentwise
// matrix op matrix op in {+, -, /}
// matrix op scalar op in {+, -, /}
// scalar op matrix op in {+, -, /}
//
spv::Id TGlslangToSpvTraverser::createBinaryMatrixOperation(spv::Op op, spv::Decoration precision, spv::Id typeId, spv::Id left, spv::Id right)
{
bool firstClass = true;
// First, handle first-class matrix operations (* and matrix/scalar)
switch (op) {
case spv::OpFDiv:
if (builder.isMatrix(left) && builder.isScalar(right)) {
// turn matrix / scalar into a multiply...
right = builder.createBinOp(spv::OpFDiv, builder.getTypeId(right), builder.makeFloatConstant(1.0F), right);
op = spv::OpMatrixTimesScalar;
} else
firstClass = false;
break;
case spv::OpMatrixTimesScalar:
if (builder.isMatrix(right))
std::swap(left, right);
assert(builder.isScalar(right));
break;
case spv::OpVectorTimesMatrix:
assert(builder.isVector(left));
assert(builder.isMatrix(right));
break;
case spv::OpMatrixTimesVector:
assert(builder.isMatrix(left));
assert(builder.isVector(right));
break;
case spv::OpMatrixTimesMatrix:
assert(builder.isMatrix(left));
assert(builder.isMatrix(right));
break;
default:
firstClass = false;
break;
}
if (firstClass) {
spv::Id id = builder.createBinOp(op, typeId, left, right);
builder.setPrecision(id, precision);
return id;
}
// Handle component-wise +, -, *, and / for all combinations of type.
// The result type of all of them is the same type as the (a) matrix operand.
// The algorithm is to:
// - break the matrix(es) into vectors
// - smear any scalar to a vector
// - do vector operations
// - make a matrix out the vector results
switch (op) {
case spv::OpFAdd:
case spv::OpFSub:
case spv::OpFDiv:
case spv::OpFMul:
{
// one time set up...
bool leftMat = builder.isMatrix(left);
bool rightMat = builder.isMatrix(right);
unsigned int numCols = leftMat ? builder.getNumColumns(left) : builder.getNumColumns(right);
int numRows = leftMat ? builder.getNumRows(left) : builder.getNumRows(right);
spv::Id scalarType = builder.getScalarTypeId(typeId);
spv::Id vecType = builder.makeVectorType(scalarType, numRows);
std::vector<spv::Id> results;
spv::Id smearVec = spv::NoResult;
if (builder.isScalar(left))
smearVec = builder.smearScalar(precision, left, vecType);
else if (builder.isScalar(right))
smearVec = builder.smearScalar(precision, right, vecType);
// do each vector op
for (unsigned int c = 0; c < numCols; ++c) {
std::vector<unsigned int> indexes;
indexes.push_back(c);
spv::Id leftVec = leftMat ? builder.createCompositeExtract( left, vecType, indexes) : smearVec;
spv::Id rightVec = rightMat ? builder.createCompositeExtract(right, vecType, indexes) : smearVec;
results.push_back(builder.createBinOp(op, vecType, leftVec, rightVec));
builder.setPrecision(results.back(), precision);
}
// put the pieces together
spv::Id id = builder.createCompositeConstruct(typeId, results);
builder.setPrecision(id, precision);
return id;
}
default:
assert(0);
return spv::NoResult;
}
}
spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, spv::Decoration precision, spv::Id typeId, spv::Id operand, glslang::TBasicType typeProxy)
{
spv::Op unaryOp = spv::OpNop;

View File

@ -3,4 +3,244 @@ spv.300layout.vert
Linked vertex stage:
Missing functionality: binary operation on matrix
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 165
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Vertex 4 "main" 101 11 121 9 99 109 129 163 164
Source ESSL 300
Name 4 "main"
Name 9 "pos"
Name 11 "p"
Name 17 "Transform"
MemberName 17(Transform) 0 "M1"
MemberName 17(Transform) 1 "M2"
MemberName 17(Transform) 2 "N1"
MemberName 17(Transform) 3 "iuin"
Name 19 "tblock"
Name 45 "T3"
MemberName 45(T3) 0 "M3"
MemberName 45(T3) 1 "M4"
MemberName 45(T3) 2 "N2"
MemberName 45(T3) 3 "uv3a"
Name 47 ""
Name 79 "T2"
MemberName 79(T2) 0 "b"
MemberName 79(T2) 1 "t2m"
Name 81 ""
Name 99 "color"
Name 101 "c"
Name 109 "iout"
Name 115 "uiuin"
Name 121 "aiv2"
Name 127 "S"
MemberName 127(S) 0 "c"
MemberName 127(S) 1 "f"
Name 129 "s"
Name 163 "gl_VertexID"
Name 164 "gl_InstanceID"
Decorate 11(p) Location 3
MemberDecorate 17(Transform) 0 RowMajor
MemberDecorate 17(Transform) 0 Offset 0
MemberDecorate 17(Transform) 0 MatrixStride 16
MemberDecorate 17(Transform) 1 ColMajor
MemberDecorate 17(Transform) 1 Offset 64
MemberDecorate 17(Transform) 1 MatrixStride 16
MemberDecorate 17(Transform) 2 RowMajor
MemberDecorate 17(Transform) 2 Offset 128
MemberDecorate 17(Transform) 2 MatrixStride 16
MemberDecorate 17(Transform) 3 Offset 176
Decorate 17(Transform) Block
MemberDecorate 45(T3) 0 ColMajor
MemberDecorate 45(T3) 1 RowMajor
MemberDecorate 45(T3) 2 ColMajor
Decorate 45(T3) GLSLShared
Decorate 45(T3) Block
MemberDecorate 79(T2) 1 RowMajor
Decorate 79(T2) GLSLShared
Decorate 79(T2) Block
Decorate 101(c) Location 7
Decorate 109(iout) Flat
Decorate 121(aiv2) Location 9
Decorate 163(gl_VertexID) BuiltIn VertexId
Decorate 164(gl_InstanceID) BuiltIn InstanceId
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Output 7(fvec4)
9(pos): 8(ptr) Variable Output
10: TypePointer Input 7(fvec4)
11(p): 10(ptr) Variable Input
13: TypeMatrix 7(fvec4) 4
14: TypeVector 6(float) 3
15: TypeMatrix 14(fvec3) 3
16: TypeInt 32 1
17(Transform): TypeStruct 13 13 15 16(int)
18: TypePointer Uniform 17(Transform)
19(tblock): 18(ptr) Variable Uniform
20: 16(int) Constant 0
21: TypePointer Uniform 13
24: 16(int) Constant 1
40: TypeMatrix 14(fvec3) 2
41: TypeInt 32 0
42: TypeVector 41(int) 3
43: 41(int) Constant 4
44: TypeArray 42(ivec3) 43
45(T3): TypeStruct 13 13 40 44
46: TypePointer Uniform 45(T3)
47: 46(ptr) Variable Uniform
78: TypeBool
79(T2): TypeStruct 78(bool) 13
80: TypePointer Uniform 79(T2)
81: 80(ptr) Variable Uniform
98: TypePointer Output 14(fvec3)
99(color): 98(ptr) Variable Output
100: TypePointer Input 14(fvec3)
101(c): 100(ptr) Variable Input
103: 16(int) Constant 2
104: TypePointer Uniform 15
108: TypePointer Output 16(int)
109(iout): 108(ptr) Variable Output
110: 16(int) Constant 3
111: TypePointer Uniform 16(int)
114: TypePointer UniformConstant 41(int)
115(uiuin): 114(ptr) Variable UniformConstant
119: TypeVector 16(int) 2
120: TypePointer Input 119(ivec2)
121(aiv2): 120(ptr) Variable Input
122: 41(int) Constant 1
123: TypePointer Input 16(int)
127(S): TypeStruct 14(fvec3) 6(float)
128: TypePointer Output 127(S)
129(s): 128(ptr) Variable Output
132: 41(int) Constant 0
133: TypePointer Input 6(float)
136: TypePointer Output 6(float)
138: TypePointer Uniform 14(fvec3)
141: 6(float) Constant 1065353216
142: 14(fvec3) ConstantComposite 141 141 141
143: TypeVector 78(bool) 3
149: TypePointer Uniform 42(ivec3)
152: 41(int) Constant 5
153: 42(ivec3) ConstantComposite 152 152 152
163(gl_VertexID): 123(ptr) Variable Input
164(gl_InstanceID): 123(ptr) Variable Input
4(main): 2 Function None 3
5: Label
12: 7(fvec4) Load 11(p)
22: 21(ptr) AccessChain 19(tblock) 20
23: 13 Load 22
25: 21(ptr) AccessChain 19(tblock) 24
26: 13 Load 25
27: 7(fvec4) CompositeExtract 23 0
28: 7(fvec4) CompositeExtract 26 0
29: 7(fvec4) FAdd 27 28
30: 7(fvec4) CompositeExtract 23 1
31: 7(fvec4) CompositeExtract 26 1
32: 7(fvec4) FAdd 30 31
33: 7(fvec4) CompositeExtract 23 2
34: 7(fvec4) CompositeExtract 26 2
35: 7(fvec4) FAdd 33 34
36: 7(fvec4) CompositeExtract 23 3
37: 7(fvec4) CompositeExtract 26 3
38: 7(fvec4) FAdd 36 37
39: 13 CompositeConstruct 29 32 35 38
48: 21(ptr) AccessChain 47 24
49: 13 Load 48
50: 7(fvec4) CompositeExtract 39 0
51: 7(fvec4) CompositeExtract 49 0
52: 7(fvec4) FAdd 50 51
53: 7(fvec4) CompositeExtract 39 1
54: 7(fvec4) CompositeExtract 49 1
55: 7(fvec4) FAdd 53 54
56: 7(fvec4) CompositeExtract 39 2
57: 7(fvec4) CompositeExtract 49 2
58: 7(fvec4) FAdd 56 57
59: 7(fvec4) CompositeExtract 39 3
60: 7(fvec4) CompositeExtract 49 3
61: 7(fvec4) FAdd 59 60
62: 13 CompositeConstruct 52 55 58 61
63: 21(ptr) AccessChain 47 20
64: 13 Load 63
65: 7(fvec4) CompositeExtract 62 0
66: 7(fvec4) CompositeExtract 64 0
67: 7(fvec4) FAdd 65 66
68: 7(fvec4) CompositeExtract 62 1
69: 7(fvec4) CompositeExtract 64 1
70: 7(fvec4) FAdd 68 69
71: 7(fvec4) CompositeExtract 62 2
72: 7(fvec4) CompositeExtract 64 2
73: 7(fvec4) FAdd 71 72
74: 7(fvec4) CompositeExtract 62 3
75: 7(fvec4) CompositeExtract 64 3
76: 7(fvec4) FAdd 74 75
77: 13 CompositeConstruct 67 70 73 76
82: 21(ptr) AccessChain 81 24
83: 13 Load 82
84: 7(fvec4) CompositeExtract 77 0
85: 7(fvec4) CompositeExtract 83 0
86: 7(fvec4) FAdd 84 85
87: 7(fvec4) CompositeExtract 77 1
88: 7(fvec4) CompositeExtract 83 1
89: 7(fvec4) FAdd 87 88
90: 7(fvec4) CompositeExtract 77 2
91: 7(fvec4) CompositeExtract 83 2
92: 7(fvec4) FAdd 90 91
93: 7(fvec4) CompositeExtract 77 3
94: 7(fvec4) CompositeExtract 83 3
95: 7(fvec4) FAdd 93 94
96: 13 CompositeConstruct 86 89 92 95
97: 7(fvec4) VectorTimesMatrix 12 96
Store 9(pos) 97
102: 14(fvec3) Load 101(c)
105: 104(ptr) AccessChain 19(tblock) 103
106: 15 Load 105
107: 14(fvec3) VectorTimesMatrix 102 106
Store 99(color) 107
112: 111(ptr) AccessChain 19(tblock) 110
113: 16(int) Load 112
116: 41(int) Load 115(uiuin)
117: 16(int) Bitcast 116
118: 16(int) IAdd 113 117
124: 123(ptr) AccessChain 121(aiv2) 122
125: 16(int) Load 124
126: 16(int) IAdd 118 125
Store 109(iout) 126
130: 14(fvec3) Load 101(c)
131: 98(ptr) AccessChain 129(s) 20
Store 131 130
134: 133(ptr) AccessChain 11(p) 132
135: 6(float) Load 134
137: 136(ptr) AccessChain 129(s) 24
Store 137 135
139: 138(ptr) AccessChain 47 103 24
140: 14(fvec3) Load 139
144: 143(bvec3) FOrdNotEqual 140 142
145: 78(bool) Any 144
146: 78(bool) LogicalNot 145
SelectionMerge 148 None
BranchConditional 146 147 148
147: Label
150: 149(ptr) AccessChain 47 110 103
151: 42(ivec3) Load 150
154: 143(bvec3) INotEqual 151 153
155: 78(bool) Any 154
Branch 148
148: Label
156: 78(bool) Phi 145 5 155 147
SelectionMerge 158 None
BranchConditional 156 157 158
157: Label
159: 98(ptr) AccessChain 129(s) 20
160: 14(fvec3) Load 159
161: 14(fvec3) CompositeConstruct 141 141 141
162: 14(fvec3) FAdd 160 161
Store 159 162
Branch 158
158: Label
Return
FunctionEnd

View File

@ -3,4 +3,206 @@ spv.deepRvalue.frag
Linked fragment stage:
Missing functionality: binary operation on matrix
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 155
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main"
ExecutionMode 4 OriginLowerLeft
Source GLSL 330
Name 4 "main"
Name 9 "v1"
Name 15 "v2"
Name 21 "v3"
Name 27 "v4"
Name 35 "m"
Name 63 "mm"
Name 80 "f"
Name 87 "g"
Name 106 "h"
Name 107 "i"
Name 111 "samp2D"
Name 134 "str"
MemberName 134(str) 0 "a"
MemberName 134(str) 1 "b"
MemberName 134(str) 2 "c"
Name 136 "t"
Name 149 "gl_FragColor"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypePointer Private 7(fvec4)
9(v1): 8(ptr) Variable Private
10: 6(float) Constant 1073741824
11: 6(float) Constant 1077936128
12: 6(float) Constant 1084227584
13: 6(float) Constant 1088421888
14: 7(fvec4) ConstantComposite 10 11 12 13
15(v2): 8(ptr) Variable Private
16: 6(float) Constant 1093664768
17: 6(float) Constant 1095761920
18: 6(float) Constant 1099431936
19: 6(float) Constant 1100480512
20: 7(fvec4) ConstantComposite 16 17 18 19
21(v3): 8(ptr) Variable Private
22: 6(float) Constant 1102577664
23: 6(float) Constant 1105723392
24: 6(float) Constant 1106771968
25: 6(float) Constant 1108606976
26: 7(fvec4) ConstantComposite 22 23 24 25
27(v4): 8(ptr) Variable Private
28: 6(float) Constant 1109655552
29: 6(float) Constant 1110179840
30: 6(float) Constant 1111228416
31: 6(float) Constant 1112801280
32: 7(fvec4) ConstantComposite 28 29 30 31
33: TypeMatrix 7(fvec4) 4
34: TypePointer Function 33
40: 6(float) Constant 1065353216
41: 6(float) Constant 0
79: TypePointer Function 6(float)
81: TypeInt 32 1
82: 81(int) Constant 1
83: TypeInt 32 0
84: 83(int) Constant 3
103: 81(int) Constant 2
104: 83(int) Constant 1
108: TypeImage 6(float) 2D sampled format:Unknown
109: TypeSampledImage 108
110: TypePointer UniformConstant 109
111(samp2D): 110(ptr) Variable UniformConstant
113: TypeVector 6(float) 2
114: 6(float) Constant 1056964608
115: 113(fvec2) ConstantComposite 114 114
118: TypePointer Function 7(fvec4)
121: 6(float) Constant 1036831949
122: TypeBool
133: TypeArray 113(fvec2) 84
134(str): TypeStruct 81(int) 133 122(bool)
135: TypePointer Function 134(str)
137: 113(fvec2) ConstantComposite 10 11
138: 6(float) Constant 1082130432
139: 113(fvec2) ConstantComposite 138 12
140: 6(float) Constant 1086324736
141: 113(fvec2) ConstantComposite 140 13
142: 133 ConstantComposite 137 139 141
143: 122(bool) ConstantTrue
144: 134(str) ConstantComposite 82 142 143
148: TypePointer Output 7(fvec4)
149(gl_FragColor): 148(ptr) Variable Output
4(main): 2 Function None 3
5: Label
35(m): 34(ptr) Variable Function
63(mm): 34(ptr) Variable Function
80(f): 79(ptr) Variable Function
87(g): 79(ptr) Variable Function
106(h): 79(ptr) Variable Function
107(i): 79(ptr) Variable Function
119: 118(ptr) Variable Function
136(t): 135(ptr) Variable Function
Store 9(v1) 14
Store 15(v2) 20
Store 21(v3) 26
Store 27(v4) 32
36: 7(fvec4) Load 9(v1)
37: 7(fvec4) Load 15(v2)
38: 7(fvec4) Load 21(v3)
39: 7(fvec4) Load 27(v4)
42: 6(float) CompositeExtract 36 0
43: 6(float) CompositeExtract 36 1
44: 6(float) CompositeExtract 36 2
45: 6(float) CompositeExtract 36 3
46: 6(float) CompositeExtract 37 0
47: 6(float) CompositeExtract 37 1
48: 6(float) CompositeExtract 37 2
49: 6(float) CompositeExtract 37 3
50: 6(float) CompositeExtract 38 0
51: 6(float) CompositeExtract 38 1
52: 6(float) CompositeExtract 38 2
53: 6(float) CompositeExtract 38 3
54: 6(float) CompositeExtract 39 0
55: 6(float) CompositeExtract 39 1
56: 6(float) CompositeExtract 39 2
57: 6(float) CompositeExtract 39 3
58: 7(fvec4) CompositeConstruct 42 43 44 45
59: 7(fvec4) CompositeConstruct 46 47 48 49
60: 7(fvec4) CompositeConstruct 50 51 52 53
61: 7(fvec4) CompositeConstruct 54 55 56 57
62: 33 CompositeConstruct 58 59 60 61
Store 35(m) 62
64: 33 Load 35(m)
65: 33 Load 35(m)
66: 7(fvec4) CompositeExtract 64 0
67: 7(fvec4) CompositeExtract 65 0
68: 7(fvec4) FMul 66 67
69: 7(fvec4) CompositeExtract 64 1
70: 7(fvec4) CompositeExtract 65 1
71: 7(fvec4) FMul 69 70
72: 7(fvec4) CompositeExtract 64 2
73: 7(fvec4) CompositeExtract 65 2
74: 7(fvec4) FMul 72 73
75: 7(fvec4) CompositeExtract 64 3
76: 7(fvec4) CompositeExtract 65 3
77: 7(fvec4) FMul 75 76
78: 33 CompositeConstruct 68 71 74 77
Store 63(mm) 78
85: 79(ptr) AccessChain 63(mm) 82 84
86: 6(float) Load 85
Store 80(f) 86
88: 33 Load 35(m)
89: 33 Load 35(m)
90: 7(fvec4) CompositeExtract 88 0
91: 7(fvec4) CompositeExtract 89 0
92: 7(fvec4) FMul 90 91
93: 7(fvec4) CompositeExtract 88 1
94: 7(fvec4) CompositeExtract 89 1
95: 7(fvec4) FMul 93 94
96: 7(fvec4) CompositeExtract 88 2
97: 7(fvec4) CompositeExtract 89 2
98: 7(fvec4) FMul 96 97
99: 7(fvec4) CompositeExtract 88 3
100: 7(fvec4) CompositeExtract 89 3
101: 7(fvec4) FMul 99 100
102: 33 CompositeConstruct 92 95 98 101
105: 6(float) CompositeExtract 102 2 1
Store 87(g) 105
Store 106(h) 12
112: 109 Load 111(samp2D)
116: 7(fvec4) ImageSampleImplicitLod 112 115
117: 6(float) CompositeExtract 116 1
Store 107(i) 117
120: 6(float) Load 107(i)
123: 122(bool) FOrdGreaterThan 120 121
SelectionMerge 125 None
BranchConditional 123 124 127
124: Label
126: 7(fvec4) Load 9(v1)
Store 119 126
Branch 125
127: Label
128: 7(fvec4) Load 15(v2)
Store 119 128
Branch 125
125: Label
129: 79(ptr) AccessChain 119 84
130: 6(float) Load 129
131: 6(float) Load 107(i)
132: 6(float) FAdd 131 130
Store 107(i) 132
Store 136(t) 144
145: 6(float) CompositeExtract 144 1 2 1
146: 6(float) Load 107(i)
147: 6(float) FAdd 146 145
Store 107(i) 147
150: 6(float) Load 80(f)
151: 6(float) Load 87(g)
152: 6(float) Load 106(h)
153: 6(float) Load 107(i)
154: 7(fvec4) CompositeConstruct 150 151 152 153
Store 149(gl_FragColor) 154
Return
FunctionEnd

View File

@ -3,4 +3,284 @@ spv.matrix.frag
Linked fragment stage:
Missing functionality: Composite comparison of non-vectors
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 240
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 12 14 28 148 140 166
ExecutionMode 4 OriginLowerLeft
Source GLSL 130
Name 4 "main"
Name 10 "sum34"
Name 12 "m1"
Name 14 "m2"
Name 28 "f"
Name 138 "sum3"
Name 140 "v4"
Name 145 "sum4"
Name 148 "v3"
Name 153 "m43"
Name 158 "m4"
Name 166 "color"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeMatrix 7(fvec4) 3
9: TypePointer Function 8
11: TypePointer Input 8
12(m1): 11(ptr) Variable Input
14(m2): 11(ptr) Variable Input
27: TypePointer Input 6(float)
28(f): 27(ptr) Variable Input
81: 6(float) Constant 1065353216
136: TypeVector 6(float) 3
137: TypePointer Function 136(fvec3)
139: TypePointer Input 7(fvec4)
140(v4): 139(ptr) Variable Input
144: TypePointer Function 7(fvec4)
147: TypePointer Input 136(fvec3)
148(v3): 147(ptr) Variable Input
151: TypeMatrix 136(fvec3) 4
152: TypePointer Function 151
156: TypeMatrix 7(fvec4) 4
157: TypePointer Function 156
165: TypePointer Output 7(fvec4)
166(color): 165(ptr) Variable Output
187: 6(float) Constant 0
4(main): 2 Function None 3
5: Label
10(sum34): 9(ptr) Variable Function
138(sum3): 137(ptr) Variable Function
145(sum4): 144(ptr) Variable Function
153(m43): 152(ptr) Variable Function
158(m4): 157(ptr) Variable Function
13: 8 Load 12(m1)
15: 8 Load 14(m2)
16: 7(fvec4) CompositeExtract 13 0
17: 7(fvec4) CompositeExtract 15 0
18: 7(fvec4) FSub 16 17
19: 7(fvec4) CompositeExtract 13 1
20: 7(fvec4) CompositeExtract 15 1
21: 7(fvec4) FSub 19 20
22: 7(fvec4) CompositeExtract 13 2
23: 7(fvec4) CompositeExtract 15 2
24: 7(fvec4) FSub 22 23
25: 8 CompositeConstruct 18 21 24
Store 10(sum34) 25
26: 8 Load 12(m1)
29: 6(float) Load 28(f)
30: 8 MatrixTimesScalar 26 29
31: 8 Load 10(sum34)
32: 7(fvec4) CompositeExtract 31 0
33: 7(fvec4) CompositeExtract 30 0
34: 7(fvec4) FAdd 32 33
35: 7(fvec4) CompositeExtract 31 1
36: 7(fvec4) CompositeExtract 30 1
37: 7(fvec4) FAdd 35 36
38: 7(fvec4) CompositeExtract 31 2
39: 7(fvec4) CompositeExtract 30 2
40: 7(fvec4) FAdd 38 39
41: 8 CompositeConstruct 34 37 40
Store 10(sum34) 41
42: 6(float) Load 28(f)
43: 8 Load 12(m1)
44: 8 MatrixTimesScalar 43 42
45: 8 Load 10(sum34)
46: 7(fvec4) CompositeExtract 45 0
47: 7(fvec4) CompositeExtract 44 0
48: 7(fvec4) FAdd 46 47
49: 7(fvec4) CompositeExtract 45 1
50: 7(fvec4) CompositeExtract 44 1
51: 7(fvec4) FAdd 49 50
52: 7(fvec4) CompositeExtract 45 2
53: 7(fvec4) CompositeExtract 44 2
54: 7(fvec4) FAdd 52 53
55: 8 CompositeConstruct 48 51 54
Store 10(sum34) 55
56: 8 Load 12(m1)
57: 8 Load 14(m2)
58: 7(fvec4) CompositeExtract 56 0
59: 7(fvec4) CompositeExtract 57 0
60: 7(fvec4) FMul 58 59
61: 7(fvec4) CompositeExtract 56 1
62: 7(fvec4) CompositeExtract 57 1
63: 7(fvec4) FMul 61 62
64: 7(fvec4) CompositeExtract 56 2
65: 7(fvec4) CompositeExtract 57 2
66: 7(fvec4) FMul 64 65
67: 8 CompositeConstruct 60 63 66
68: 8 Load 10(sum34)
69: 7(fvec4) CompositeExtract 68 0
70: 7(fvec4) CompositeExtract 67 0
71: 7(fvec4) FDiv 69 70
72: 7(fvec4) CompositeExtract 68 1
73: 7(fvec4) CompositeExtract 67 1
74: 7(fvec4) FDiv 72 73
75: 7(fvec4) CompositeExtract 68 2
76: 7(fvec4) CompositeExtract 67 2
77: 7(fvec4) FDiv 75 76
78: 8 CompositeConstruct 71 74 77
Store 10(sum34) 78
79: 8 Load 12(m1)
80: 6(float) Load 28(f)
82: 6(float) FDiv 81 80
83: 8 MatrixTimesScalar 79 82
84: 8 Load 10(sum34)
85: 7(fvec4) CompositeExtract 84 0
86: 7(fvec4) CompositeExtract 83 0
87: 7(fvec4) FAdd 85 86
88: 7(fvec4) CompositeExtract 84 1
89: 7(fvec4) CompositeExtract 83 1
90: 7(fvec4) FAdd 88 89
91: 7(fvec4) CompositeExtract 84 2
92: 7(fvec4) CompositeExtract 83 2
93: 7(fvec4) FAdd 91 92
94: 8 CompositeConstruct 87 90 93
Store 10(sum34) 94
95: 6(float) Load 28(f)
96: 8 Load 12(m1)
97: 7(fvec4) CompositeConstruct 95 95 95 95
98: 7(fvec4) CompositeExtract 96 0
99: 7(fvec4) FDiv 97 98
100: 7(fvec4) CompositeExtract 96 1
101: 7(fvec4) FDiv 97 100
102: 7(fvec4) CompositeExtract 96 2
103: 7(fvec4) FDiv 97 102
104: 8 CompositeConstruct 99 101 103
105: 8 Load 10(sum34)
106: 7(fvec4) CompositeExtract 105 0
107: 7(fvec4) CompositeExtract 104 0
108: 7(fvec4) FAdd 106 107
109: 7(fvec4) CompositeExtract 105 1
110: 7(fvec4) CompositeExtract 104 1
111: 7(fvec4) FAdd 109 110
112: 7(fvec4) CompositeExtract 105 2
113: 7(fvec4) CompositeExtract 104 2
114: 7(fvec4) FAdd 112 113
115: 8 CompositeConstruct 108 111 114
Store 10(sum34) 115
116: 6(float) Load 28(f)
117: 8 Load 10(sum34)
118: 7(fvec4) CompositeConstruct 116 116 116 116
119: 7(fvec4) CompositeExtract 117 0
120: 7(fvec4) FAdd 119 118
121: 7(fvec4) CompositeExtract 117 1
122: 7(fvec4) FAdd 121 118
123: 7(fvec4) CompositeExtract 117 2
124: 7(fvec4) FAdd 123 118
125: 8 CompositeConstruct 120 122 124
Store 10(sum34) 125
126: 6(float) Load 28(f)
127: 8 Load 10(sum34)
128: 7(fvec4) CompositeConstruct 126 126 126 126
129: 7(fvec4) CompositeExtract 127 0
130: 7(fvec4) FSub 129 128
131: 7(fvec4) CompositeExtract 127 1
132: 7(fvec4) FSub 131 128
133: 7(fvec4) CompositeExtract 127 2
134: 7(fvec4) FSub 133 128
135: 8 CompositeConstruct 130 132 134
Store 10(sum34) 135
141: 7(fvec4) Load 140(v4)
142: 8 Load 14(m2)
143: 136(fvec3) VectorTimesMatrix 141 142
Store 138(sum3) 143
146: 8 Load 14(m2)
149: 136(fvec3) Load 148(v3)
150: 7(fvec4) MatrixTimesVector 146 149
Store 145(sum4) 150
154: 8 Load 10(sum34)
155: 151 Transpose 154
Store 153(m43) 155
159: 8 Load 12(m1)
160: 151 Load 153(m43)
161: 156 MatrixTimesMatrix 159 160
Store 158(m4) 161
162: 7(fvec4) Load 140(v4)
163: 156 Load 158(m4)
164: 7(fvec4) VectorTimesMatrix 162 163
Store 145(sum4) 164
167: 7(fvec4) Load 145(sum4)
Store 166(color) 167
168: 8 Load 10(sum34)
169: 7(fvec4) CompositeConstruct 81 81 81 81
170: 7(fvec4) CompositeExtract 168 0
171: 7(fvec4) FAdd 170 169
172: 7(fvec4) CompositeExtract 168 1
173: 7(fvec4) FAdd 172 169
174: 7(fvec4) CompositeExtract 168 2
175: 7(fvec4) FAdd 174 169
176: 8 CompositeConstruct 171 173 175
Store 10(sum34) 176
177: 8 Load 10(sum34)
178: 7(fvec4) CompositeConstruct 81 81 81 81
179: 7(fvec4) CompositeExtract 177 0
180: 7(fvec4) FSub 179 178
181: 7(fvec4) CompositeExtract 177 1
182: 7(fvec4) FSub 181 178
183: 7(fvec4) CompositeExtract 177 2
184: 7(fvec4) FSub 183 178
185: 8 CompositeConstruct 180 182 184
Store 10(sum34) 185
186: 6(float) Load 28(f)
188: 7(fvec4) CompositeConstruct 186 187 187 187
189: 7(fvec4) CompositeConstruct 187 186 187 187
190: 7(fvec4) CompositeConstruct 187 187 186 187
191: 8 CompositeConstruct 188 189 190
192: 8 Load 10(sum34)
193: 7(fvec4) CompositeExtract 192 0
194: 7(fvec4) CompositeExtract 191 0
195: 7(fvec4) FAdd 193 194
196: 7(fvec4) CompositeExtract 192 1
197: 7(fvec4) CompositeExtract 191 1
198: 7(fvec4) FAdd 196 197
199: 7(fvec4) CompositeExtract 192 2
200: 7(fvec4) CompositeExtract 191 2
201: 7(fvec4) FAdd 199 200
202: 8 CompositeConstruct 195 198 201
Store 10(sum34) 202
203: 136(fvec3) Load 148(v3)
204: 6(float) Load 28(f)
205: 136(fvec3) Load 148(v3)
206: 6(float) Load 28(f)
207: 136(fvec3) Load 148(v3)
208: 6(float) Load 28(f)
209: 6(float) CompositeExtract 203 0
210: 6(float) CompositeExtract 203 1
211: 6(float) CompositeExtract 203 2
212: 6(float) CompositeExtract 205 0
213: 6(float) CompositeExtract 205 1
214: 6(float) CompositeExtract 205 2
215: 6(float) CompositeExtract 207 0
216: 6(float) CompositeExtract 207 1
217: 6(float) CompositeExtract 207 2
218: 7(fvec4) CompositeConstruct 209 210 211 204
219: 7(fvec4) CompositeConstruct 212 213 214 206
220: 7(fvec4) CompositeConstruct 215 216 217 208
221: 8 CompositeConstruct 218 219 220
222: 8 Load 10(sum34)
223: 7(fvec4) CompositeExtract 222 0
224: 7(fvec4) CompositeExtract 221 0
225: 7(fvec4) FAdd 223 224
226: 7(fvec4) CompositeExtract 222 1
227: 7(fvec4) CompositeExtract 221 1
228: 7(fvec4) FAdd 226 227
229: 7(fvec4) CompositeExtract 222 2
230: 7(fvec4) CompositeExtract 221 2
231: 7(fvec4) FAdd 229 230
232: 8 CompositeConstruct 225 228 231
Store 10(sum34) 232
233: 136(fvec3) Load 138(sum3)
234: 151 Load 153(m43)
235: 7(fvec4) VectorTimesMatrix 233 234
236: 7(fvec4) Load 145(sum4)
237: 7(fvec4) FAdd 235 236
238: 7(fvec4) Load 166(color)
239: 7(fvec4) FAdd 238 237
Store 166(color) 239
Return
FunctionEnd

View File

@ -1,10 +1,265 @@
spv.matrix2.frag
WARNING: 0:4: varying deprecated in version 130; may be removed in future release
WARNING: 0:13: varying deprecated in version 130; may be removed in future release
WARNING: 0:15: varying deprecated in version 130; may be removed in future release
Linked fragment stage:
Missing functionality: binary operation on matrix
// Module Version 10000
// Generated by (magic number): 80001
// Id's are bound by 213
Capability Shader
1: ExtInstImport "GLSL.std.450"
MemoryModel Logical GLSL450
EntryPoint Fragment 4 "main" 210 38 211 212 87 65 150 173 139 12 16 37
ExecutionMode 4 OriginLowerLeft
Source GLSL 150
Name 4 "main"
Name 10 "m34"
Name 12 "v"
Name 16 "u"
Name 37 "FragColor"
Name 38 "Color"
Name 63 "m44"
Name 65 "un34"
Name 87 "um43"
Name 139 "um4"
Name 148 "inv"
Name 150 "um2"
Name 171 "inv3"
Name 173 "um3"
Name 182 "inv4"
Name 210 "colorTransform"
Name 211 "m"
Name 212 "n"
2: TypeVoid
3: TypeFunction 2
6: TypeFloat 32
7: TypeVector 6(float) 4
8: TypeMatrix 7(fvec4) 3
9: TypePointer Function 8
11: TypePointer Input 7(fvec4)
12(v): 11(ptr) Variable Input
14: TypeVector 6(float) 3
15: TypePointer Input 14(fvec3)
16(u): 15(ptr) Variable Input
19: 6(float) Constant 1082759578
20: 6(float) Constant 0
21: 7(fvec4) ConstantComposite 19 20 20 20
22: 7(fvec4) ConstantComposite 20 19 20 20
23: 7(fvec4) ConstantComposite 20 20 19 20
24: 8 ConstantComposite 21 22 23
36: TypePointer Output 7(fvec4)
37(FragColor): 36(ptr) Variable Output
38(Color): 15(ptr) Variable Input
40: 6(float) Constant 1065353216
54: TypeInt 32 0
55: 54(int) Constant 0
56: TypePointer Input 6(float)
61: TypeMatrix 7(fvec4) 4
62: TypePointer Function 61
64: TypePointer Input 8
65(un34): 64(ptr) Variable Input
85: TypeMatrix 14(fvec3) 4
86: TypePointer Input 85
87(um43): 86(ptr) Variable Input
138: TypePointer Input 61
139(um4): 138(ptr) Variable Input
145: TypeVector 6(float) 2
146: TypeMatrix 145(fvec2) 2
147: TypePointer Function 146
149: TypePointer Input 146
150(um2): 149(ptr) Variable Input
153: TypeInt 32 1
154: 153(int) Constant 0
155: TypePointer Function 6(float)
158: 153(int) Constant 1
161: 54(int) Constant 1
169: TypeMatrix 14(fvec3) 3
170: TypePointer Function 169
172: TypePointer Input 169
173(um3): 172(ptr) Variable Input
176: 153(int) Constant 2
202: 54(int) Constant 3
203: TypePointer Output 6(float)
210(colorTransform): 172(ptr) Variable Input
211(m): 138(ptr) Variable Input
212(n): 138(ptr) Variable Input
4(main): 2 Function None 3
5: Label
10(m34): 9(ptr) Variable Function
63(m44): 62(ptr) Variable Function
148(inv): 147(ptr) Variable Function
171(inv3): 170(ptr) Variable Function
182(inv4): 62(ptr) Variable Function
13: 7(fvec4) Load 12(v)
17: 14(fvec3) Load 16(u)
18: 8 OuterProduct 13 17
Store 10(m34) 18
25: 8 Load 10(m34)
26: 7(fvec4) CompositeExtract 25 0
27: 7(fvec4) CompositeExtract 24 0
28: 7(fvec4) FAdd 26 27
29: 7(fvec4) CompositeExtract 25 1
30: 7(fvec4) CompositeExtract 24 1
31: 7(fvec4) FAdd 29 30
32: 7(fvec4) CompositeExtract 25 2
33: 7(fvec4) CompositeExtract 24 2
34: 7(fvec4) FAdd 32 33
35: 8 CompositeConstruct 28 31 34
Store 10(m34) 35
39: 14(fvec3) Load 38(Color)
41: 6(float) CompositeExtract 39 0
42: 6(float) CompositeExtract 39 1
43: 6(float) CompositeExtract 39 2
44: 7(fvec4) CompositeConstruct 41 42 43 40
Store 37(FragColor) 44
45: 7(fvec4) Load 37(FragColor)
46: 8 Load 10(m34)
47: 14(fvec3) VectorTimesMatrix 45 46
48: 6(float) CompositeExtract 47 0
49: 6(float) CompositeExtract 47 1
50: 6(float) CompositeExtract 47 2
51: 7(fvec4) CompositeConstruct 48 49 50 40
52: 7(fvec4) Load 37(FragColor)
53: 7(fvec4) FMul 52 51
Store 37(FragColor) 53
57: 56(ptr) AccessChain 12(v) 55
58: 6(float) Load 57
59: 8 Load 10(m34)
60: 8 MatrixTimesScalar 59 58
Store 10(m34) 60
66: 8 Load 65(un34)
67: 6(float) CompositeExtract 66 0 0
68: 6(float) CompositeExtract 66 0 1
69: 6(float) CompositeExtract 66 0 2
70: 6(float) CompositeExtract 66 0 3
71: 6(float) CompositeExtract 66 1 0
72: 6(float) CompositeExtract 66 1 1
73: 6(float) CompositeExtract 66 1 2
74: 6(float) CompositeExtract 66 1 3
75: 6(float) CompositeExtract 66 2 0
76: 6(float) CompositeExtract 66 2 1
77: 6(float) CompositeExtract 66 2 2
78: 6(float) CompositeExtract 66 2 3
79: 7(fvec4) CompositeConstruct 67 68 69 70
80: 7(fvec4) CompositeConstruct 71 72 73 74
81: 7(fvec4) CompositeConstruct 75 76 77 78
82: 7(fvec4) CompositeConstruct 20 20 20 40
83: 61 CompositeConstruct 79 80 81 82
Store 63(m44) 83
84: 8 Load 10(m34)
88: 85 Load 87(um43)
89: 61 MatrixTimesMatrix 84 88
90: 61 Load 63(m44)
91: 7(fvec4) CompositeExtract 90 0
92: 7(fvec4) CompositeExtract 89 0
93: 7(fvec4) FAdd 91 92
94: 7(fvec4) CompositeExtract 90 1
95: 7(fvec4) CompositeExtract 89 1
96: 7(fvec4) FAdd 94 95
97: 7(fvec4) CompositeExtract 90 2
98: 7(fvec4) CompositeExtract 89 2
99: 7(fvec4) FAdd 97 98
100: 7(fvec4) CompositeExtract 90 3
101: 7(fvec4) CompositeExtract 89 3
102: 7(fvec4) FAdd 100 101
103: 61 CompositeConstruct 93 96 99 102
Store 63(m44) 103
104: 61 Load 63(m44)
105: 61 FNegate 104
106: 7(fvec4) Load 12(v)
107: 7(fvec4) MatrixTimesVector 105 106
108: 7(fvec4) Load 37(FragColor)
109: 7(fvec4) FAdd 108 107
Store 37(FragColor) 109
110: 61 Load 63(m44)
111: 61 Load 63(m44)
112: 7(fvec4) CompositeExtract 110 0
113: 7(fvec4) CompositeExtract 111 0
114: 7(fvec4) FMul 112 113
115: 7(fvec4) CompositeExtract 110 1
116: 7(fvec4) CompositeExtract 111 1
117: 7(fvec4) FMul 115 116
118: 7(fvec4) CompositeExtract 110 2
119: 7(fvec4) CompositeExtract 111 2
120: 7(fvec4) FMul 118 119
121: 7(fvec4) CompositeExtract 110 3
122: 7(fvec4) CompositeExtract 111 3
123: 7(fvec4) FMul 121 122
124: 61 CompositeConstruct 114 117 120 123
125: 7(fvec4) Load 37(FragColor)
126: 7(fvec4) VectorTimesMatrix 125 124
Store 37(FragColor) 126
127: 85 Load 87(um43)
128: 8 Transpose 127
Store 10(m34) 128
129: 7(fvec4) Load 37(FragColor)
130: 8 Load 10(m34)
131: 14(fvec3) VectorTimesMatrix 129 130
132: 6(float) CompositeExtract 131 0
133: 6(float) CompositeExtract 131 1
134: 6(float) CompositeExtract 131 2
135: 7(fvec4) CompositeConstruct 132 133 134 40
136: 7(fvec4) Load 37(FragColor)
137: 7(fvec4) FMul 136 135
Store 37(FragColor) 137
140: 61 Load 139(um4)
141: 6(float) ExtInst 1(GLSL.std.450) 33(Determinant) 140
142: 7(fvec4) CompositeConstruct 141 141 141 141
143: 7(fvec4) Load 37(FragColor)
144: 7(fvec4) FMul 143 142
Store 37(FragColor) 144
151: 146 Load 150(um2)
152: 146 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 151
Store 148(inv) 152
156: 155(ptr) AccessChain 148(inv) 154 55
157: 6(float) Load 156
159: 155(ptr) AccessChain 148(inv) 158 55
160: 6(float) Load 159
162: 155(ptr) AccessChain 148(inv) 154 161
163: 6(float) Load 162
164: 155(ptr) AccessChain 148(inv) 158 161
165: 6(float) Load 164
166: 7(fvec4) CompositeConstruct 157 160 163 165
167: 7(fvec4) Load 37(FragColor)
168: 7(fvec4) FMul 167 166
Store 37(FragColor) 168
174: 169 Load 173(um3)
175: 169 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 174
Store 171(inv3) 175
177: 155(ptr) AccessChain 171(inv3) 176 161
178: 6(float) Load 177
179: 7(fvec4) CompositeConstruct 178 178 178 178
180: 7(fvec4) Load 37(FragColor)
181: 7(fvec4) FMul 180 179
Store 37(FragColor) 181
183: 61 Load 139(um4)
184: 61 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 183
Store 182(inv4) 184
185: 61 Load 182(inv4)
186: 7(fvec4) Load 37(FragColor)
187: 7(fvec4) VectorTimesMatrix 186 185
Store 37(FragColor) 187
188: 7(fvec4) Load 37(FragColor)
189: 8 Load 65(un34)
190: 8 Load 65(un34)
191: 7(fvec4) CompositeExtract 189 0
192: 7(fvec4) CompositeExtract 190 0
193: 7(fvec4) FMul 191 192
194: 7(fvec4) CompositeExtract 189 1
195: 7(fvec4) CompositeExtract 190 1
196: 7(fvec4) FMul 194 195
197: 7(fvec4) CompositeExtract 189 2
198: 7(fvec4) CompositeExtract 190 2
199: 7(fvec4) FMul 197 198
200: 8 CompositeConstruct 193 196 199
201: 14(fvec3) VectorTimesMatrix 188 200
204: 203(ptr) AccessChain 37(FragColor) 202
205: 6(float) Load 204
206: 6(float) CompositeExtract 201 0
207: 6(float) CompositeExtract 201 1
208: 6(float) CompositeExtract 201 2
209: 7(fvec4) CompositeConstruct 206 207 208 205
Store 37(FragColor) 209
Return
FunctionEnd

View File

@ -7,7 +7,7 @@ out vec4 pos;
out vec3 color;
flat out int iout;
layout(shared, column_major, row_major) uniform; // default is now shared and row_major
layout(row_major) uniform; // default is now row_major
layout(std140) uniform Transform { // layout of this block is std140
mat4 M1; // row_major

View File

@ -1,34 +1,45 @@
#version 130
uniform mat3 colorTransform;
in vec3 Color;
uniform mat4 m, n;
in mat3x4 m1;
in mat3x4 m2;
in float f;
in vec3 v3;
in vec4 v4;
uniform mat4x3 um43;
uniform mat3x4 un34;
in vec4 v;
in vec3 u;
out vec4 color;
void main()
{
gl_FragColor = vec4(un34[1]);
gl_FragColor += vec4(Color * colorTransform, 1.0);
mat3x4 sum34;
vec3 sum3;
vec4 sum4;
if (m != n)
gl_FragColor += v;
else {
gl_FragColor += m * v;
gl_FragColor += v * (m - n);
}
sum34 = m1 - m2;
sum34 += m1 * f;
sum34 += f * m1;
sum34 /= matrixCompMult(m1, m2);
sum34 += m1 / f;
sum34 += f / m1;
sum34 += f;
sum34 -= f;
mat3x4 m34 = outerProduct(v, u);
m34 += mat3x4(v.x);
m34 += mat3x4(u, u.x, u, u.x, u, u.x);
sum3 = v4 * m2;
sum4 = m2 * v3;
if (m34 == un34)
gl_FragColor += m34 * u;
else
gl_FragColor += (un34 * um43) * v;
mat4x3 m43 = transpose(sum34);
mat4 m4 = m1 * m43;
sum4 = v4 * m4;
color = sum4;
//spv if (m1 != sum34)
++sum34;
// else
--sum34;
sum34 += mat3x4(f);
sum34 += mat3x4(v3, f, v3, f, v3, f);
color += sum3 * m43 + sum4;
}

View File

@ -1,18 +1,18 @@
#version 150
uniform mat3 colorTransform;
varying vec3 Color;
uniform mat4 m, n;
in mat3 colorTransform;
in vec3 Color;
in mat4 m, n;
uniform mat4x3 um43;
uniform mat3x4 un34;
uniform mat2 um2;
uniform mat3 um3;
uniform mat4 um4;
in mat4x3 um43;
in mat3x4 un34;
in mat2 um2;
in mat3 um3;
in mat4 um4;
varying vec4 v;
in vec4 v;
varying vec3 u;
in vec3 u;
out vec4 FragColor;

View File

@ -3,4 +3,4 @@
// For the date, it uses the current date (when then script is run).
#define GLSLANG_REVISION "SPIRV99.841"
#define GLSLANG_DATE "11-Dec-2015"
#define GLSLANG_DATE "12-Dec-2015"