mirror of
https://github.com/KhronosGroup/glslang
synced 2024-11-09 12:00:05 +00:00
HLSL: Add EOpMatrixSwizzle, selectively decomposed to other ops, for issue #670.
Since EOpMatrixSwizzle is a new op, existing back-ends only work when the front end first decomposes it to other operations. So far, this is only being done for simple assignment into matrix swizzles.
This commit is contained in:
parent
001dfa1c5c
commit
fdf6347f0a
@ -1115,6 +1115,9 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T
|
|||||||
builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
|
builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()));
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
case glslang::EOpMatrixSwizzle:
|
||||||
|
logger->missingFunctionality("matrix swizzle");
|
||||||
|
return true;
|
||||||
case glslang::EOpLogicalOr:
|
case glslang::EOpLogicalOr:
|
||||||
case glslang::EOpLogicalAnd:
|
case glslang::EOpLogicalAnd:
|
||||||
{
|
{
|
||||||
|
@ -5,46 +5,325 @@ Shader version: 450
|
|||||||
0:2 Function Parameters:
|
0:2 Function Parameters:
|
||||||
0:2 'inf' (layout(location=0 ) in float)
|
0:2 'inf' (layout(location=0 ) in float)
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:5 move second child to first child (temp float)
|
0:7 move second child to first child (temp float)
|
||||||
0:5 direct index (temp float)
|
0:7 direct index (temp float)
|
||||||
0:5 direct index (temp 4-component vector of float)
|
0:7 direct index (temp 4-component vector of float)
|
||||||
0:5 'm' (temp 3X4 matrix of float)
|
0:7 'm' (temp 3X4 matrix of float)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 2 (const int)
|
0:7 2 (const int)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 3 (const int)
|
0:7 3 (const int)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 1.000000
|
0:7 1.000000
|
||||||
0:6 move second child to first child (temp float)
|
0:8 move second child to first child (temp float)
|
||||||
0:6 direct index (temp float)
|
0:8 direct index (temp float)
|
||||||
0:6 direct index (temp 4-component vector of float)
|
0:8 direct index (temp 4-component vector of float)
|
||||||
0:6 'm' (temp 3X4 matrix of float)
|
0:8 'm' (temp 3X4 matrix of float)
|
||||||
0:6 Constant:
|
0:8 Constant:
|
||||||
0:6 2 (const int)
|
0:8 2 (const int)
|
||||||
0:6 Constant:
|
|
||||||
0:6 3 (const int)
|
|
||||||
0:6 Constant:
|
|
||||||
0:6 2.000000
|
|
||||||
0:8 move second child to first child (temp 4-component vector of float)
|
|
||||||
0:8 direct index (temp 4-component vector of float)
|
|
||||||
0:8 'm' (temp 3X4 matrix of float)
|
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 0 (const int)
|
0:8 3 (const int)
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 3.000000
|
0:8 2.000000
|
||||||
0:8 3.000000
|
0:9 move second child to first child (temp float)
|
||||||
0:8 3.000000
|
0:9 direct index (temp float)
|
||||||
0:8 3.000000
|
0:9 direct index (temp 4-component vector of float)
|
||||||
0:9 move second child to first child (temp 4-component vector of float)
|
0:9 'm' (temp 3X4 matrix of float)
|
||||||
0:9 direct index (temp 4-component vector of float)
|
0:9 Constant:
|
||||||
0:9 'm' (temp 3X4 matrix of float)
|
0:9 2 (const int)
|
||||||
0:9 Constant:
|
0:9 Constant:
|
||||||
0:9 1 (const int)
|
0:9 3 (const int)
|
||||||
0:9 Constant:
|
0:9 Constant:
|
||||||
0:9 3.000000
|
0:9 2.000000
|
||||||
0:9 3.000000
|
0:11 move second child to first child (temp 4-component vector of float)
|
||||||
0:9 3.000000
|
0:11 direct index (temp 4-component vector of float)
|
||||||
0:9 3.000000
|
0:11 'm' (temp 3X4 matrix of float)
|
||||||
|
0:11 Constant:
|
||||||
|
0:11 0 (const int)
|
||||||
|
0:11 Constant:
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:12 move second child to first child (temp 4-component vector of float)
|
||||||
|
0:12 direct index (temp 4-component vector of float)
|
||||||
|
0:12 'm' (temp 3X4 matrix of float)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 1 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:13 move second child to first child (temp 4-component vector of float)
|
||||||
|
0:13 direct index (temp 4-component vector of float)
|
||||||
|
0:13 'm' (temp 3X4 matrix of float)
|
||||||
|
0:13 Constant:
|
||||||
|
0:13 1 (const int)
|
||||||
|
0:13 Constant:
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:? Sequence
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 2 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 2 (const int)
|
||||||
|
0:19 Sequence
|
||||||
|
0:19 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 2 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 2 (const int)
|
||||||
|
0:20 Sequence
|
||||||
|
0:20 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 vector-scale (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 2.000000
|
||||||
|
0:20 'f3' (temp 3-component vector of float)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 2 (const int)
|
||||||
|
0:23 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:23 'f3' (temp 3-component vector of float)
|
||||||
|
0:23 matrix swizzle (temp 3-component vector of float)
|
||||||
|
0:23 'm' (temp 3X4 matrix of float)
|
||||||
|
0:23 Sequence
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 1 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 1 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 2 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:27 Function Definition: createMat3x3(vf3;vf3;vf3; (temp 3X3 matrix of float)
|
||||||
|
0:27 Function Parameters:
|
||||||
|
0:27 'a' (in 3-component vector of float)
|
||||||
|
0:27 'b' (in 3-component vector of float)
|
||||||
|
0:27 'c' (in 3-component vector of float)
|
||||||
|
0:? Sequence
|
||||||
|
0:? Sequence
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 1 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 1 (const int)
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 2 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 2 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 0 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 0 (const int)
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 2 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 2 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0 (const int)
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 1 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 1 (const int)
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:32 Branch: Return with expression
|
||||||
|
0:32 'm' (temp 3X3 matrix of float)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'inf' (layout(location=0 ) in float)
|
0:? 'inf' (layout(location=0 ) in float)
|
||||||
|
|
||||||
@ -58,91 +337,482 @@ Shader version: 450
|
|||||||
0:2 Function Parameters:
|
0:2 Function Parameters:
|
||||||
0:2 'inf' (layout(location=0 ) in float)
|
0:2 'inf' (layout(location=0 ) in float)
|
||||||
0:? Sequence
|
0:? Sequence
|
||||||
0:5 move second child to first child (temp float)
|
0:7 move second child to first child (temp float)
|
||||||
0:5 direct index (temp float)
|
0:7 direct index (temp float)
|
||||||
0:5 direct index (temp 4-component vector of float)
|
0:7 direct index (temp 4-component vector of float)
|
||||||
0:5 'm' (temp 3X4 matrix of float)
|
0:7 'm' (temp 3X4 matrix of float)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 2 (const int)
|
0:7 2 (const int)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 3 (const int)
|
0:7 3 (const int)
|
||||||
0:5 Constant:
|
0:7 Constant:
|
||||||
0:5 1.000000
|
0:7 1.000000
|
||||||
0:6 move second child to first child (temp float)
|
0:8 move second child to first child (temp float)
|
||||||
0:6 direct index (temp float)
|
0:8 direct index (temp float)
|
||||||
0:6 direct index (temp 4-component vector of float)
|
0:8 direct index (temp 4-component vector of float)
|
||||||
0:6 'm' (temp 3X4 matrix of float)
|
0:8 'm' (temp 3X4 matrix of float)
|
||||||
0:6 Constant:
|
0:8 Constant:
|
||||||
0:6 2 (const int)
|
0:8 2 (const int)
|
||||||
0:6 Constant:
|
|
||||||
0:6 3 (const int)
|
|
||||||
0:6 Constant:
|
|
||||||
0:6 2.000000
|
|
||||||
0:8 move second child to first child (temp 4-component vector of float)
|
|
||||||
0:8 direct index (temp 4-component vector of float)
|
|
||||||
0:8 'm' (temp 3X4 matrix of float)
|
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 0 (const int)
|
0:8 3 (const int)
|
||||||
0:8 Constant:
|
0:8 Constant:
|
||||||
0:8 3.000000
|
0:8 2.000000
|
||||||
0:8 3.000000
|
0:9 move second child to first child (temp float)
|
||||||
0:8 3.000000
|
0:9 direct index (temp float)
|
||||||
0:8 3.000000
|
0:9 direct index (temp 4-component vector of float)
|
||||||
0:9 move second child to first child (temp 4-component vector of float)
|
0:9 'm' (temp 3X4 matrix of float)
|
||||||
0:9 direct index (temp 4-component vector of float)
|
0:9 Constant:
|
||||||
0:9 'm' (temp 3X4 matrix of float)
|
0:9 2 (const int)
|
||||||
0:9 Constant:
|
0:9 Constant:
|
||||||
0:9 1 (const int)
|
0:9 3 (const int)
|
||||||
0:9 Constant:
|
0:9 Constant:
|
||||||
0:9 3.000000
|
0:9 2.000000
|
||||||
0:9 3.000000
|
0:11 move second child to first child (temp 4-component vector of float)
|
||||||
0:9 3.000000
|
0:11 direct index (temp 4-component vector of float)
|
||||||
0:9 3.000000
|
0:11 'm' (temp 3X4 matrix of float)
|
||||||
|
0:11 Constant:
|
||||||
|
0:11 0 (const int)
|
||||||
|
0:11 Constant:
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:11 3.000000
|
||||||
|
0:12 move second child to first child (temp 4-component vector of float)
|
||||||
|
0:12 direct index (temp 4-component vector of float)
|
||||||
|
0:12 'm' (temp 3X4 matrix of float)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 1 (const int)
|
||||||
|
0:12 Constant:
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:12 3.000000
|
||||||
|
0:13 move second child to first child (temp 4-component vector of float)
|
||||||
|
0:13 direct index (temp 4-component vector of float)
|
||||||
|
0:13 'm' (temp 3X4 matrix of float)
|
||||||
|
0:13 Constant:
|
||||||
|
0:13 1 (const int)
|
||||||
|
0:13 Constant:
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:13 3.000000
|
||||||
|
0:? Sequence
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 0 (const int)
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 move second child to first child (temp float)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 direct index (temp 4-component vector of float)
|
||||||
|
0:18 'm' (temp 3X4 matrix of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 1 (const int)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 2 (const int)
|
||||||
|
0:18 direct index (temp float)
|
||||||
|
0:18 'f3' (temp 3-component vector of float)
|
||||||
|
0:18 Constant:
|
||||||
|
0:18 2 (const int)
|
||||||
|
0:19 Sequence
|
||||||
|
0:19 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 5.000000
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 1 (const int)
|
||||||
|
0:19 move second child to first child (temp float)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 direct index (temp 4-component vector of float)
|
||||||
|
0:19 'm' (temp 3X4 matrix of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 2 (const int)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 0 (const int)
|
||||||
|
0:19 direct index (temp float)
|
||||||
|
0:19 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:19 Constant:
|
||||||
|
0:19 2 (const int)
|
||||||
|
0:20 Sequence
|
||||||
|
0:20 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 vector-scale (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 2.000000
|
||||||
|
0:20 'f3' (temp 3-component vector of float)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 move second child to first child (temp float)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 direct index (temp 4-component vector of float)
|
||||||
|
0:20 'm' (temp 3X4 matrix of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 1 (const int)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 0 (const int)
|
||||||
|
0:20 direct index (temp float)
|
||||||
|
0:20 'intermVec' (temp 3-component vector of float)
|
||||||
|
0:20 Constant:
|
||||||
|
0:20 2 (const int)
|
||||||
|
0:23 move second child to first child (temp 3-component vector of float)
|
||||||
|
0:23 'f3' (temp 3-component vector of float)
|
||||||
|
0:23 matrix swizzle (temp 3-component vector of float)
|
||||||
|
0:23 'm' (temp 3X4 matrix of float)
|
||||||
|
0:23 Sequence
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 1 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 1 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 2 (const int)
|
||||||
|
0:23 Constant:
|
||||||
|
0:23 0 (const int)
|
||||||
|
0:27 Function Definition: createMat3x3(vf3;vf3;vf3; (temp 3X3 matrix of float)
|
||||||
|
0:27 Function Parameters:
|
||||||
|
0:27 'a' (in 3-component vector of float)
|
||||||
|
0:27 'b' (in 3-component vector of float)
|
||||||
|
0:27 'c' (in 3-component vector of float)
|
||||||
|
0:? Sequence
|
||||||
|
0:? Sequence
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 1 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 1 (const int)
|
||||||
|
0:29 move second child to first child (temp float)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 direct index (temp 3-component vector of float)
|
||||||
|
0:29 'm' (temp 3X3 matrix of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 2 (const int)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 0 (const int)
|
||||||
|
0:29 direct index (temp float)
|
||||||
|
0:29 'a' (in 3-component vector of float)
|
||||||
|
0:29 Constant:
|
||||||
|
0:29 2 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 0 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 0 (const int)
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 move second child to first child (temp float)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 direct index (temp 3-component vector of float)
|
||||||
|
0:30 'm' (temp 3X3 matrix of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 2 (const int)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 1 (const int)
|
||||||
|
0:30 direct index (temp float)
|
||||||
|
0:30 'b' (in 3-component vector of float)
|
||||||
|
0:30 Constant:
|
||||||
|
0:30 2 (const int)
|
||||||
|
0:? Sequence
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 0 (const int)
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 1 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 1 (const int)
|
||||||
|
0:31 move second child to first child (temp float)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 direct index (temp 3-component vector of float)
|
||||||
|
0:31 'm' (temp 3X3 matrix of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:31 direct index (temp float)
|
||||||
|
0:31 'c' (in 3-component vector of float)
|
||||||
|
0:31 Constant:
|
||||||
|
0:31 2 (const int)
|
||||||
|
0:32 Branch: Return with expression
|
||||||
|
0:32 'm' (temp 3X3 matrix of float)
|
||||||
0:? Linker Objects
|
0:? Linker Objects
|
||||||
0:? 'inf' (layout(location=0 ) in float)
|
0:? 'inf' (layout(location=0 ) in float)
|
||||||
|
|
||||||
|
Missing functionality: matrix swizzle
|
||||||
// Module Version 10000
|
// Module Version 10000
|
||||||
// Generated by (magic number): 80001
|
// Generated by (magic number): 80001
|
||||||
// Id's are bound by 29
|
// Id's are bound by 109
|
||||||
|
|
||||||
Capability Shader
|
Capability Shader
|
||||||
1: ExtInstImport "GLSL.std.450"
|
1: ExtInstImport "GLSL.std.450"
|
||||||
MemoryModel Logical GLSL450
|
MemoryModel Logical GLSL450
|
||||||
EntryPoint Vertex 4 "ShaderFunction" 28
|
EntryPoint Vertex 4 "ShaderFunction" 108
|
||||||
Name 4 "ShaderFunction"
|
Name 4 "ShaderFunction"
|
||||||
Name 10 "m"
|
Name 14 "createMat3x3(vf3;vf3;vf3;"
|
||||||
Name 28 "inf"
|
Name 11 "a"
|
||||||
Decorate 28(inf) Location 0
|
Name 12 "b"
|
||||||
|
Name 13 "c"
|
||||||
|
Name 19 "m"
|
||||||
|
Name 38 "f3"
|
||||||
|
Name 51 "intermVec"
|
||||||
|
Name 63 "intermVec"
|
||||||
|
Name 76 "m"
|
||||||
|
Name 108 "inf"
|
||||||
|
Decorate 108(inf) Location 0
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeFloat 32
|
6: TypeFloat 32
|
||||||
7: TypeVector 6(float) 4
|
7: TypeVector 6(float) 3
|
||||||
8: TypeMatrix 7(fvec4) 3
|
8: TypePointer Function 7(fvec3)
|
||||||
9: TypePointer Function 8
|
9: TypeMatrix 7(fvec3) 3
|
||||||
11: TypeInt 32 1
|
10: TypeFunction 9 8(ptr) 8(ptr) 8(ptr)
|
||||||
12: 11(int) Constant 2
|
16: TypeVector 6(float) 4
|
||||||
13: 6(float) Constant 1065353216
|
17: TypeMatrix 16(fvec4) 3
|
||||||
14: TypeInt 32 0
|
18: TypePointer Function 17
|
||||||
15: 14(int) Constant 3
|
20: TypeInt 32 1
|
||||||
16: TypePointer Function 6(float)
|
21: 20(int) Constant 2
|
||||||
18: 6(float) Constant 1073741824
|
22: 6(float) Constant 1065353216
|
||||||
20: 11(int) Constant 0
|
23: TypeInt 32 0
|
||||||
21: 6(float) Constant 1077936128
|
24: 23(int) Constant 3
|
||||||
22: 7(fvec4) ConstantComposite 21 21 21 21
|
25: TypePointer Function 6(float)
|
||||||
23: TypePointer Function 7(fvec4)
|
27: 6(float) Constant 1073741824
|
||||||
25: 11(int) Constant 1
|
30: 20(int) Constant 0
|
||||||
27: TypePointer Input 6(float)
|
31: 6(float) Constant 1077936128
|
||||||
28(inf): 27(ptr) Variable Input
|
32: 16(fvec4) ConstantComposite 31 31 31 31
|
||||||
|
33: TypePointer Function 16(fvec4)
|
||||||
|
35: 20(int) Constant 1
|
||||||
|
39: 23(int) Constant 0
|
||||||
|
43: 23(int) Constant 1
|
||||||
|
47: 23(int) Constant 2
|
||||||
|
52: 6(float) Constant 1084227584
|
||||||
|
53: 7(fvec3) ConstantComposite 52 52 52
|
||||||
|
75: TypePointer Function 9
|
||||||
|
107: TypePointer Input 6(float)
|
||||||
|
108(inf): 107(ptr) Variable Input
|
||||||
4(ShaderFunction): 2 Function None 3
|
4(ShaderFunction): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
10(m): 9(ptr) Variable Function
|
19(m): 18(ptr) Variable Function
|
||||||
17: 16(ptr) AccessChain 10(m) 12 15
|
38(f3): 8(ptr) Variable Function
|
||||||
Store 17 13
|
51(intermVec): 8(ptr) Variable Function
|
||||||
19: 16(ptr) AccessChain 10(m) 12 15
|
63(intermVec): 8(ptr) Variable Function
|
||||||
Store 19 18
|
26: 25(ptr) AccessChain 19(m) 21 24
|
||||||
24: 23(ptr) AccessChain 10(m) 20
|
|
||||||
Store 24 22
|
|
||||||
26: 23(ptr) AccessChain 10(m) 25
|
|
||||||
Store 26 22
|
Store 26 22
|
||||||
|
28: 25(ptr) AccessChain 19(m) 21 24
|
||||||
|
Store 28 27
|
||||||
|
29: 25(ptr) AccessChain 19(m) 21 24
|
||||||
|
Store 29 27
|
||||||
|
34: 33(ptr) AccessChain 19(m) 30
|
||||||
|
Store 34 32
|
||||||
|
36: 33(ptr) AccessChain 19(m) 35
|
||||||
|
Store 36 32
|
||||||
|
37: 33(ptr) AccessChain 19(m) 35
|
||||||
|
Store 37 32
|
||||||
|
40: 25(ptr) AccessChain 38(f3) 39
|
||||||
|
41: 6(float) Load 40
|
||||||
|
42: 25(ptr) AccessChain 19(m) 30 39
|
||||||
|
Store 42 41
|
||||||
|
44: 25(ptr) AccessChain 38(f3) 43
|
||||||
|
45: 6(float) Load 44
|
||||||
|
46: 25(ptr) AccessChain 19(m) 35 43
|
||||||
|
Store 46 45
|
||||||
|
48: 25(ptr) AccessChain 38(f3) 47
|
||||||
|
49: 6(float) Load 48
|
||||||
|
50: 25(ptr) AccessChain 19(m) 35 47
|
||||||
|
Store 50 49
|
||||||
|
Store 51(intermVec) 53
|
||||||
|
54: 25(ptr) AccessChain 51(intermVec) 39
|
||||||
|
55: 6(float) Load 54
|
||||||
|
56: 25(ptr) AccessChain 19(m) 35 39
|
||||||
|
Store 56 55
|
||||||
|
57: 25(ptr) AccessChain 51(intermVec) 43
|
||||||
|
58: 6(float) Load 57
|
||||||
|
59: 25(ptr) AccessChain 19(m) 30 43
|
||||||
|
Store 59 58
|
||||||
|
60: 25(ptr) AccessChain 51(intermVec) 47
|
||||||
|
61: 6(float) Load 60
|
||||||
|
62: 25(ptr) AccessChain 19(m) 21 39
|
||||||
|
Store 62 61
|
||||||
|
64: 7(fvec3) Load 38(f3)
|
||||||
|
65: 7(fvec3) VectorTimesScalar 64 27
|
||||||
|
Store 63(intermVec) 65
|
||||||
|
66: 25(ptr) AccessChain 63(intermVec) 39
|
||||||
|
67: 6(float) Load 66
|
||||||
|
68: 25(ptr) AccessChain 19(m) 30 39
|
||||||
|
Store 68 67
|
||||||
|
69: 25(ptr) AccessChain 63(intermVec) 43
|
||||||
|
70: 6(float) Load 69
|
||||||
|
71: 25(ptr) AccessChain 19(m) 30 43
|
||||||
|
Store 71 70
|
||||||
|
72: 25(ptr) AccessChain 63(intermVec) 47
|
||||||
|
73: 6(float) Load 72
|
||||||
|
74: 25(ptr) AccessChain 19(m) 35 39
|
||||||
|
Store 74 73
|
||||||
|
Store 38(f3) 30
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
14(createMat3x3(vf3;vf3;vf3;): 9 Function None 10
|
||||||
|
11(a): 8(ptr) FunctionParameter
|
||||||
|
12(b): 8(ptr) FunctionParameter
|
||||||
|
13(c): 8(ptr) FunctionParameter
|
||||||
|
15: Label
|
||||||
|
76(m): 75(ptr) Variable Function
|
||||||
|
77: 25(ptr) AccessChain 11(a) 39
|
||||||
|
78: 6(float) Load 77
|
||||||
|
79: 25(ptr) AccessChain 76(m) 30 39
|
||||||
|
Store 79 78
|
||||||
|
80: 25(ptr) AccessChain 11(a) 43
|
||||||
|
81: 6(float) Load 80
|
||||||
|
82: 25(ptr) AccessChain 76(m) 35 39
|
||||||
|
Store 82 81
|
||||||
|
83: 25(ptr) AccessChain 11(a) 47
|
||||||
|
84: 6(float) Load 83
|
||||||
|
85: 25(ptr) AccessChain 76(m) 21 39
|
||||||
|
Store 85 84
|
||||||
|
86: 25(ptr) AccessChain 12(b) 39
|
||||||
|
87: 6(float) Load 86
|
||||||
|
88: 25(ptr) AccessChain 76(m) 30 43
|
||||||
|
Store 88 87
|
||||||
|
89: 25(ptr) AccessChain 12(b) 43
|
||||||
|
90: 6(float) Load 89
|
||||||
|
91: 25(ptr) AccessChain 76(m) 35 43
|
||||||
|
Store 91 90
|
||||||
|
92: 25(ptr) AccessChain 12(b) 47
|
||||||
|
93: 6(float) Load 92
|
||||||
|
94: 25(ptr) AccessChain 76(m) 21 43
|
||||||
|
Store 94 93
|
||||||
|
95: 25(ptr) AccessChain 13(c) 39
|
||||||
|
96: 6(float) Load 95
|
||||||
|
97: 25(ptr) AccessChain 76(m) 30 47
|
||||||
|
Store 97 96
|
||||||
|
98: 25(ptr) AccessChain 13(c) 43
|
||||||
|
99: 6(float) Load 98
|
||||||
|
100: 25(ptr) AccessChain 76(m) 35 47
|
||||||
|
Store 100 99
|
||||||
|
101: 25(ptr) AccessChain 13(c) 47
|
||||||
|
102: 6(float) Load 101
|
||||||
|
103: 25(ptr) AccessChain 76(m) 21 47
|
||||||
|
Store 103 102
|
||||||
|
104: 9 Load 76(m)
|
||||||
|
ReturnValue 104
|
||||||
|
FunctionEnd
|
||||||
|
@ -2,9 +2,32 @@ void ShaderFunction(float inf) : COLOR0
|
|||||||
{
|
{
|
||||||
float3x4 m;
|
float3x4 m;
|
||||||
|
|
||||||
|
// tests that convert to non-matrix swizzles
|
||||||
|
|
||||||
m._34 = 1.0; // AST should have a normal component select
|
m._34 = 1.0; // AST should have a normal component select
|
||||||
m._m23 = 2.0; // same code
|
m._m23 = 2.0; // same code
|
||||||
|
m[2][3] = 2.0; // same code
|
||||||
|
|
||||||
m._11_12_13_14 = float4(3.0); // AST should have normal column selection (first row)
|
m._11_12_13_14 = float4(3.0); // AST should have normal column selection (first row)
|
||||||
m._m10_m11_m12_m13 = float4(3.0); // AST should have normal column selection (second row)
|
m._m10_m11_m12_m13 = float4(3.0); // AST should have normal column selection (second row)
|
||||||
|
m[1] = float4(3.0); // same code
|
||||||
|
|
||||||
|
// tests that stay as matrix swizzles
|
||||||
|
|
||||||
|
float3 f3;
|
||||||
|
m._11_22_23 = f3;
|
||||||
|
m._21_12_31 = float3(5.0);
|
||||||
|
m._11_12_21 = 2 * f3;
|
||||||
|
|
||||||
|
// r-value
|
||||||
|
f3 = m._21_12_31;
|
||||||
|
}
|
||||||
|
|
||||||
|
float3x3 createMat3x3(float3 a, float3 b, float3 c)
|
||||||
|
{
|
||||||
|
float3x3 m;
|
||||||
|
m._11_21_31 = a;
|
||||||
|
m._12_22_32 = b;
|
||||||
|
m._13_23_33 = c;
|
||||||
|
return m;
|
||||||
}
|
}
|
||||||
|
@ -626,6 +626,9 @@ enum TOperator {
|
|||||||
// geometry methods
|
// geometry methods
|
||||||
EOpMethodAppend, // Geometry shader methods
|
EOpMethodAppend, // Geometry shader methods
|
||||||
EOpMethodRestartStrip, // ...
|
EOpMethodRestartStrip, // ...
|
||||||
|
|
||||||
|
// matrix
|
||||||
|
EOpMatrixSwizzle, // select multiple matrix components (non-column)
|
||||||
};
|
};
|
||||||
|
|
||||||
class TIntermTraverser;
|
class TIntermTraverser;
|
||||||
|
@ -2,5 +2,5 @@
|
|||||||
// For the version, it uses the latest git tag followed by the number of commits.
|
// For the version, it uses the latest git tag followed by the number of commits.
|
||||||
// For the date, it uses the current date (when then script is run).
|
// For the date, it uses the current date (when then script is run).
|
||||||
|
|
||||||
#define GLSLANG_REVISION "Overload400-PrecQual.1764"
|
#define GLSLANG_REVISION "Overload400-PrecQual.1766"
|
||||||
#define GLSLANG_DATE "12-Jan-2017"
|
#define GLSLANG_DATE "13-Jan-2017"
|
||||||
|
@ -1408,6 +1408,26 @@ TIntermTyped* TIntermediate::addSwizzle(TVectorFields& fields, const TSourceLoc&
|
|||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// A matrix swizzle is a sequence of nodes, 2N long, where N is the
|
||||||
|
// number of components in the swizzle, alternating col,row, col,row, ...
|
||||||
|
TIntermTyped* TIntermediate::addSwizzle(TMatrixComponents& comps, const TSourceLoc& loc)
|
||||||
|
{
|
||||||
|
TIntermAggregate* node = new TIntermAggregate(EOpSequence);
|
||||||
|
|
||||||
|
node->setLoc(loc);
|
||||||
|
TIntermConstantUnion* constIntNode;
|
||||||
|
TIntermSequence &sequenceVector = node->getSequence();
|
||||||
|
|
||||||
|
for (int i = 0; i < comps.size(); i++) {
|
||||||
|
constIntNode = addConstantUnion(comps.get(i).coord1, loc);
|
||||||
|
sequenceVector.push_back(constIntNode);
|
||||||
|
constIntNode = addConstantUnion(comps.get(i).coord2, loc);
|
||||||
|
sequenceVector.push_back(constIntNode);
|
||||||
|
}
|
||||||
|
|
||||||
|
return node;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Follow the left branches down to the root of an l-value
|
// Follow the left branches down to the root of an l-value
|
||||||
// expression (just "." and []).
|
// expression (just "." and []).
|
||||||
@ -1425,10 +1445,10 @@ const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool
|
|||||||
if (binary == nullptr)
|
if (binary == nullptr)
|
||||||
return node;
|
return node;
|
||||||
TOperator op = binary->getOp();
|
TOperator op = binary->getOp();
|
||||||
if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle)
|
if (op != EOpIndexDirect && op != EOpIndexIndirect && op != EOpIndexDirectStruct && op != EOpVectorSwizzle && op != EOpMatrixSwizzle)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
if (! swizzleOkay) {
|
if (! swizzleOkay) {
|
||||||
if (op == EOpVectorSwizzle)
|
if (op == EOpVectorSwizzle || op == EOpMatrixSwizzle)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
if ((op == EOpIndexDirect || op == EOpIndexIndirect) &&
|
if ((op == EOpIndexDirect || op == EOpIndexIndirect) &&
|
||||||
(binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) &&
|
(binary->getLeft()->getType().isVector() || binary->getLeft()->getType().isScalar()) &&
|
||||||
|
@ -129,6 +129,7 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op,
|
|||||||
case EOpIndexIndirect: // fall through
|
case EOpIndexIndirect: // fall through
|
||||||
case EOpIndexDirectStruct: // fall through
|
case EOpIndexDirectStruct: // fall through
|
||||||
case EOpVectorSwizzle:
|
case EOpVectorSwizzle:
|
||||||
|
case EOpMatrixSwizzle:
|
||||||
return lValueErrorCheck(loc, op, binaryNode->getLeft());
|
return lValueErrorCheck(loc, op, binaryNode->getLeft());
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -208,6 +209,7 @@ void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op,
|
|||||||
case EOpIndexIndirect:
|
case EOpIndexIndirect:
|
||||||
case EOpIndexDirectStruct:
|
case EOpIndexDirectStruct:
|
||||||
case EOpVectorSwizzle:
|
case EOpVectorSwizzle:
|
||||||
|
case EOpMatrixSwizzle:
|
||||||
rValueErrorCheck(loc, op, binaryNode->getLeft());
|
rValueErrorCheck(loc, op, binaryNode->getLeft());
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
@ -146,6 +146,7 @@ bool TOutputTraverser::visitBinary(TVisit /* visit */, TIntermBinary* node)
|
|||||||
out.debug << (*node->getLeft()->getType().getStruct())[node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()].type->getFieldName();
|
out.debug << (*node->getLeft()->getType().getStruct())[node->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst()].type->getFieldName();
|
||||||
out.debug << ": direct index for structure"; break;
|
out.debug << ": direct index for structure"; break;
|
||||||
case EOpVectorSwizzle: out.debug << "vector swizzle"; break;
|
case EOpVectorSwizzle: out.debug << "vector swizzle"; break;
|
||||||
|
case EOpMatrixSwizzle: out.debug << "matrix swizzle"; break;
|
||||||
|
|
||||||
case EOpAdd: out.debug << "add"; break;
|
case EOpAdd: out.debug << "add"; break;
|
||||||
case EOpSub: out.debug << "subtract"; break;
|
case EOpSub: out.debug << "subtract"; break;
|
||||||
|
@ -275,6 +275,7 @@ public:
|
|||||||
TIntermBranch* addBranch(TOperator, const TSourceLoc&);
|
TIntermBranch* addBranch(TOperator, const TSourceLoc&);
|
||||||
TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&);
|
TIntermBranch* addBranch(TOperator, TIntermTyped*, const TSourceLoc&);
|
||||||
TIntermTyped* addSwizzle(TVectorFields&, const TSourceLoc&);
|
TIntermTyped* addSwizzle(TVectorFields&, const TSourceLoc&);
|
||||||
|
TIntermTyped* addSwizzle(TMatrixComponents&, const TSourceLoc&);
|
||||||
|
|
||||||
// Low level functions to add nodes (no conversions or other higher level transformations)
|
// Low level functions to add nodes (no conversions or other higher level transformations)
|
||||||
// If a type is provided, the node's type will be set to it.
|
// If a type is provided, the node's type will be set to it.
|
||||||
|
@ -90,6 +90,7 @@ bool isDereferenceOperation(glslang::TOperator op)
|
|||||||
case glslang::EOpIndexDirectStruct:
|
case glslang::EOpIndexDirectStruct:
|
||||||
case glslang::EOpIndexIndirect:
|
case glslang::EOpIndexIndirect:
|
||||||
case glslang::EOpVectorSwizzle:
|
case glslang::EOpVectorSwizzle:
|
||||||
|
case glslang::EOpMatrixSwizzle:
|
||||||
return true;
|
return true;
|
||||||
default:
|
default:
|
||||||
return false;
|
return false;
|
||||||
|
@ -966,10 +966,9 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
|
|||||||
result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
|
result = intermediate.addIndex(EOpIndexDirect, base, index, loc);
|
||||||
result->setType(TType(base->getBasicType(), EvqTemporary));
|
result->setType(TType(base->getBasicType(), EvqTemporary));
|
||||||
} else {
|
} else {
|
||||||
TString vectorString = field;
|
|
||||||
TIntermTyped* index = intermediate.addSwizzle(fields, loc);
|
TIntermTyped* index = intermediate.addSwizzle(fields, loc);
|
||||||
result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
|
result = intermediate.addIndex(EOpVectorSwizzle, base, index, loc);
|
||||||
result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, (int)vectorString.size()));
|
result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, fields.num));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (base->isMatrix()) {
|
} else if (base->isMatrix()) {
|
||||||
@ -979,7 +978,7 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
|
|||||||
|
|
||||||
if (comps.size() == 1) {
|
if (comps.size() == 1) {
|
||||||
// Representable by m[c][r]
|
// Representable by m[c][r]
|
||||||
if (base->getType().getQualifier().storage == EvqConst) {
|
if (base->getType().getQualifier().isFrontEndConstant()) {
|
||||||
result = intermediate.foldDereference(base, comps.get(0).coord1, loc);
|
result = intermediate.foldDereference(base, comps.get(0).coord1, loc);
|
||||||
result = intermediate.foldDereference(result, comps.get(1).coord2, loc);
|
result = intermediate.foldDereference(result, comps.get(1).coord2, loc);
|
||||||
} else {
|
} else {
|
||||||
@ -994,7 +993,7 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
|
|||||||
int column = getMatrixComponentsColumn(base->getMatrixRows(), comps);
|
int column = getMatrixComponentsColumn(base->getMatrixRows(), comps);
|
||||||
if (column >= 0) {
|
if (column >= 0) {
|
||||||
// Representable by m[c]
|
// Representable by m[c]
|
||||||
if (base->getType().getQualifier().storage == EvqConst)
|
if (base->getType().getQualifier().isFrontEndConstant())
|
||||||
result = intermediate.foldDereference(base, column, loc);
|
result = intermediate.foldDereference(base, column, loc);
|
||||||
else {
|
else {
|
||||||
result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc), loc);
|
result = intermediate.addIndex(EOpIndexDirect, base, intermediate.addConstantUnion(column, loc), loc);
|
||||||
@ -1003,8 +1002,10 @@ TIntermTyped* HlslParseContext::handleDotDereference(const TSourceLoc& loc, TInt
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// general case, not a column, not a single component
|
// general case, not a column, not a single component
|
||||||
error(loc, "arbitrary matrix component selection not supported", field.c_str(), "");
|
TIntermTyped* index = intermediate.addSwizzle(comps, loc);
|
||||||
}
|
result = intermediate.addIndex(EOpMatrixSwizzle, base, index, loc);
|
||||||
|
result->setType(TType(base->getBasicType(), EvqTemporary, base->getType().getQualifier().precision, comps.size()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) {
|
} else if (base->getBasicType() == EbtStruct || base->getBasicType() == EbtBlock) {
|
||||||
const TTypeList* fields = base->getType().getStruct();
|
const TTypeList* fields = base->getType().getStruct();
|
||||||
@ -1888,13 +1889,19 @@ void HlslParseContext::handleFunctionArgument(TFunction* function,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Some simple source assignments need to be flattened to a sequence
|
// Some simple source assignments need to be flattened to a sequence
|
||||||
// of AST assignments. Catch these and flatten, otherwise, pass through
|
// of AST assignments. Catch these and flatten, otherwise, pass through
|
||||||
// to intermediate.addAssign().
|
// to intermediate.addAssign().
|
||||||
TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) const
|
//
|
||||||
|
// Also, assignment to matrix swizzles requires multiple component assignments,
|
||||||
|
// intercept those as well.
|
||||||
|
TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right)
|
||||||
{
|
{
|
||||||
if (left == nullptr || right == nullptr)
|
if (left == nullptr || right == nullptr)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
|
|
||||||
|
if (left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle)
|
||||||
|
return handleAssignToMatrixSwizzle(loc, op, left, right);
|
||||||
|
|
||||||
const bool isSplitLeft = wasSplit(left);
|
const bool isSplitLeft = wasSplit(left);
|
||||||
const bool isSplitRight = wasSplit(right);
|
const bool isSplitRight = wasSplit(right);
|
||||||
|
|
||||||
@ -1902,7 +1909,7 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
|
|||||||
const bool isFlattenRight = wasFlattened(right);
|
const bool isFlattenRight = wasFlattened(right);
|
||||||
|
|
||||||
// OK to do a single assign if both are split, or both are unsplit. But if one is and the other
|
// OK to do a single assign if both are split, or both are unsplit. But if one is and the other
|
||||||
// isn't, we fall back to a memberwise copy.
|
// isn't, we fall back to a member-wise copy.
|
||||||
if (! isFlattenLeft && ! isFlattenRight && !isSplitLeft && !isSplitRight)
|
if (! isFlattenLeft && ! isFlattenRight && !isSplitLeft && !isSplitRight)
|
||||||
return intermediate.addAssign(op, left, right, loc);
|
return intermediate.addAssign(op, left, right, loc);
|
||||||
|
|
||||||
@ -2079,6 +2086,65 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op
|
|||||||
return assignList;
|
return assignList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// An assignment to matrix swizzle must be decomposed into individual assignments.
|
||||||
|
// These must be selected component-wise from the RHS and stored component-wise
|
||||||
|
// into the LHS.
|
||||||
|
TIntermTyped* HlslParseContext::handleAssignToMatrixSwizzle(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right)
|
||||||
|
{
|
||||||
|
assert(left->getAsOperator() && left->getAsOperator()->getOp() == EOpMatrixSwizzle);
|
||||||
|
|
||||||
|
if (op != EOpAssign)
|
||||||
|
error(loc, "only simple assignment to non-simple matrix swizzle is supported", "assign", "");
|
||||||
|
|
||||||
|
// isolate the matrix and swizzle nodes
|
||||||
|
TIntermTyped* matrix = left->getAsBinaryNode()->getLeft()->getAsTyped();
|
||||||
|
const TIntermSequence& swizzle = left->getAsBinaryNode()->getRight()->getAsAggregate()->getSequence();
|
||||||
|
|
||||||
|
// if the RHS isn't already a simple vector, let's store into one
|
||||||
|
TIntermSymbol* vector = right->getAsSymbolNode();
|
||||||
|
TIntermTyped* vectorAssign = nullptr;
|
||||||
|
if (vector == nullptr) {
|
||||||
|
// create a new intermediate vector variable to assign to
|
||||||
|
TType vectorType(matrix->getBasicType(), EvqTemporary, matrix->getQualifier().precision, swizzle.size()/2);
|
||||||
|
vector = intermediate.addSymbol(*makeInternalVariable("intermVec", vectorType), loc);
|
||||||
|
|
||||||
|
// assign the right to the new vector
|
||||||
|
vectorAssign = handleAssign(loc, op, vector, right);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assign the vector components to the matrix components.
|
||||||
|
// Store this as a sequence, so a single aggregate node represents this
|
||||||
|
// entire operation.
|
||||||
|
TIntermAggregate* result = intermediate.makeAggregate(vectorAssign);
|
||||||
|
TType columnType(matrix->getType(), 0);
|
||||||
|
TType componentType(columnType, 0);
|
||||||
|
TType indexType(EbtInt);
|
||||||
|
for (int i = 0; i < (int)swizzle.size(); i += 2) {
|
||||||
|
// the right component, single index into the RHS vector
|
||||||
|
TIntermTyped* rightComp = intermediate.addIndex(EOpIndexDirect, vector,
|
||||||
|
intermediate.addConstantUnion(i/2, loc), loc);
|
||||||
|
|
||||||
|
// the left component, double index into the LHS matrix
|
||||||
|
TIntermTyped* leftComp = intermediate.addIndex(EOpIndexDirect, matrix,
|
||||||
|
intermediate.addConstantUnion(swizzle[i]->getAsConstantUnion()->getConstArray(),
|
||||||
|
indexType, loc),
|
||||||
|
loc);
|
||||||
|
leftComp->setType(columnType);
|
||||||
|
leftComp = intermediate.addIndex(EOpIndexDirect, leftComp,
|
||||||
|
intermediate.addConstantUnion(swizzle[i+1]->getAsConstantUnion()->getConstArray(),
|
||||||
|
indexType, loc),
|
||||||
|
loc);
|
||||||
|
leftComp->setType(componentType);
|
||||||
|
|
||||||
|
// Add the assignment to the aggregate
|
||||||
|
result = intermediate.growAggregate(result, intermediate.addAssign(op, leftComp, rightComp, loc));
|
||||||
|
}
|
||||||
|
|
||||||
|
result->setOp(EOpSequence);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// HLSL atomic operations have slightly different arguments than
|
// HLSL atomic operations have slightly different arguments than
|
||||||
// GLSL/AST/SPIRV. The semantics are converted below in decomposeIntrinsic.
|
// GLSL/AST/SPIRV. The semantics are converted below in decomposeIntrinsic.
|
||||||
|
@ -78,7 +78,8 @@ public:
|
|||||||
void remapNonEntryPointIO(TFunction& function);
|
void remapNonEntryPointIO(TFunction& function);
|
||||||
TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
|
TIntermNode* handleReturnValue(const TSourceLoc&, TIntermTyped*);
|
||||||
void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg);
|
void handleFunctionArgument(TFunction*, TIntermTyped*& arguments, TIntermTyped* newArg);
|
||||||
TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right) const;
|
TIntermTyped* handleAssign(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
|
||||||
|
TIntermTyped* handleAssignToMatrixSwizzle(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right);
|
||||||
TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
|
TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*);
|
||||||
void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
|
void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
|
||||||
void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
|
void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments);
|
||||||
|
Loading…
Reference in New Issue
Block a user