Add new test case for image functions and fix issues caught by this test
This commit is contained in:
parent
bba5c80957
commit
6b86d496c2
@ -1757,11 +1757,10 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate&
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lvalue) {
|
if (lvalue)
|
||||||
arguments.push_back(builder.accessChainGetLValue());
|
arguments.push_back(builder.accessChainGetLValue());
|
||||||
} else {
|
else
|
||||||
arguments.push_back(builder.accessChainLoad(convertGlslangToSpvType(glslangArguments[i]->getAsTyped()->getType())));
|
arguments.push_back(builder.accessChainLoad(convertGlslangToSpvType(glslangArguments[i]->getAsTyped()->getType())));
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1820,16 +1819,37 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
|
|
||||||
// Check for image functions other than queries
|
// Check for image functions other than queries
|
||||||
if (node->isImage()) {
|
if (node->isImage()) {
|
||||||
if (node->getOp() == glslang::EOpImageLoad) {
|
// Process image load/store
|
||||||
return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), arguments);
|
if (node->getOp() == glslang::EOpImageLoad ||
|
||||||
}
|
node->getOp() == glslang::EOpImageStore) {
|
||||||
else if (node->getOp() == glslang::EOpImageStore) {
|
std::vector<spv::Id> operands;
|
||||||
builder.createNoResultOp(spv::OpImageWrite, arguments);
|
auto opIt = arguments.begin();
|
||||||
return spv::NoResult;
|
operands.push_back(*(opIt++));
|
||||||
}
|
operands.push_back(*(opIt++));
|
||||||
else {
|
if (sampler.ms) {
|
||||||
// Process image atomic operations. GLSL "IMAGE_PARAMS" will involve in constructing an image texel
|
// For MS, image operand mask has to be added to indicate the presence of "sample" operand.
|
||||||
// pointer and this pointer, as the first source operand, is required by SPIR-V atomic operations.
|
spv::Id sample = *(opIt++);
|
||||||
|
for (; opIt != arguments.end(); ++opIt)
|
||||||
|
operands.push_back(*opIt);
|
||||||
|
|
||||||
|
operands.push_back(spv::ImageOperandsSampleMask);
|
||||||
|
operands.push_back(sample);
|
||||||
|
} else {
|
||||||
|
for (; opIt != arguments.end(); ++opIt)
|
||||||
|
operands.push_back(*opIt);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (node->getOp() == glslang::EOpImageLoad)
|
||||||
|
return builder.createOp(spv::OpImageRead, convertGlslangToSpvType(node->getType()), operands);
|
||||||
|
else {
|
||||||
|
builder.createNoResultOp(spv::OpImageWrite, operands);
|
||||||
|
return spv::NoResult;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Process image atomic operations
|
||||||
|
|
||||||
|
// GLSL "IMAGE_PARAMS" will involve in constructing an image texel pointer and this pointer,
|
||||||
|
// as the first source operand, is required by SPIR-V atomic operations.
|
||||||
std::vector<spv::Id> imageParams;
|
std::vector<spv::Id> imageParams;
|
||||||
auto opIt = arguments.begin();
|
auto opIt = arguments.begin();
|
||||||
imageParams.push_back(*(opIt++));
|
imageParams.push_back(*(opIt++));
|
||||||
@ -1885,8 +1905,8 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO
|
|||||||
if (cracked.lod) {
|
if (cracked.lod) {
|
||||||
params.lod = arguments[2];
|
params.lod = arguments[2];
|
||||||
++extraArgs;
|
++extraArgs;
|
||||||
} else if (cracked.sample) {
|
} else if (sampler.ms) {
|
||||||
params.sample = arguments[2]; // For MS, sample should be specified
|
params.sample = arguments[2]; // For MS, "sample" should be specified
|
||||||
++extraArgs;
|
++extraArgs;
|
||||||
}
|
}
|
||||||
if (cracked.grad) {
|
if (cracked.grad) {
|
||||||
|
@ -159,8 +159,9 @@ public:
|
|||||||
}
|
}
|
||||||
Id getImageType(Id resultId) const
|
Id getImageType(Id resultId) const
|
||||||
{
|
{
|
||||||
assert(isSampledImageType(getTypeId(resultId)));
|
Id typeId = getTypeId(resultId);
|
||||||
return module.getInstruction(getTypeId(resultId))->getIdOperand(0);
|
assert(isImageType(typeId) || isSampledImageType(typeId));
|
||||||
|
return isSampledImageType(typeId) ? module.getInstruction(typeId)->getIdOperand(0) : typeId;
|
||||||
}
|
}
|
||||||
bool isArrayedImageType(Id typeId) const
|
bool isArrayedImageType(Id typeId) const
|
||||||
{
|
{
|
||||||
|
@ -1635,10 +1635,12 @@ void Parameterize()
|
|||||||
|
|
||||||
InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
|
InstructionDesc[OpImageRead].operands.push(OperandId, "'Image'");
|
||||||
InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
|
InstructionDesc[OpImageRead].operands.push(OperandId, "'Coordinate'");
|
||||||
|
InstructionDesc[OpImageRead].operands.push(OperandOptionalImage, "");
|
||||||
|
|
||||||
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
|
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Image'");
|
||||||
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
|
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Coordinate'");
|
||||||
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
|
InstructionDesc[OpImageWrite].operands.push(OperandId, "'Texel'");
|
||||||
|
InstructionDesc[OpImageWrite].operands.push(OperandOptionalImage, "");
|
||||||
|
|
||||||
InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
|
InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Sampled Image'");
|
||||||
InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
|
InstructionDesc[OpImageSampleImplicitLod].operands.push(OperandId, "'Coordinate'");
|
||||||
|
@ -8,7 +8,7 @@ Linked compute stage:
|
|||||||
TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?
|
TBD functionality: Is atomic_uint an opaque handle in the uniform storage class, or an addresses in the atomic storage class?
|
||||||
// Module Version 99
|
// Module Version 99
|
||||||
// Generated by (magic number): 51a00bb
|
// Generated by (magic number): 51a00bb
|
||||||
// Id's are bound by 74
|
// Id's are bound by 64
|
||||||
|
|
||||||
Source ESSL 310
|
Source ESSL 310
|
||||||
Capability Shader
|
Capability Shader
|
||||||
@ -19,108 +19,98 @@ TBD functionality: Is atomic_uint an opaque handle in the uniform storage class,
|
|||||||
Name 10 "func(au1;"
|
Name 10 "func(au1;"
|
||||||
Name 9 "c"
|
Name 9 "c"
|
||||||
Name 12 "atoms("
|
Name 12 "atoms("
|
||||||
Name 21 "counter"
|
Name 20 "counter"
|
||||||
Name 22 "param"
|
Name 21 "param"
|
||||||
Name 25 "val"
|
Name 24 "val"
|
||||||
Name 29 "countArr"
|
Name 28 "countArr"
|
||||||
Name 38 "origi"
|
Name 35 "origi"
|
||||||
Name 40 "atomi"
|
Name 37 "atomi"
|
||||||
Name 44 "origu"
|
Name 40 "origu"
|
||||||
Name 46 "atomu"
|
Name 42 "atomu"
|
||||||
Name 48 "value"
|
Name 44 "value"
|
||||||
Name 71 "arrX"
|
Name 61 "arrX"
|
||||||
Name 72 "arrY"
|
Name 62 "arrY"
|
||||||
Name 73 "arrZ"
|
Name 63 "arrZ"
|
||||||
Decorate 21(counter) Binding 0
|
Decorate 20(counter) Binding 0
|
||||||
Decorate 29(countArr) Binding 0
|
Decorate 28(countArr) Binding 0
|
||||||
Decorate 71(arrX) NoStaticUse
|
Decorate 61(arrX) NoStaticUse
|
||||||
Decorate 72(arrY) NoStaticUse
|
Decorate 62(arrY) NoStaticUse
|
||||||
Decorate 73(arrZ) NoStaticUse
|
Decorate 63(arrZ) NoStaticUse
|
||||||
2: TypeVoid
|
2: TypeVoid
|
||||||
3: TypeFunction 2
|
3: TypeFunction 2
|
||||||
6: TypeInt 32 0
|
6: TypeInt 32 0
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
8: TypeFunction 6(int) 7(ptr)
|
8: TypeFunction 6(int) 7(ptr)
|
||||||
15: 6(int) Constant 1
|
14: 6(int) Constant 1
|
||||||
16: 6(int) Constant 0
|
15: 6(int) Constant 0
|
||||||
19: 6(int) Constant 256
|
18: 6(int) Constant 256
|
||||||
20: TypePointer UniformConstant 6(int)
|
19: TypePointer AtomicCounter 6(int)
|
||||||
21(counter): 20(ptr) Variable UniformConstant
|
20(counter): 19(ptr) Variable AtomicCounter
|
||||||
26: 6(int) Constant 4
|
25: 6(int) Constant 4
|
||||||
27: TypeArray 6(int) 26
|
26: TypeArray 6(int) 25
|
||||||
28: TypePointer UniformConstant 27
|
27: TypePointer AtomicCounter 26
|
||||||
29(countArr): 28(ptr) Variable UniformConstant
|
28(countArr): 27(ptr) Variable AtomicCounter
|
||||||
30: TypeInt 32 1
|
29: TypeInt 32 1
|
||||||
31: 30(int) Constant 2
|
30: 29(int) Constant 2
|
||||||
37: TypePointer Function 30(int)
|
34: TypePointer Function 29(int)
|
||||||
39: TypePointer WorkgroupLocal 30(int)
|
36: TypePointer WorkgroupLocal 29(int)
|
||||||
40(atomi): 39(ptr) Variable WorkgroupLocal
|
37(atomi): 36(ptr) Variable WorkgroupLocal
|
||||||
42: 30(int) Constant 3
|
38: 29(int) Constant 3
|
||||||
45: TypePointer WorkgroupLocal 6(int)
|
41: TypePointer WorkgroupLocal 6(int)
|
||||||
46(atomu): 45(ptr) Variable WorkgroupLocal
|
42(atomu): 41(ptr) Variable WorkgroupLocal
|
||||||
48(value): 20(ptr) Variable UniformConstant
|
43: TypePointer UniformConstant 6(int)
|
||||||
52: 6(int) Constant 7
|
44(value): 43(ptr) Variable UniformConstant
|
||||||
60: 30(int) Constant 7
|
47: 6(int) Constant 7
|
||||||
66: 6(int) Constant 10
|
52: 29(int) Constant 7
|
||||||
69: TypeArray 30(int) 15
|
56: 6(int) Constant 10
|
||||||
70: TypePointer PrivateGlobal 69
|
59: TypeArray 29(int) 14
|
||||||
71(arrX): 70(ptr) Variable PrivateGlobal
|
60: TypePointer PrivateGlobal 59
|
||||||
72(arrY): 70(ptr) Variable PrivateGlobal
|
61(arrX): 60(ptr) Variable PrivateGlobal
|
||||||
73(arrZ): 70(ptr) Variable PrivateGlobal
|
62(arrY): 60(ptr) Variable PrivateGlobal
|
||||||
|
63(arrZ): 60(ptr) Variable PrivateGlobal
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
5: Label
|
5: Label
|
||||||
22(param): 7(ptr) Variable Function
|
21(param): 7(ptr) Variable Function
|
||||||
25(val): 7(ptr) Variable Function
|
24(val): 7(ptr) Variable Function
|
||||||
MemoryBarrier 15 19
|
MemoryBarrier 14 18
|
||||||
23: 6(int) Load 21(counter)
|
22: 6(int) Load 20(counter)
|
||||||
Store 22(param) 23
|
Store 21(param) 22
|
||||||
24: 6(int) FunctionCall 10(func(au1;) 22(param)
|
23: 6(int) FunctionCall 10(func(au1;) 21(param)
|
||||||
32: 20(ptr) AccessChain 29(countArr) 31
|
31: 19(ptr) AccessChain 28(countArr) 30
|
||||||
33: 6(int) Load 32
|
32: 6(int) AtomicLoad 31 14 15
|
||||||
34: 6(int) AtomicLoad 33 15 16
|
Store 24(val) 32
|
||||||
Store 25(val) 34
|
33: 6(int) AtomicIDecrement 20(counter) 14 15
|
||||||
35: 6(int) Load 21(counter)
|
|
||||||
36: 6(int) AtomicIDecrement 35 15 16
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
10(func(au1;): 6(int) Function None 8
|
10(func(au1;): 6(int) Function None 8
|
||||||
9(c): 7(ptr) FunctionParameter
|
9(c): 7(ptr) FunctionParameter
|
||||||
11: Label
|
11: Label
|
||||||
14: 6(int) Load 9(c)
|
16: 6(int) AtomicIIncrement 9(c) 14 15
|
||||||
17: 6(int) AtomicIIncrement 14 15 16
|
ReturnValue 16
|
||||||
ReturnValue 17
|
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
12(atoms(): 2 Function None 3
|
12(atoms(): 2 Function None 3
|
||||||
13: Label
|
13: Label
|
||||||
38(origi): 37(ptr) Variable Function
|
35(origi): 34(ptr) Variable Function
|
||||||
44(origu): 7(ptr) Variable Function
|
40(origu): 7(ptr) Variable Function
|
||||||
41: 30(int) Load 40(atomi)
|
39: 29(int) AtomicIAdd 37(atomi) 14 15 38
|
||||||
43: 30(int) AtomicIAdd 41 15 16 42
|
Store 35(origi) 39
|
||||||
Store 38(origi) 43
|
45: 6(int) Load 44(value)
|
||||||
47: 6(int) Load 46(atomu)
|
46: 6(int) AtomicAnd 42(atomu) 14 15 45
|
||||||
49: 6(int) Load 48(value)
|
Store 40(origu) 46
|
||||||
50: 6(int) AtomicAnd 47 15 16 49
|
48: 6(int) AtomicOr 42(atomu) 14 15 47
|
||||||
Store 44(origu) 50
|
Store 40(origu) 48
|
||||||
51: 6(int) Load 46(atomu)
|
49: 6(int) AtomicXor 42(atomu) 14 15 47
|
||||||
53: 6(int) AtomicOr 51 15 16 52
|
Store 40(origu) 49
|
||||||
Store 44(origu) 53
|
50: 6(int) Load 44(value)
|
||||||
54: 6(int) Load 46(atomu)
|
51: 6(int) AtomicUMin 42(atomu) 14 15 50
|
||||||
55: 6(int) AtomicXor 54 15 16 52
|
Store 40(origu) 51
|
||||||
Store 44(origu) 55
|
53: 29(int) AtomicSMax 37(atomi) 14 15 52
|
||||||
56: 6(int) Load 46(atomu)
|
Store 35(origi) 53
|
||||||
57: 6(int) Load 48(value)
|
54: 29(int) Load 35(origi)
|
||||||
58: 6(int) AtomicSMin 56 15 16 57
|
55: 29(int) AtomicExchange 37(atomi) 14 15 54
|
||||||
Store 44(origu) 58
|
Store 35(origi) 55
|
||||||
59: 30(int) Load 40(atomi)
|
57: 6(int) Load 44(value)
|
||||||
61: 30(int) AtomicSMax 59 15 16 60
|
58: 6(int) AtomicCompareExchange 42(atomu) 14 15 15 57 56
|
||||||
Store 38(origi) 61
|
Store 40(origu) 58
|
||||||
62: 30(int) Load 40(atomi)
|
|
||||||
63: 30(int) Load 38(origi)
|
|
||||||
64: 30(int) AtomicExchange 62 15 16 63
|
|
||||||
Store 38(origi) 64
|
|
||||||
65: 6(int) Load 46(atomu)
|
|
||||||
67: 6(int) Load 48(value)
|
|
||||||
68: 6(int) AtomicCompareExchange 65 15 16 16 67 66
|
|
||||||
Store 44(origu) 68
|
|
||||||
Return
|
Return
|
||||||
FunctionEnd
|
FunctionEnd
|
||||||
|
@ -25,11 +25,11 @@ Linked vertex stage:
|
|||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: TypeBool
|
13: TypeBool
|
||||||
15: 14(bool) ConstantTrue
|
15: 13(bool) ConstantTrue
|
||||||
19: 6(int) Constant 10
|
19: 6(int) Constant 10
|
||||||
23: 6(int) Constant 1
|
23: 6(int) Constant 1
|
||||||
25: 14(bool) ConstantFalse
|
25: 13(bool) ConstantFalse
|
||||||
26: TypePointer Input 6(int)
|
26: TypePointer Input 6(int)
|
||||||
27(gl_VertexID): 26(ptr) Variable Input
|
27(gl_VertexID): 26(ptr) Variable Input
|
||||||
28(gl_InstanceID): 26(ptr) Variable Input
|
28(gl_InstanceID): 26(ptr) Variable Input
|
||||||
@ -39,15 +39,15 @@ Linked vertex stage:
|
|||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 14(bool) Phi 15 5 25 12
|
14: 13(bool) Phi 15 5 25 12
|
||||||
LoopMerge 11 None
|
LoopMerge 11 None
|
||||||
Branch 16
|
Branch 16
|
||||||
16: Label
|
16: Label
|
||||||
SelectionMerge 12 None
|
SelectionMerge 12 None
|
||||||
BranchConditional 13 12 17
|
BranchConditional 14 12 17
|
||||||
17: Label
|
17: Label
|
||||||
18: 6(int) Load 8(i)
|
18: 6(int) Load 8(i)
|
||||||
20: 14(bool) SLessThan 18 19
|
20: 13(bool) SLessThan 18 19
|
||||||
SelectionMerge 21 None
|
SelectionMerge 21 None
|
||||||
BranchConditional 20 21 11
|
BranchConditional 20 21 11
|
||||||
21: Label
|
21: Label
|
||||||
|
@ -32,12 +32,12 @@ Linked vertex stage:
|
|||||||
6: TypeInt 32 1
|
6: TypeInt 32 1
|
||||||
7: TypePointer Function 6(int)
|
7: TypePointer Function 6(int)
|
||||||
9: 6(int) Constant 0
|
9: 6(int) Constant 0
|
||||||
14: TypeBool
|
13: TypeBool
|
||||||
15: 14(bool) ConstantTrue
|
15: 13(bool) ConstantTrue
|
||||||
19: 6(int) Constant 1
|
19: 6(int) Constant 1
|
||||||
21: 6(int) Constant 19
|
21: 6(int) Constant 19
|
||||||
26: 6(int) Constant 2
|
26: 6(int) Constant 2
|
||||||
31: 14(bool) ConstantFalse
|
31: 13(bool) ConstantFalse
|
||||||
35: 6(int) Constant 5
|
35: 6(int) Constant 5
|
||||||
40: 6(int) Constant 3
|
40: 6(int) Constant 3
|
||||||
43: 6(int) Constant 42
|
43: 6(int) Constant 42
|
||||||
@ -59,17 +59,17 @@ Linked vertex stage:
|
|||||||
Store 8(i) 9
|
Store 8(i) 9
|
||||||
Branch 10
|
Branch 10
|
||||||
10: Label
|
10: Label
|
||||||
13: 14(bool) Phi 15 5 31 28 31 38
|
14: 13(bool) Phi 15 5 31 28 31 38
|
||||||
LoopMerge 11 None
|
LoopMerge 11 None
|
||||||
Branch 16
|
Branch 16
|
||||||
16: Label
|
16: Label
|
||||||
SelectionMerge 12 None
|
SelectionMerge 12 None
|
||||||
BranchConditional 13 12 17
|
BranchConditional 14 12 17
|
||||||
17: Label
|
17: Label
|
||||||
18: 6(int) Load 8(i)
|
18: 6(int) Load 8(i)
|
||||||
20: 6(int) IAdd 18 19
|
20: 6(int) IAdd 18 19
|
||||||
Store 8(i) 20
|
Store 8(i) 20
|
||||||
22: 14(bool) SLessThan 20 21
|
22: 13(bool) SLessThan 20 21
|
||||||
SelectionMerge 23 None
|
SelectionMerge 23 None
|
||||||
BranchConditional 22 23 11
|
BranchConditional 22 23 11
|
||||||
23: Label
|
23: Label
|
||||||
@ -77,7 +77,7 @@ Linked vertex stage:
|
|||||||
12: Label
|
12: Label
|
||||||
Store 24(A) 9
|
Store 24(A) 9
|
||||||
25: 6(int) Load 8(i)
|
25: 6(int) Load 8(i)
|
||||||
27: 14(bool) IEqual 25 26
|
27: 13(bool) IEqual 25 26
|
||||||
SelectionMerge 29 None
|
SelectionMerge 29 None
|
||||||
BranchConditional 27 28 29
|
BranchConditional 27 28 29
|
||||||
28: Label
|
28: Label
|
||||||
@ -88,7 +88,7 @@ Linked vertex stage:
|
|||||||
Branch 29
|
Branch 29
|
||||||
29: Label
|
29: Label
|
||||||
34: 6(int) Load 8(i)
|
34: 6(int) Load 8(i)
|
||||||
36: 14(bool) IEqual 34 35
|
36: 13(bool) IEqual 34 35
|
||||||
SelectionMerge 38 None
|
SelectionMerge 38 None
|
||||||
BranchConditional 36 37 38
|
BranchConditional 36 37 38
|
||||||
37: Label
|
37: Label
|
||||||
|
@ -28,13 +28,13 @@ Linked fragment stage:
|
|||||||
8: TypePointer Function 7(fvec4)
|
8: TypePointer Function 7(fvec4)
|
||||||
10: TypePointer Input 7(fvec4)
|
10: TypePointer Input 7(fvec4)
|
||||||
11(BaseColor): 10(ptr) Variable Input
|
11(BaseColor): 10(ptr) Variable Input
|
||||||
17: TypeBool
|
16: TypeBool
|
||||||
18: 17(bool) ConstantTrue
|
18: 16(bool) ConstantTrue
|
||||||
23: TypePointer UniformConstant 6(float)
|
23: TypePointer UniformConstant 6(float)
|
||||||
24(d): 23(ptr) Variable UniformConstant
|
24(d): 23(ptr) Variable UniformConstant
|
||||||
28: TypePointer UniformConstant 7(fvec4)
|
28: TypePointer UniformConstant 7(fvec4)
|
||||||
29(bigColor): 28(ptr) Variable UniformConstant
|
29(bigColor): 28(ptr) Variable UniformConstant
|
||||||
33: 17(bool) ConstantFalse
|
33: 16(bool) ConstantFalse
|
||||||
34: TypePointer Output 7(fvec4)
|
34: TypePointer Output 7(fvec4)
|
||||||
35(gl_FragColor): 34(ptr) Variable Output
|
35(gl_FragColor): 34(ptr) Variable Output
|
||||||
4(main): 2 Function None 3
|
4(main): 2 Function None 3
|
||||||
@ -44,17 +44,17 @@ Linked fragment stage:
|
|||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
16: 17(bool) Phi 18 5 33 15
|
17: 16(bool) Phi 18 5 33 15
|
||||||
LoopMerge 14 None
|
LoopMerge 14 None
|
||||||
Branch 19
|
Branch 19
|
||||||
19: Label
|
19: Label
|
||||||
SelectionMerge 15 None
|
SelectionMerge 15 None
|
||||||
BranchConditional 16 15 20
|
BranchConditional 17 15 20
|
||||||
20: Label
|
20: Label
|
||||||
21: 7(fvec4) Load 9(color)
|
21: 7(fvec4) Load 9(color)
|
||||||
22: 6(float) CompositeExtract 21 0
|
22: 6(float) CompositeExtract 21 0
|
||||||
25: 6(float) Load 24(d)
|
25: 6(float) Load 24(d)
|
||||||
26: 17(bool) FOrdLessThan 22 25
|
26: 16(bool) FOrdLessThan 22 25
|
||||||
SelectionMerge 27 None
|
SelectionMerge 27 None
|
||||||
BranchConditional 26 27 14
|
BranchConditional 26 27 14
|
||||||
27: Label
|
27: Label
|
||||||
|
497
Test/baseResults/spv.image.frag.out
Normal file
497
Test/baseResults/spv.image.frag.out
Normal file
@ -0,0 +1,497 @@
|
|||||||
|
spv.image.frag
|
||||||
|
Warning, version 450 is not yet complete; most version-specific features are present, but some are missing.
|
||||||
|
|
||||||
|
|
||||||
|
Linked fragment stage:
|
||||||
|
|
||||||
|
|
||||||
|
// Module Version 99
|
||||||
|
// Generated by (magic number): 51a00bb
|
||||||
|
// Id's are bound by 383
|
||||||
|
|
||||||
|
Source GLSL 450
|
||||||
|
Capability Shader
|
||||||
|
1: ExtInstImport "GLSL.std.450"
|
||||||
|
MemoryModel Logical GLSL450
|
||||||
|
EntryPoint Fragment 4 "main"
|
||||||
|
ExecutionMode 4 OriginLowerLeft
|
||||||
|
Name 4 "main"
|
||||||
|
Name 9 "iv"
|
||||||
|
Name 15 "i1D"
|
||||||
|
Name 25 "i2D"
|
||||||
|
Name 36 "i3D"
|
||||||
|
Name 43 "iCube"
|
||||||
|
Name 53 "iCubeArray"
|
||||||
|
Name 60 "i2DRect"
|
||||||
|
Name 70 "i1DArray"
|
||||||
|
Name 80 "i2DArray"
|
||||||
|
Name 87 "iBuffer"
|
||||||
|
Name 97 "i2DMS"
|
||||||
|
Name 107 "i2DMSArray"
|
||||||
|
Name 128 "v"
|
||||||
|
Name 133 "ic1D"
|
||||||
|
Name 143 "ic2D"
|
||||||
|
Name 153 "ic3D"
|
||||||
|
Name 172 "ic4D"
|
||||||
|
Name 234 "ui"
|
||||||
|
Name 238 "ii1D"
|
||||||
|
Name 252 "ui2D"
|
||||||
|
Name 255 "value"
|
||||||
|
Name 370 "fragData"
|
||||||
|
Decorate 15(i1D) Binding 0
|
||||||
|
Decorate 25(i2D) Binding 1
|
||||||
|
Decorate 36(i3D) Binding 2
|
||||||
|
Decorate 43(iCube) Binding 3
|
||||||
|
Decorate 53(iCubeArray) Binding 4
|
||||||
|
Decorate 60(i2DRect) Binding 5
|
||||||
|
Decorate 70(i1DArray) Binding 6
|
||||||
|
Decorate 80(i2DArray) Binding 7
|
||||||
|
Decorate 87(iBuffer) Binding 8
|
||||||
|
Decorate 97(i2DMS) Binding 9
|
||||||
|
Decorate 107(i2DMSArray) Binding 10
|
||||||
|
Decorate 238(ii1D) Binding 11
|
||||||
|
Decorate 252(ui2D) Binding 12
|
||||||
|
2: TypeVoid
|
||||||
|
3: TypeFunction 2
|
||||||
|
6: TypeInt 32 1
|
||||||
|
7: TypeVector 6(int) 3
|
||||||
|
8: TypePointer Function 7(ivec3)
|
||||||
|
10: 6(int) Constant 0
|
||||||
|
11: 7(ivec3) ConstantComposite 10 10 10
|
||||||
|
12: TypeFloat 32
|
||||||
|
13: TypeImage 12(float) 1D nonsampled format:Rgba32f
|
||||||
|
14: TypePointer UniformConstant 13
|
||||||
|
15(i1D): 14(ptr) Variable UniformConstant
|
||||||
|
23: TypeImage 12(float) 2D nonsampled format:Rgba32f
|
||||||
|
24: TypePointer UniformConstant 23
|
||||||
|
25(i2D): 24(ptr) Variable UniformConstant
|
||||||
|
27: TypeVector 6(int) 2
|
||||||
|
34: TypeImage 12(float) 3D nonsampled format:Rgba32f
|
||||||
|
35: TypePointer UniformConstant 34
|
||||||
|
36(i3D): 35(ptr) Variable UniformConstant
|
||||||
|
41: TypeImage 12(float) Cube nonsampled format:Rgba32f
|
||||||
|
42: TypePointer UniformConstant 41
|
||||||
|
43(iCube): 42(ptr) Variable UniformConstant
|
||||||
|
51: TypeImage 12(float) Cube array nonsampled format:Rgba32f
|
||||||
|
52: TypePointer UniformConstant 51
|
||||||
|
53(iCubeArray): 52(ptr) Variable UniformConstant
|
||||||
|
58: TypeImage 12(float) Rect nonsampled format:Rgba32f
|
||||||
|
59: TypePointer UniformConstant 58
|
||||||
|
60(i2DRect): 59(ptr) Variable UniformConstant
|
||||||
|
68: TypeImage 12(float) 1D array nonsampled format:Rgba32f
|
||||||
|
69: TypePointer UniformConstant 68
|
||||||
|
70(i1DArray): 69(ptr) Variable UniformConstant
|
||||||
|
78: TypeImage 12(float) 2D array nonsampled format:Rgba32f
|
||||||
|
79: TypePointer UniformConstant 78
|
||||||
|
80(i2DArray): 79(ptr) Variable UniformConstant
|
||||||
|
85: TypeImage 12(float) Buffer nonsampled format:Rgba32f
|
||||||
|
86: TypePointer UniformConstant 85
|
||||||
|
87(iBuffer): 86(ptr) Variable UniformConstant
|
||||||
|
95: TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f
|
||||||
|
96: TypePointer UniformConstant 95
|
||||||
|
97(i2DMS): 96(ptr) Variable UniformConstant
|
||||||
|
105: TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f
|
||||||
|
106: TypePointer UniformConstant 105
|
||||||
|
107(i2DMSArray): 106(ptr) Variable UniformConstant
|
||||||
|
126: TypeVector 12(float) 4
|
||||||
|
127: TypePointer Function 126(fvec4)
|
||||||
|
129: 12(float) Constant 0
|
||||||
|
130: 126(fvec4) ConstantComposite 129 129 129 129
|
||||||
|
132: TypePointer UniformConstant 6(int)
|
||||||
|
133(ic1D): 132(ptr) Variable UniformConstant
|
||||||
|
142: TypePointer UniformConstant 27(ivec2)
|
||||||
|
143(ic2D): 142(ptr) Variable UniformConstant
|
||||||
|
152: TypePointer UniformConstant 7(ivec3)
|
||||||
|
153(ic3D): 152(ptr) Variable UniformConstant
|
||||||
|
170: TypeVector 6(int) 4
|
||||||
|
171: TypePointer UniformConstant 170(ivec4)
|
||||||
|
172(ic4D): 171(ptr) Variable UniformConstant
|
||||||
|
214: 6(int) Constant 1
|
||||||
|
220: 6(int) Constant 2
|
||||||
|
224: 6(int) Constant 3
|
||||||
|
230: 6(int) Constant 4
|
||||||
|
232: TypeInt 32 0
|
||||||
|
233: TypePointer Function 232(int)
|
||||||
|
235: 232(int) Constant 0
|
||||||
|
236: TypeImage 6(int) 1D nonsampled format:R32i
|
||||||
|
237: TypePointer UniformConstant 236
|
||||||
|
238(ii1D): 237(ptr) Variable UniformConstant
|
||||||
|
240: 6(int) Constant 10
|
||||||
|
241: TypePointer Image 6(int)
|
||||||
|
243: 232(int) Constant 1
|
||||||
|
250: TypeImage 232(int) 2D nonsampled format:R32ui
|
||||||
|
251: TypePointer UniformConstant 250
|
||||||
|
252(ui2D): 251(ptr) Variable UniformConstant
|
||||||
|
254: TypePointer UniformConstant 232(int)
|
||||||
|
255(value): 254(ptr) Variable UniformConstant
|
||||||
|
257: TypePointer Image 232(int)
|
||||||
|
263: 6(int) Constant 11
|
||||||
|
278: 6(int) Constant 12
|
||||||
|
293: 6(int) Constant 13
|
||||||
|
308: 6(int) Constant 14
|
||||||
|
323: 6(int) Constant 15
|
||||||
|
338: 6(int) Constant 16
|
||||||
|
353: 6(int) Constant 18
|
||||||
|
354: 6(int) Constant 17
|
||||||
|
363: 232(int) Constant 19
|
||||||
|
369: TypePointer Output 126(fvec4)
|
||||||
|
370(fragData): 369(ptr) Variable Output
|
||||||
|
376: TypeBool
|
||||||
|
4(main): 2 Function None 3
|
||||||
|
5: Label
|
||||||
|
9(iv): 8(ptr) Variable Function
|
||||||
|
128(v): 127(ptr) Variable Function
|
||||||
|
234(ui): 233(ptr) Variable Function
|
||||||
|
371: 127(ptr) Variable Function
|
||||||
|
Store 9(iv) 11
|
||||||
|
16: 13 Load 15(i1D)
|
||||||
|
17: 6(int) ImageQuerySize 16
|
||||||
|
18: 7(ivec3) Load 9(iv)
|
||||||
|
19: 6(int) CompositeExtract 18 0
|
||||||
|
20: 6(int) IAdd 19 17
|
||||||
|
21: 7(ivec3) Load 9(iv)
|
||||||
|
22: 7(ivec3) CompositeInsert 20 21 0
|
||||||
|
Store 9(iv) 22
|
||||||
|
26: 23 Load 25(i2D)
|
||||||
|
28: 27(ivec2) ImageQuerySize 26
|
||||||
|
29: 7(ivec3) Load 9(iv)
|
||||||
|
30: 27(ivec2) VectorShuffle 29 29 0 1
|
||||||
|
31: 27(ivec2) IAdd 30 28
|
||||||
|
32: 7(ivec3) Load 9(iv)
|
||||||
|
33: 7(ivec3) VectorShuffle 32 31 3 4 2
|
||||||
|
Store 9(iv) 33
|
||||||
|
37: 34 Load 36(i3D)
|
||||||
|
38: 7(ivec3) ImageQuerySize 37
|
||||||
|
39: 7(ivec3) Load 9(iv)
|
||||||
|
40: 7(ivec3) IAdd 39 38
|
||||||
|
Store 9(iv) 40
|
||||||
|
44: 41 Load 43(iCube)
|
||||||
|
45: 27(ivec2) ImageQuerySize 44
|
||||||
|
46: 7(ivec3) Load 9(iv)
|
||||||
|
47: 27(ivec2) VectorShuffle 46 46 0 1
|
||||||
|
48: 27(ivec2) IAdd 47 45
|
||||||
|
49: 7(ivec3) Load 9(iv)
|
||||||
|
50: 7(ivec3) VectorShuffle 49 48 3 4 2
|
||||||
|
Store 9(iv) 50
|
||||||
|
54: 51 Load 53(iCubeArray)
|
||||||
|
55: 7(ivec3) ImageQuerySize 54
|
||||||
|
56: 7(ivec3) Load 9(iv)
|
||||||
|
57: 7(ivec3) IAdd 56 55
|
||||||
|
Store 9(iv) 57
|
||||||
|
61: 58 Load 60(i2DRect)
|
||||||
|
62: 27(ivec2) ImageQuerySize 61
|
||||||
|
63: 7(ivec3) Load 9(iv)
|
||||||
|
64: 27(ivec2) VectorShuffle 63 63 0 1
|
||||||
|
65: 27(ivec2) IAdd 64 62
|
||||||
|
66: 7(ivec3) Load 9(iv)
|
||||||
|
67: 7(ivec3) VectorShuffle 66 65 3 4 2
|
||||||
|
Store 9(iv) 67
|
||||||
|
71: 68 Load 70(i1DArray)
|
||||||
|
72: 27(ivec2) ImageQuerySize 71
|
||||||
|
73: 7(ivec3) Load 9(iv)
|
||||||
|
74: 27(ivec2) VectorShuffle 73 73 0 1
|
||||||
|
75: 27(ivec2) IAdd 74 72
|
||||||
|
76: 7(ivec3) Load 9(iv)
|
||||||
|
77: 7(ivec3) VectorShuffle 76 75 3 4 2
|
||||||
|
Store 9(iv) 77
|
||||||
|
81: 78 Load 80(i2DArray)
|
||||||
|
82: 7(ivec3) ImageQuerySize 81
|
||||||
|
83: 7(ivec3) Load 9(iv)
|
||||||
|
84: 7(ivec3) IAdd 83 82
|
||||||
|
Store 9(iv) 84
|
||||||
|
88: 85 Load 87(iBuffer)
|
||||||
|
89: 6(int) ImageQuerySize 88
|
||||||
|
90: 7(ivec3) Load 9(iv)
|
||||||
|
91: 6(int) CompositeExtract 90 0
|
||||||
|
92: 6(int) IAdd 91 89
|
||||||
|
93: 7(ivec3) Load 9(iv)
|
||||||
|
94: 7(ivec3) CompositeInsert 92 93 0
|
||||||
|
Store 9(iv) 94
|
||||||
|
98: 95 Load 97(i2DMS)
|
||||||
|
99: 27(ivec2) ImageQuerySize 98
|
||||||
|
100: 7(ivec3) Load 9(iv)
|
||||||
|
101: 27(ivec2) VectorShuffle 100 100 0 1
|
||||||
|
102: 27(ivec2) IAdd 101 99
|
||||||
|
103: 7(ivec3) Load 9(iv)
|
||||||
|
104: 7(ivec3) VectorShuffle 103 102 3 4 2
|
||||||
|
Store 9(iv) 104
|
||||||
|
108: 105 Load 107(i2DMSArray)
|
||||||
|
109: 7(ivec3) ImageQuerySize 108
|
||||||
|
110: 7(ivec3) Load 9(iv)
|
||||||
|
111: 7(ivec3) IAdd 110 109
|
||||||
|
Store 9(iv) 111
|
||||||
|
112: 95 Load 97(i2DMS)
|
||||||
|
113: 6(int) ImageQuerySamples 112
|
||||||
|
114: 7(ivec3) Load 9(iv)
|
||||||
|
115: 6(int) CompositeExtract 114 0
|
||||||
|
116: 6(int) IAdd 115 113
|
||||||
|
117: 7(ivec3) Load 9(iv)
|
||||||
|
118: 7(ivec3) CompositeInsert 116 117 0
|
||||||
|
Store 9(iv) 118
|
||||||
|
119: 105 Load 107(i2DMSArray)
|
||||||
|
120: 6(int) ImageQuerySamples 119
|
||||||
|
121: 7(ivec3) Load 9(iv)
|
||||||
|
122: 6(int) CompositeExtract 121 0
|
||||||
|
123: 6(int) IAdd 122 120
|
||||||
|
124: 7(ivec3) Load 9(iv)
|
||||||
|
125: 7(ivec3) CompositeInsert 123 124 0
|
||||||
|
Store 9(iv) 125
|
||||||
|
Store 128(v) 130
|
||||||
|
131: 13 Load 15(i1D)
|
||||||
|
134: 6(int) Load 133(ic1D)
|
||||||
|
135: 126(fvec4) ImageRead 131 134
|
||||||
|
136: 126(fvec4) Load 128(v)
|
||||||
|
137: 126(fvec4) FAdd 136 135
|
||||||
|
Store 128(v) 137
|
||||||
|
138: 13 Load 15(i1D)
|
||||||
|
139: 6(int) Load 133(ic1D)
|
||||||
|
140: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 138 139 140
|
||||||
|
141: 23 Load 25(i2D)
|
||||||
|
144: 27(ivec2) Load 143(ic2D)
|
||||||
|
145: 126(fvec4) ImageRead 141 144
|
||||||
|
146: 126(fvec4) Load 128(v)
|
||||||
|
147: 126(fvec4) FAdd 146 145
|
||||||
|
Store 128(v) 147
|
||||||
|
148: 23 Load 25(i2D)
|
||||||
|
149: 27(ivec2) Load 143(ic2D)
|
||||||
|
150: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 148 149 150
|
||||||
|
151: 34 Load 36(i3D)
|
||||||
|
154: 7(ivec3) Load 153(ic3D)
|
||||||
|
155: 126(fvec4) ImageRead 151 154
|
||||||
|
156: 126(fvec4) Load 128(v)
|
||||||
|
157: 126(fvec4) FAdd 156 155
|
||||||
|
Store 128(v) 157
|
||||||
|
158: 34 Load 36(i3D)
|
||||||
|
159: 7(ivec3) Load 153(ic3D)
|
||||||
|
160: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 158 159 160
|
||||||
|
161: 41 Load 43(iCube)
|
||||||
|
162: 7(ivec3) Load 153(ic3D)
|
||||||
|
163: 126(fvec4) ImageRead 161 162
|
||||||
|
164: 126(fvec4) Load 128(v)
|
||||||
|
165: 126(fvec4) FAdd 164 163
|
||||||
|
Store 128(v) 165
|
||||||
|
166: 41 Load 43(iCube)
|
||||||
|
167: 7(ivec3) Load 153(ic3D)
|
||||||
|
168: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 166 167 168
|
||||||
|
169: 51 Load 53(iCubeArray)
|
||||||
|
173: 170(ivec4) Load 172(ic4D)
|
||||||
|
174: 126(fvec4) ImageRead 169 173
|
||||||
|
175: 126(fvec4) Load 128(v)
|
||||||
|
176: 126(fvec4) FAdd 175 174
|
||||||
|
Store 128(v) 176
|
||||||
|
177: 51 Load 53(iCubeArray)
|
||||||
|
178: 170(ivec4) Load 172(ic4D)
|
||||||
|
179: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 177 178 179
|
||||||
|
180: 58 Load 60(i2DRect)
|
||||||
|
181: 27(ivec2) Load 143(ic2D)
|
||||||
|
182: 126(fvec4) ImageRead 180 181
|
||||||
|
183: 126(fvec4) Load 128(v)
|
||||||
|
184: 126(fvec4) FAdd 183 182
|
||||||
|
Store 128(v) 184
|
||||||
|
185: 58 Load 60(i2DRect)
|
||||||
|
186: 27(ivec2) Load 143(ic2D)
|
||||||
|
187: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 185 186 187
|
||||||
|
188: 68 Load 70(i1DArray)
|
||||||
|
189: 27(ivec2) Load 143(ic2D)
|
||||||
|
190: 126(fvec4) ImageRead 188 189
|
||||||
|
191: 126(fvec4) Load 128(v)
|
||||||
|
192: 126(fvec4) FAdd 191 190
|
||||||
|
Store 128(v) 192
|
||||||
|
193: 68 Load 70(i1DArray)
|
||||||
|
194: 27(ivec2) Load 143(ic2D)
|
||||||
|
195: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 193 194 195
|
||||||
|
196: 78 Load 80(i2DArray)
|
||||||
|
197: 7(ivec3) Load 153(ic3D)
|
||||||
|
198: 126(fvec4) ImageRead 196 197
|
||||||
|
199: 126(fvec4) Load 128(v)
|
||||||
|
200: 126(fvec4) FAdd 199 198
|
||||||
|
Store 128(v) 200
|
||||||
|
201: 78 Load 80(i2DArray)
|
||||||
|
202: 7(ivec3) Load 153(ic3D)
|
||||||
|
203: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 201 202 203
|
||||||
|
204: 85 Load 87(iBuffer)
|
||||||
|
205: 6(int) Load 133(ic1D)
|
||||||
|
206: 126(fvec4) ImageRead 204 205
|
||||||
|
207: 126(fvec4) Load 128(v)
|
||||||
|
208: 126(fvec4) FAdd 207 206
|
||||||
|
Store 128(v) 208
|
||||||
|
209: 85 Load 87(iBuffer)
|
||||||
|
210: 6(int) Load 133(ic1D)
|
||||||
|
211: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 209 210 211
|
||||||
|
212: 95 Load 97(i2DMS)
|
||||||
|
213: 27(ivec2) Load 143(ic2D)
|
||||||
|
215: 126(fvec4) ImageRead 212 213 214
|
||||||
|
216: 126(fvec4) Load 128(v)
|
||||||
|
217: 126(fvec4) FAdd 216 215
|
||||||
|
Store 128(v) 217
|
||||||
|
218: 95 Load 97(i2DMS)
|
||||||
|
219: 27(ivec2) Load 143(ic2D)
|
||||||
|
221: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 218 219 221 220
|
||||||
|
222: 105 Load 107(i2DMSArray)
|
||||||
|
223: 7(ivec3) Load 153(ic3D)
|
||||||
|
225: 126(fvec4) ImageRead 222 223 224
|
||||||
|
226: 126(fvec4) Load 128(v)
|
||||||
|
227: 126(fvec4) FAdd 226 225
|
||||||
|
Store 128(v) 227
|
||||||
|
228: 105 Load 107(i2DMSArray)
|
||||||
|
229: 7(ivec3) Load 153(ic3D)
|
||||||
|
231: 126(fvec4) Load 128(v)
|
||||||
|
ImageWrite 228 229 231 230
|
||||||
|
Store 234(ui) 235
|
||||||
|
239: 6(int) Load 133(ic1D)
|
||||||
|
242: 241(ptr) ImageTexelPointer 238(ii1D) 239 0
|
||||||
|
244: 6(int) AtomicIAdd 242 243 235 240
|
||||||
|
245: 7(ivec3) Load 9(iv)
|
||||||
|
246: 6(int) CompositeExtract 245 0
|
||||||
|
247: 6(int) IAdd 246 244
|
||||||
|
248: 7(ivec3) Load 9(iv)
|
||||||
|
249: 7(ivec3) CompositeInsert 247 248 0
|
||||||
|
Store 9(iv) 249
|
||||||
|
253: 27(ivec2) Load 143(ic2D)
|
||||||
|
256: 232(int) Load 255(value)
|
||||||
|
258: 257(ptr) ImageTexelPointer 252(ui2D) 253 0
|
||||||
|
259: 232(int) AtomicIAdd 258 243 235 256
|
||||||
|
260: 232(int) Load 234(ui)
|
||||||
|
261: 232(int) IAdd 260 259
|
||||||
|
Store 234(ui) 261
|
||||||
|
262: 6(int) Load 133(ic1D)
|
||||||
|
264: 241(ptr) ImageTexelPointer 238(ii1D) 262 0
|
||||||
|
265: 6(int) AtomicSMin 264 243 235 263
|
||||||
|
266: 7(ivec3) Load 9(iv)
|
||||||
|
267: 6(int) CompositeExtract 266 0
|
||||||
|
268: 6(int) IAdd 267 265
|
||||||
|
269: 7(ivec3) Load 9(iv)
|
||||||
|
270: 7(ivec3) CompositeInsert 268 269 0
|
||||||
|
Store 9(iv) 270
|
||||||
|
271: 27(ivec2) Load 143(ic2D)
|
||||||
|
272: 232(int) Load 255(value)
|
||||||
|
273: 257(ptr) ImageTexelPointer 252(ui2D) 271 0
|
||||||
|
274: 232(int) AtomicUMin 273 243 235 272
|
||||||
|
275: 232(int) Load 234(ui)
|
||||||
|
276: 232(int) IAdd 275 274
|
||||||
|
Store 234(ui) 276
|
||||||
|
277: 6(int) Load 133(ic1D)
|
||||||
|
279: 241(ptr) ImageTexelPointer 238(ii1D) 277 0
|
||||||
|
280: 6(int) AtomicSMax 279 243 235 278
|
||||||
|
281: 7(ivec3) Load 9(iv)
|
||||||
|
282: 6(int) CompositeExtract 281 0
|
||||||
|
283: 6(int) IAdd 282 280
|
||||||
|
284: 7(ivec3) Load 9(iv)
|
||||||
|
285: 7(ivec3) CompositeInsert 283 284 0
|
||||||
|
Store 9(iv) 285
|
||||||
|
286: 27(ivec2) Load 143(ic2D)
|
||||||
|
287: 232(int) Load 255(value)
|
||||||
|
288: 257(ptr) ImageTexelPointer 252(ui2D) 286 0
|
||||||
|
289: 232(int) AtomicUMax 288 243 235 287
|
||||||
|
290: 232(int) Load 234(ui)
|
||||||
|
291: 232(int) IAdd 290 289
|
||||||
|
Store 234(ui) 291
|
||||||
|
292: 6(int) Load 133(ic1D)
|
||||||
|
294: 241(ptr) ImageTexelPointer 238(ii1D) 292 0
|
||||||
|
295: 6(int) AtomicAnd 294 243 235 293
|
||||||
|
296: 7(ivec3) Load 9(iv)
|
||||||
|
297: 6(int) CompositeExtract 296 0
|
||||||
|
298: 6(int) IAdd 297 295
|
||||||
|
299: 7(ivec3) Load 9(iv)
|
||||||
|
300: 7(ivec3) CompositeInsert 298 299 0
|
||||||
|
Store 9(iv) 300
|
||||||
|
301: 27(ivec2) Load 143(ic2D)
|
||||||
|
302: 232(int) Load 255(value)
|
||||||
|
303: 257(ptr) ImageTexelPointer 252(ui2D) 301 0
|
||||||
|
304: 232(int) AtomicAnd 303 243 235 302
|
||||||
|
305: 232(int) Load 234(ui)
|
||||||
|
306: 232(int) IAdd 305 304
|
||||||
|
Store 234(ui) 306
|
||||||
|
307: 6(int) Load 133(ic1D)
|
||||||
|
309: 241(ptr) ImageTexelPointer 238(ii1D) 307 0
|
||||||
|
310: 6(int) AtomicOr 309 243 235 308
|
||||||
|
311: 7(ivec3) Load 9(iv)
|
||||||
|
312: 6(int) CompositeExtract 311 0
|
||||||
|
313: 6(int) IAdd 312 310
|
||||||
|
314: 7(ivec3) Load 9(iv)
|
||||||
|
315: 7(ivec3) CompositeInsert 313 314 0
|
||||||
|
Store 9(iv) 315
|
||||||
|
316: 27(ivec2) Load 143(ic2D)
|
||||||
|
317: 232(int) Load 255(value)
|
||||||
|
318: 257(ptr) ImageTexelPointer 252(ui2D) 316 0
|
||||||
|
319: 232(int) AtomicOr 318 243 235 317
|
||||||
|
320: 232(int) Load 234(ui)
|
||||||
|
321: 232(int) IAdd 320 319
|
||||||
|
Store 234(ui) 321
|
||||||
|
322: 6(int) Load 133(ic1D)
|
||||||
|
324: 241(ptr) ImageTexelPointer 238(ii1D) 322 0
|
||||||
|
325: 6(int) AtomicXor 324 243 235 323
|
||||||
|
326: 7(ivec3) Load 9(iv)
|
||||||
|
327: 6(int) CompositeExtract 326 0
|
||||||
|
328: 6(int) IAdd 327 325
|
||||||
|
329: 7(ivec3) Load 9(iv)
|
||||||
|
330: 7(ivec3) CompositeInsert 328 329 0
|
||||||
|
Store 9(iv) 330
|
||||||
|
331: 27(ivec2) Load 143(ic2D)
|
||||||
|
332: 232(int) Load 255(value)
|
||||||
|
333: 257(ptr) ImageTexelPointer 252(ui2D) 331 0
|
||||||
|
334: 232(int) AtomicXor 333 243 235 332
|
||||||
|
335: 232(int) Load 234(ui)
|
||||||
|
336: 232(int) IAdd 335 334
|
||||||
|
Store 234(ui) 336
|
||||||
|
337: 6(int) Load 133(ic1D)
|
||||||
|
339: 241(ptr) ImageTexelPointer 238(ii1D) 337 0
|
||||||
|
340: 6(int) AtomicExchange 339 243 235 338
|
||||||
|
341: 7(ivec3) Load 9(iv)
|
||||||
|
342: 6(int) CompositeExtract 341 0
|
||||||
|
343: 6(int) IAdd 342 340
|
||||||
|
344: 7(ivec3) Load 9(iv)
|
||||||
|
345: 7(ivec3) CompositeInsert 343 344 0
|
||||||
|
Store 9(iv) 345
|
||||||
|
346: 27(ivec2) Load 143(ic2D)
|
||||||
|
347: 232(int) Load 255(value)
|
||||||
|
348: 257(ptr) ImageTexelPointer 252(ui2D) 346 0
|
||||||
|
349: 232(int) AtomicExchange 348 243 235 347
|
||||||
|
350: 232(int) Load 234(ui)
|
||||||
|
351: 232(int) IAdd 350 349
|
||||||
|
Store 234(ui) 351
|
||||||
|
352: 6(int) Load 133(ic1D)
|
||||||
|
355: 241(ptr) ImageTexelPointer 238(ii1D) 352 0
|
||||||
|
356: 6(int) AtomicCompareExchange 355 243 235 235 354 353
|
||||||
|
357: 7(ivec3) Load 9(iv)
|
||||||
|
358: 6(int) CompositeExtract 357 0
|
||||||
|
359: 6(int) IAdd 358 356
|
||||||
|
360: 7(ivec3) Load 9(iv)
|
||||||
|
361: 7(ivec3) CompositeInsert 359 360 0
|
||||||
|
Store 9(iv) 361
|
||||||
|
362: 27(ivec2) Load 143(ic2D)
|
||||||
|
364: 232(int) Load 255(value)
|
||||||
|
365: 257(ptr) ImageTexelPointer 252(ui2D) 362 0
|
||||||
|
366: 232(int) AtomicCompareExchange 365 243 235 235 364 363
|
||||||
|
367: 232(int) Load 234(ui)
|
||||||
|
368: 232(int) IAdd 367 366
|
||||||
|
Store 234(ui) 368
|
||||||
|
372: 232(int) Load 234(ui)
|
||||||
|
373: 7(ivec3) Load 9(iv)
|
||||||
|
374: 6(int) CompositeExtract 373 1
|
||||||
|
375: 232(int) Bitcast 374
|
||||||
|
377: 376(bool) INotEqual 372 375
|
||||||
|
SelectionMerge 379 None
|
||||||
|
BranchConditional 377 378 381
|
||||||
|
378: Label
|
||||||
|
380: 126(fvec4) Load 128(v)
|
||||||
|
Store 371 380
|
||||||
|
Branch 379
|
||||||
|
381: Label
|
||||||
|
Store 371 130
|
||||||
|
Branch 379
|
||||||
|
379: Label
|
||||||
|
382: 126(fvec4) Load 371
|
||||||
|
Store 370(fragData) 382
|
||||||
|
Return
|
||||||
|
FunctionEnd
|
@ -117,15 +117,15 @@ Linked fragment stage:
|
|||||||
8: TypePointer Function 7(fvec4)
|
8: TypePointer Function 7(fvec4)
|
||||||
10: TypePointer Input 7(fvec4)
|
10: TypePointer Input 7(fvec4)
|
||||||
11(BaseColor): 10(ptr) Variable Input
|
11(BaseColor): 10(ptr) Variable Input
|
||||||
17: TypeBool
|
16: TypeBool
|
||||||
18: 17(bool) ConstantTrue
|
18: 16(bool) ConstantTrue
|
||||||
23: TypePointer UniformConstant 6(float)
|
23: TypePointer UniformConstant 6(float)
|
||||||
24(d4): 23(ptr) Variable UniformConstant
|
24(d4): 23(ptr) Variable UniformConstant
|
||||||
28: TypePointer UniformConstant 7(fvec4)
|
28: TypePointer UniformConstant 7(fvec4)
|
||||||
29(bigColor4): 28(ptr) Variable UniformConstant
|
29(bigColor4): 28(ptr) Variable UniformConstant
|
||||||
39: 6(float) Constant 1073741824
|
39: 6(float) Constant 1073741824
|
||||||
53: 6(float) Constant 1065353216
|
53: 6(float) Constant 1065353216
|
||||||
57: 17(bool) ConstantFalse
|
57: 16(bool) ConstantFalse
|
||||||
83(d13): 23(ptr) Variable UniformConstant
|
83(d13): 23(ptr) Variable UniformConstant
|
||||||
147: TypePointer Output 7(fvec4)
|
147: TypePointer Output 7(fvec4)
|
||||||
148(gl_FragColor): 147(ptr) Variable Output
|
148(gl_FragColor): 147(ptr) Variable Output
|
||||||
@ -181,17 +181,17 @@ Linked fragment stage:
|
|||||||
Store 9(color) 12
|
Store 9(color) 12
|
||||||
Branch 13
|
Branch 13
|
||||||
13: Label
|
13: Label
|
||||||
16: 17(bool) Phi 18 5 57 49 57 64
|
17: 16(bool) Phi 18 5 57 49 57 64
|
||||||
LoopMerge 14 None
|
LoopMerge 14 None
|
||||||
Branch 19
|
Branch 19
|
||||||
19: Label
|
19: Label
|
||||||
SelectionMerge 15 None
|
SelectionMerge 15 None
|
||||||
BranchConditional 16 15 20
|
BranchConditional 17 15 20
|
||||||
20: Label
|
20: Label
|
||||||
21: 7(fvec4) Load 9(color)
|
21: 7(fvec4) Load 9(color)
|
||||||
22: 6(float) CompositeExtract 21 2
|
22: 6(float) CompositeExtract 21 2
|
||||||
25: 6(float) Load 24(d4)
|
25: 6(float) Load 24(d4)
|
||||||
26: 17(bool) FOrdLessThan 22 25
|
26: 16(bool) FOrdLessThan 22 25
|
||||||
SelectionMerge 27 None
|
SelectionMerge 27 None
|
||||||
BranchConditional 26 27 14
|
BranchConditional 26 27 14
|
||||||
27: Label
|
27: Label
|
||||||
@ -204,7 +204,7 @@ Linked fragment stage:
|
|||||||
33: 7(fvec4) Load 9(color)
|
33: 7(fvec4) Load 9(color)
|
||||||
34: 6(float) CompositeExtract 33 0
|
34: 6(float) CompositeExtract 33 0
|
||||||
35: 6(float) Load 24(d4)
|
35: 6(float) Load 24(d4)
|
||||||
36: 17(bool) FOrdLessThan 34 35
|
36: 16(bool) FOrdLessThan 34 35
|
||||||
SelectionMerge 38 None
|
SelectionMerge 38 None
|
||||||
BranchConditional 36 37 38
|
BranchConditional 36 37 38
|
||||||
37: Label
|
37: Label
|
||||||
@ -217,7 +217,7 @@ Linked fragment stage:
|
|||||||
45: 7(fvec4) Load 9(color)
|
45: 7(fvec4) Load 9(color)
|
||||||
46: 6(float) CompositeExtract 45 2
|
46: 6(float) CompositeExtract 45 2
|
||||||
47: 6(float) Load 24(d4)
|
47: 6(float) Load 24(d4)
|
||||||
48: 17(bool) FOrdLessThan 46 47
|
48: 16(bool) FOrdLessThan 46 47
|
||||||
SelectionMerge 50 None
|
SelectionMerge 50 None
|
||||||
BranchConditional 48 49 50
|
BranchConditional 48 49 50
|
||||||
49: Label
|
49: Label
|
||||||
@ -234,7 +234,7 @@ Linked fragment stage:
|
|||||||
59: 7(fvec4) Load 9(color)
|
59: 7(fvec4) Load 9(color)
|
||||||
60: 6(float) CompositeExtract 59 1
|
60: 6(float) CompositeExtract 59 1
|
||||||
61: 6(float) Load 24(d4)
|
61: 6(float) Load 24(d4)
|
||||||
62: 17(bool) FOrdLessThan 60 61
|
62: 16(bool) FOrdLessThan 60 61
|
||||||
SelectionMerge 64 None
|
SelectionMerge 64 None
|
||||||
BranchConditional 62 63 71
|
BranchConditional 62 63 71
|
||||||
63: Label
|
63: Label
|
||||||
@ -263,14 +263,14 @@ Linked fragment stage:
|
|||||||
81: 7(fvec4) Load 9(color)
|
81: 7(fvec4) Load 9(color)
|
||||||
82: 6(float) CompositeExtract 81 3
|
82: 6(float) CompositeExtract 81 3
|
||||||
84: 6(float) Load 83(d13)
|
84: 6(float) Load 83(d13)
|
||||||
85: 17(bool) FOrdLessThan 82 84
|
85: 16(bool) FOrdLessThan 82 84
|
||||||
LoopMerge 79 None
|
LoopMerge 79 None
|
||||||
BranchConditional 85 80 79
|
BranchConditional 85 80 79
|
||||||
80: Label
|
80: Label
|
||||||
86: 7(fvec4) Load 9(color)
|
86: 7(fvec4) Load 9(color)
|
||||||
87: 6(float) CompositeExtract 86 2
|
87: 6(float) CompositeExtract 86 2
|
||||||
88: 6(float) Load 83(d13)
|
88: 6(float) Load 83(d13)
|
||||||
89: 17(bool) FOrdLessThan 87 88
|
89: 16(bool) FOrdLessThan 87 88
|
||||||
SelectionMerge 91 None
|
SelectionMerge 91 None
|
||||||
BranchConditional 89 90 95
|
BranchConditional 89 90 95
|
||||||
90: Label
|
90: Label
|
||||||
@ -293,7 +293,7 @@ Linked fragment stage:
|
|||||||
102: 7(fvec4) Load 9(color)
|
102: 7(fvec4) Load 9(color)
|
||||||
103: 6(float) CompositeExtract 102 0
|
103: 6(float) CompositeExtract 102 0
|
||||||
104: 6(float) Load 24(d4)
|
104: 6(float) Load 24(d4)
|
||||||
105: 17(bool) FOrdLessThan 103 104
|
105: 16(bool) FOrdLessThan 103 104
|
||||||
SelectionMerge 107 None
|
SelectionMerge 107 None
|
||||||
BranchConditional 105 106 107
|
BranchConditional 105 106 107
|
||||||
106: Label
|
106: Label
|
||||||
@ -306,7 +306,7 @@ Linked fragment stage:
|
|||||||
113: 7(fvec4) Load 9(color)
|
113: 7(fvec4) Load 9(color)
|
||||||
114: 6(float) CompositeExtract 113 2
|
114: 6(float) CompositeExtract 113 2
|
||||||
115: 6(float) Load 24(d4)
|
115: 6(float) Load 24(d4)
|
||||||
116: 17(bool) FOrdLessThan 114 115
|
116: 16(bool) FOrdLessThan 114 115
|
||||||
SelectionMerge 118 None
|
SelectionMerge 118 None
|
||||||
BranchConditional 116 117 118
|
BranchConditional 116 117 118
|
||||||
117: Label
|
117: Label
|
||||||
@ -323,7 +323,7 @@ Linked fragment stage:
|
|||||||
125: 7(fvec4) Load 9(color)
|
125: 7(fvec4) Load 9(color)
|
||||||
126: 6(float) CompositeExtract 125 1
|
126: 6(float) CompositeExtract 125 1
|
||||||
127: 6(float) Load 24(d4)
|
127: 6(float) Load 24(d4)
|
||||||
128: 17(bool) FOrdLessThan 126 127
|
128: 16(bool) FOrdLessThan 126 127
|
||||||
SelectionMerge 130 None
|
SelectionMerge 130 None
|
||||||
BranchConditional 128 129 137
|
BranchConditional 128 129 137
|
||||||
129: Label
|
129: Label
|
||||||
|
@ -196,13 +196,13 @@ Linked fragment stage:
|
|||||||
64: 21 Load 23(s3D)
|
64: 21 Load 23(s3D)
|
||||||
68: 65(ivec3) Load 67(ic3D)
|
68: 65(ivec3) Load 67(ic3D)
|
||||||
71: 50(int) Load 70(ic1D)
|
71: 50(int) Load 70(ic1D)
|
||||||
72: 7(fvec4) ImageFetch 64 68
|
72: 7(fvec4) ImageFetch 64 68 71
|
||||||
73: 7(fvec4) Load 9(v)
|
73: 7(fvec4) Load 9(v)
|
||||||
74: 7(fvec4) FAdd 73 72
|
74: 7(fvec4) FAdd 73 72
|
||||||
Store 9(v) 74
|
Store 9(v) 74
|
||||||
75: 11 Load 13(s2D)
|
75: 11 Load 13(s2D)
|
||||||
78: 51(ivec2) Load 77(ic2D)
|
78: 51(ivec2) Load 77(ic2D)
|
||||||
80: 7(fvec4) ImageFetch 75 78 79
|
80: 7(fvec4) ImageFetch 75 78 79 53
|
||||||
81: 7(fvec4) Load 9(v)
|
81: 7(fvec4) Load 9(v)
|
||||||
82: 7(fvec4) FAdd 81 80
|
82: 7(fvec4) FAdd 81 80
|
||||||
Store 9(v) 82
|
Store 9(v) 82
|
||||||
@ -321,7 +321,7 @@ Linked fragment stage:
|
|||||||
205: 202 Load 204(is2DArray)
|
205: 202 Load 204(is2DArray)
|
||||||
206: 65(ivec3) Load 67(ic3D)
|
206: 65(ivec3) Load 67(ic3D)
|
||||||
207: 50(int) Load 70(ic1D)
|
207: 50(int) Load 70(ic1D)
|
||||||
208: 139(ivec4) ImageFetch 205 206
|
208: 139(ivec4) ImageFetch 205 206 207
|
||||||
Store 141(iv) 208
|
Store 141(iv) 208
|
||||||
209: 139(ivec4) Load 141(iv)
|
209: 139(ivec4) Load 141(iv)
|
||||||
210: 7(fvec4) ConvertSToF 209
|
210: 7(fvec4) ConvertSToF 209
|
||||||
|
@ -310,7 +310,7 @@ Linked fragment stage:
|
|||||||
214: 70 Load 72(texSampler2D)
|
214: 70 Load 72(texSampler2D)
|
||||||
215: 205(ivec2) Load 207(iCoords2D)
|
215: 205(ivec2) Load 207(iCoords2D)
|
||||||
216: 204(int) Load 212(iLod)
|
216: 204(int) Load 212(iLod)
|
||||||
217: 22(fvec4) ImageFetch 214 215
|
217: 22(fvec4) ImageFetch 214 215 216
|
||||||
218: 22(fvec4) Load 26(color)
|
218: 22(fvec4) Load 26(color)
|
||||||
219: 22(fvec4) FAdd 218 217
|
219: 22(fvec4) FAdd 218 217
|
||||||
Store 26(color) 219
|
Store 26(color) 219
|
||||||
|
89
Test/spv.image.frag
Normal file
89
Test/spv.image.frag
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#version 450
|
||||||
|
|
||||||
|
layout(rgba32f, binding = 0) uniform image1D i1D;
|
||||||
|
layout(rgba32f, binding = 1) uniform image2D i2D;
|
||||||
|
layout(rgba32f, binding = 2) uniform image3D i3D;
|
||||||
|
layout(rgba32f, binding = 3) uniform imageCube iCube;
|
||||||
|
layout(rgba32f, binding = 4) uniform imageCubeArray iCubeArray;
|
||||||
|
layout(rgba32f, binding = 5) uniform image2DRect i2DRect;
|
||||||
|
layout(rgba32f, binding = 6) uniform image1DArray i1DArray;
|
||||||
|
layout(rgba32f, binding = 7) uniform image2DArray i2DArray;
|
||||||
|
layout(rgba32f, binding = 8) uniform imageBuffer iBuffer;
|
||||||
|
layout(rgba32f, binding = 9) uniform image2DMS i2DMS;
|
||||||
|
layout(rgba32f, binding = 10) uniform image2DMSArray i2DMSArray;
|
||||||
|
|
||||||
|
layout(r32i, binding = 11) uniform iimage1D ii1D;
|
||||||
|
layout(r32ui, binding = 12) uniform uimage2D ui2D;
|
||||||
|
|
||||||
|
uniform int ic1D;
|
||||||
|
uniform ivec2 ic2D;
|
||||||
|
uniform ivec3 ic3D;
|
||||||
|
uniform ivec4 ic4D;
|
||||||
|
|
||||||
|
uniform uint value;
|
||||||
|
|
||||||
|
out vec4 fragData;
|
||||||
|
|
||||||
|
void main()
|
||||||
|
{
|
||||||
|
ivec3 iv = ivec3(0);
|
||||||
|
iv.x += imageSize(i1D);
|
||||||
|
iv.xy += imageSize(i2D);
|
||||||
|
iv.xyz += imageSize(i3D);
|
||||||
|
iv.xy += imageSize(iCube);
|
||||||
|
iv.xyz += imageSize(iCubeArray);
|
||||||
|
iv.xy += imageSize(i2DRect);
|
||||||
|
iv.xy += imageSize(i1DArray);
|
||||||
|
iv.xyz += imageSize(i2DArray);
|
||||||
|
iv.x += imageSize(iBuffer);
|
||||||
|
iv.xy += imageSize(i2DMS);
|
||||||
|
iv.xyz += imageSize(i2DMSArray);
|
||||||
|
|
||||||
|
iv.x += imageSamples(i2DMS);
|
||||||
|
iv.x += imageSamples(i2DMSArray);
|
||||||
|
|
||||||
|
vec4 v = vec4(0.0);
|
||||||
|
v += imageLoad(i1D, ic1D);
|
||||||
|
imageStore(i1D, ic1D, v);
|
||||||
|
v += imageLoad(i2D, ic2D);
|
||||||
|
imageStore(i2D, ic2D, v);
|
||||||
|
v += imageLoad(i3D, ic3D);
|
||||||
|
imageStore(i3D, ic3D, v);
|
||||||
|
v += imageLoad(iCube, ic3D);
|
||||||
|
imageStore(iCube, ic3D, v);
|
||||||
|
v += imageLoad(iCubeArray, ic4D);
|
||||||
|
imageStore(iCubeArray, ic4D, v);
|
||||||
|
v += imageLoad(i2DRect, ic2D);
|
||||||
|
imageStore(i2DRect, ic2D, v);
|
||||||
|
v += imageLoad(i1DArray, ic2D);
|
||||||
|
imageStore(i1DArray, ic2D, v);
|
||||||
|
v += imageLoad(i2DArray, ic3D);
|
||||||
|
imageStore(i2DArray, ic3D, v);
|
||||||
|
v += imageLoad(iBuffer, ic1D);
|
||||||
|
imageStore(iBuffer, ic1D, v);
|
||||||
|
v += imageLoad(i2DMS, ic2D, 1);
|
||||||
|
imageStore(i2DMS, ic2D, 2, v);
|
||||||
|
v += imageLoad(i2DMSArray, ic3D, 3);
|
||||||
|
imageStore(i2DMSArray, ic3D, 4, v);
|
||||||
|
|
||||||
|
uint ui = 0;
|
||||||
|
iv.x += imageAtomicAdd(ii1D, ic1D, 10);
|
||||||
|
ui += imageAtomicAdd(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicMin(ii1D, ic1D, 11);
|
||||||
|
ui += imageAtomicMin(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicMax(ii1D, ic1D, 12);
|
||||||
|
ui += imageAtomicMax(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicAnd(ii1D, ic1D, 13);
|
||||||
|
ui += imageAtomicAnd(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicOr(ii1D, ic1D, 14);
|
||||||
|
ui += imageAtomicOr(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicXor(ii1D, ic1D, 15);
|
||||||
|
ui += imageAtomicXor(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicExchange(ii1D, ic1D, 16);
|
||||||
|
ui += imageAtomicExchange(ui2D, ic2D, value);
|
||||||
|
iv.x += imageAtomicCompSwap(ii1D, ic1D, 18, 17);
|
||||||
|
ui += imageAtomicCompSwap(ui2D, ic2D, 19u, value);
|
||||||
|
|
||||||
|
fragData = ui != iv.y ? v : vec4(0.0);
|
||||||
|
}
|
||||||
|
|
@ -70,6 +70,7 @@ spv.test.frag
|
|||||||
spv.test.vert
|
spv.test.vert
|
||||||
spv.texture.frag
|
spv.texture.frag
|
||||||
spv.texture.vert
|
spv.texture.vert
|
||||||
|
spv.image.frag
|
||||||
spv.types.frag
|
spv.types.frag
|
||||||
spv.uint.frag
|
spv.uint.frag
|
||||||
spv.uniformArray.frag
|
spv.uniformArray.frag
|
||||||
|
@ -617,7 +617,6 @@ struct TCrackedTextureOp {
|
|||||||
bool query;
|
bool query;
|
||||||
bool proj;
|
bool proj;
|
||||||
bool lod;
|
bool lod;
|
||||||
bool sample;
|
|
||||||
bool fetch;
|
bool fetch;
|
||||||
bool offset;
|
bool offset;
|
||||||
bool offsets;
|
bool offsets;
|
||||||
@ -645,7 +644,6 @@ public:
|
|||||||
cracked.query = false;
|
cracked.query = false;
|
||||||
cracked.proj = false;
|
cracked.proj = false;
|
||||||
cracked.lod = false;
|
cracked.lod = false;
|
||||||
cracked.sample = false;
|
|
||||||
cracked.fetch = false;
|
cracked.fetch = false;
|
||||||
cracked.offset = false;
|
cracked.offset = false;
|
||||||
cracked.offsets = false;
|
cracked.offsets = false;
|
||||||
@ -653,6 +651,8 @@ public:
|
|||||||
cracked.grad = false;
|
cracked.grad = false;
|
||||||
|
|
||||||
switch (op) {
|
switch (op) {
|
||||||
|
case EOpImageQuerySize:
|
||||||
|
case EOpImageQuerySamples:
|
||||||
case EOpTextureQuerySize:
|
case EOpTextureQuerySize:
|
||||||
case EOpTextureQueryLod:
|
case EOpTextureQueryLod:
|
||||||
case EOpTextureQueryLevels:
|
case EOpTextureQueryLevels:
|
||||||
@ -672,22 +672,14 @@ public:
|
|||||||
break;
|
break;
|
||||||
case EOpTextureFetch:
|
case EOpTextureFetch:
|
||||||
cracked.fetch = true;
|
cracked.fetch = true;
|
||||||
if (sampler.dim == Esd1D || sampler.dim == Esd2D || sampler.dim == Esd3D) {
|
if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
|
||||||
if (sampler.ms)
|
cracked.lod = true;
|
||||||
cracked.sample = true;
|
|
||||||
else
|
|
||||||
cracked.lod = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EOpTextureFetchOffset:
|
case EOpTextureFetchOffset:
|
||||||
cracked.fetch = true;
|
cracked.fetch = true;
|
||||||
cracked.offset = true;
|
cracked.offset = true;
|
||||||
if (sampler.dim == Esd1D || sampler.dim == Esd2D || sampler.dim == Esd3D) {
|
if (sampler.dim == Esd1D || (sampler.dim == Esd2D && ! sampler.ms) || sampler.dim == Esd3D)
|
||||||
if (sampler.ms)
|
cracked.lod = true;
|
||||||
cracked.sample = true;
|
|
||||||
else
|
|
||||||
cracked.lod = true;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case EOpTextureProjOffset:
|
case EOpTextureProjOffset:
|
||||||
cracked.offset = true;
|
cracked.offset = true;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user