mirror of
https://github.com/KhronosGroup/glslang
synced 2024-09-18 19:59:54 +00:00
Fix #2329: don't use invalid initializers.
This commit is contained in:
parent
206886948a
commit
4e13c90944
@ -1724,7 +1724,7 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol)
|
||||
spv::StorageClass sc = builder.getStorageClass(id);
|
||||
// Before SPIR-V 1.4, we only want to include Input and Output.
|
||||
// Starting with SPIR-V 1.4, we want all globals.
|
||||
if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && sc != spv::StorageClassFunction) ||
|
||||
if ((glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4 && builder.isGlobalStorage(id)) ||
|
||||
(sc == spv::StorageClassInput || sc == spv::StorageClassOutput)) {
|
||||
iOSet.insert(id);
|
||||
}
|
||||
|
@ -2722,7 +2722,7 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu
|
||||
setPrecision(id, precision);
|
||||
} else {
|
||||
Id lValue = NoResult;
|
||||
if (spvVersion >= Spv_1_4) {
|
||||
if (spvVersion >= Spv_1_4 && isValidInitializer(accessChain.base)) {
|
||||
// make a new function variable for this r-value, using an initializer,
|
||||
// and mark it as NonWritable so that downstream it can be detected as a lookup
|
||||
// table
|
||||
|
@ -248,6 +248,13 @@ public:
|
||||
{ return module.getInstruction(resultId)->getImmediateOperand(0); }
|
||||
StorageClass getStorageClass(Id resultId) const { return getTypeStorageClass(getTypeId(resultId)); }
|
||||
|
||||
bool isVariableOpCode(Op opcode) const { return opcode == OpVariable; }
|
||||
bool isVariable(Id resultId) const { return isVariableOpCode(getOpCode(resultId)); }
|
||||
bool isGlobalStorage(Id resultId) const { return getStorageClass(resultId) != StorageClassFunction; }
|
||||
bool isGlobalVariable(Id resultId) const { return isVariable(resultId) && isGlobalStorage(resultId); }
|
||||
// See if a resultId is valid for use as an initializer.
|
||||
bool isValidInitializer(Id resultId) const { return isConstant(resultId) || isGlobalVariable(resultId); }
|
||||
|
||||
int getScalarTypeWidth(Id typeId) const
|
||||
{
|
||||
Id scalarTypeId = getScalarTypeId(typeId);
|
||||
|
145
Test/baseResults/spv.ext.World3x4.rahit.out
Executable file
145
Test/baseResults/spv.ext.World3x4.rahit.out
Executable file
@ -0,0 +1,145 @@
|
||||
spv.ext.World3x4.rahit
|
||||
// Module Version 10400
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 90
|
||||
|
||||
Capability RayTracingProvisionalKHR
|
||||
Extension "SPV_KHR_ray_tracing"
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint AnyHitKHR 4 "main" 43 60 78 87 89
|
||||
Source GLSL 460
|
||||
SourceExtension "GL_EXT_ray_tracing"
|
||||
Name 4 "main"
|
||||
Name 8 "k"
|
||||
Name 12 "ndx"
|
||||
Name 14 "col"
|
||||
Name 25 "row"
|
||||
Name 39 "p"
|
||||
Name 43 "gl_LaunchIDEXT"
|
||||
Name 53 "r"
|
||||
Name 60 "gl_WorldToObject3x4EXT"
|
||||
Name 66 "indexable"
|
||||
Name 72 "c"
|
||||
Name 78 "result"
|
||||
Name 87 "attribs"
|
||||
Name 89 "hitValue"
|
||||
Decorate 43(gl_LaunchIDEXT) BuiltIn LaunchIdKHR
|
||||
Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR
|
||||
Decorate 78(result) DescriptorSet 0
|
||||
Decorate 78(result) Binding 0
|
||||
Decorate 89(hitValue) Location 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
7: TypePointer Function 6(float)
|
||||
9: 6(float) Constant 1233125376
|
||||
10: TypeInt 32 1
|
||||
11: TypePointer Function 10(int)
|
||||
13: 10(int) Constant 4294967295
|
||||
15: 10(int) Constant 0
|
||||
22: 10(int) Constant 3
|
||||
23: TypeBool
|
||||
32: 10(int) Constant 4
|
||||
35: 10(int) Constant 1
|
||||
37: TypeVector 10(int) 3
|
||||
38: TypePointer Function 37(ivec3)
|
||||
40: TypeInt 32 0
|
||||
41: TypeVector 40(int) 3
|
||||
42: TypePointer Input 41(ivec3)
|
||||
43(gl_LaunchIDEXT): 42(ptr) Variable Input
|
||||
44: TypeVector 40(int) 2
|
||||
47: TypeVector 10(int) 2
|
||||
55: TypeVector 6(float) 4
|
||||
56: TypeMatrix 55(fvec4) 3
|
||||
57: TypeVector 6(float) 3
|
||||
58: TypeMatrix 57(fvec3) 4
|
||||
59: TypePointer Input 58
|
||||
60(gl_WorldToObject3x4EXT): 59(ptr) Variable Input
|
||||
65: TypePointer Function 56
|
||||
70: TypeVector 10(int) 4
|
||||
71: TypePointer Function 70(ivec4)
|
||||
76: TypeImage 10(int) 3D nonsampled format:R32i
|
||||
77: TypePointer UniformConstant 76
|
||||
78(result): 77(ptr) Variable UniformConstant
|
||||
86: TypePointer HitAttributeKHR 57(fvec3)
|
||||
87(attribs): 86(ptr) Variable HitAttributeKHR
|
||||
88: TypePointer IncomingRayPayloadKHR 57(fvec3)
|
||||
89(hitValue): 88(ptr) Variable IncomingRayPayloadKHR
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
8(k): 7(ptr) Variable Function
|
||||
12(ndx): 11(ptr) Variable Function
|
||||
14(col): 11(ptr) Variable Function
|
||||
25(row): 11(ptr) Variable Function
|
||||
39(p): 38(ptr) Variable Function
|
||||
53(r): 7(ptr) Variable Function
|
||||
66(indexable): 65(ptr) Variable Function
|
||||
72(c): 71(ptr) Variable Function
|
||||
Store 8(k) 9
|
||||
Store 12(ndx) 13
|
||||
Store 14(col) 15
|
||||
Branch 16
|
||||
16: Label
|
||||
LoopMerge 18 19 None
|
||||
Branch 20
|
||||
20: Label
|
||||
21: 10(int) Load 14(col)
|
||||
24: 23(bool) SLessThan 21 22
|
||||
BranchConditional 24 17 18
|
||||
17: Label
|
||||
Store 25(row) 15
|
||||
Branch 26
|
||||
26: Label
|
||||
LoopMerge 28 29 None
|
||||
Branch 30
|
||||
30: Label
|
||||
31: 10(int) Load 25(row)
|
||||
33: 23(bool) SLessThan 31 32
|
||||
BranchConditional 33 27 28
|
||||
27: Label
|
||||
34: 10(int) Load 12(ndx)
|
||||
36: 10(int) IAdd 34 35
|
||||
Store 12(ndx) 36
|
||||
45: 41(ivec3) Load 43(gl_LaunchIDEXT)
|
||||
46: 44(ivec2) VectorShuffle 45 45 0 1
|
||||
48: 47(ivec2) Bitcast 46
|
||||
49: 10(int) Load 12(ndx)
|
||||
50: 10(int) CompositeExtract 48 0
|
||||
51: 10(int) CompositeExtract 48 1
|
||||
52: 37(ivec3) CompositeConstruct 50 51 49
|
||||
Store 39(p) 52
|
||||
54: 6(float) Load 8(k)
|
||||
61: 58 Load 60(gl_WorldToObject3x4EXT)
|
||||
62: 56 Transpose 61
|
||||
63: 10(int) Load 14(col)
|
||||
64: 10(int) Load 25(row)
|
||||
Store 66(indexable) 62
|
||||
67: 7(ptr) AccessChain 66(indexable) 63 64
|
||||
68: 6(float) Load 67
|
||||
69: 6(float) FMul 54 68
|
||||
Store 53(r) 69
|
||||
73: 6(float) Load 53(r)
|
||||
74: 10(int) ConvertFToS 73
|
||||
75: 70(ivec4) CompositeConstruct 74 15 15 35
|
||||
Store 72(c) 75
|
||||
79: 76 Load 78(result)
|
||||
80: 37(ivec3) Load 39(p)
|
||||
81: 70(ivec4) Load 72(c)
|
||||
ImageWrite 79 80 81 SignExtend
|
||||
Branch 29
|
||||
29: Label
|
||||
82: 10(int) Load 25(row)
|
||||
83: 10(int) IAdd 82 35
|
||||
Store 25(row) 83
|
||||
Branch 26
|
||||
28: Label
|
||||
Branch 19
|
||||
19: Label
|
||||
84: 10(int) Load 14(col)
|
||||
85: 10(int) IAdd 84 35
|
||||
Store 14(col) 85
|
||||
Branch 16
|
||||
18: Label
|
||||
Return
|
||||
FunctionEnd
|
21
Test/spv.ext.World3x4.rahit
Normal file
21
Test/spv.ext.World3x4.rahit
Normal file
@ -0,0 +1,21 @@
|
||||
#version 460
|
||||
#extension GL_EXT_ray_tracing : enable
|
||||
|
||||
hitAttributeEXT vec3 attribs;
|
||||
layout(location = 0) rayPayloadInEXT vec3 hitValue;
|
||||
layout(set = 0, binding = 0, r32i) uniform iimage3D result;
|
||||
|
||||
void main()
|
||||
{
|
||||
float k = 1048576.0f;
|
||||
int ndx = -1;
|
||||
for (int col = 0; col < 3; col++)
|
||||
for (int row = 0; row < 4; row++)
|
||||
{
|
||||
ndx++;
|
||||
ivec3 p = ivec3(gl_LaunchIDEXT.xy, ndx);
|
||||
float r = k * gl_WorldToObject3x4EXT[col][row];
|
||||
ivec4 c = ivec4(int(r),0,0,1);
|
||||
imageStore(result, p, c);
|
||||
}
|
||||
}
|
@ -560,6 +560,7 @@ INSTANTIATE_TEST_CASE_P(
|
||||
"spv.ext.RayGenShader.rgen",
|
||||
"spv.ext.RayGenShader11.rgen",
|
||||
"spv.ext.RayGenShaderArray.rgen",
|
||||
"spv.ext.World3x4.rahit",
|
||||
})),
|
||||
FileNameAsCustomTestSuffix
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user