Do true SPV type check for function array arg linkage
Previous check was missing type difference between uniform array actual arg with stride decoration and the formal arg without. Now does logical or component-wise copy where needed. Fixes #2637
This commit is contained in:
parent
e71278cc92
commit
11c24e9adb
8 changed files with 308 additions and 100 deletions
106
Test/baseResults/spv.funcall.array.frag.out
Normal file
106
Test/baseResults/spv.funcall.array.frag.out
Normal file
|
|
@ -0,0 +1,106 @@
|
|||
spv.funcall.array.frag
|
||||
// Module Version 10000
|
||||
// Generated by (magic number): 8000a
|
||||
// Id's are bound by 66
|
||||
|
||||
Capability Shader
|
||||
1: ExtInstImport "GLSL.std.450"
|
||||
MemoryModel Logical GLSL450
|
||||
EntryPoint Fragment 4 "main" 27
|
||||
ExecutionMode 4 OriginUpperLeft
|
||||
Source GLSL 450
|
||||
Name 4 "main"
|
||||
Name 16 "f(vf4[9];i1;"
|
||||
Name 14 "a"
|
||||
Name 15 "ix"
|
||||
Name 20 "indexable"
|
||||
Name 27 "color"
|
||||
Name 29 "ub"
|
||||
MemberName 29(ub) 0 "u"
|
||||
Name 31 ""
|
||||
Name 37 "arg"
|
||||
Name 64 "param"
|
||||
Decorate 27(color) Location 0
|
||||
Decorate 28 ArrayStride 16
|
||||
MemberDecorate 29(ub) 0 Offset 0
|
||||
Decorate 29(ub) Block
|
||||
Decorate 31 DescriptorSet 0
|
||||
Decorate 31 Binding 0
|
||||
2: TypeVoid
|
||||
3: TypeFunction 2
|
||||
6: TypeFloat 32
|
||||
7: TypeVector 6(float) 4
|
||||
8: TypeInt 32 0
|
||||
9: 8(int) Constant 9
|
||||
10: TypeArray 7(fvec4) 9
|
||||
11: TypeInt 32 1
|
||||
12: TypePointer Function 11(int)
|
||||
13: TypeFunction 7(fvec4) 10 12(ptr)
|
||||
19: TypePointer Function 10
|
||||
21: TypePointer Function 7(fvec4)
|
||||
26: TypePointer Output 7(fvec4)
|
||||
27(color): 26(ptr) Variable Output
|
||||
28: TypeArray 7(fvec4) 9
|
||||
29(ub): TypeStruct 28
|
||||
30: TypePointer Uniform 29(ub)
|
||||
31: 30(ptr) Variable Uniform
|
||||
32: 11(int) Constant 0
|
||||
33: TypePointer Uniform 28
|
||||
36: 11(int) Constant 2
|
||||
41: 11(int) Constant 1
|
||||
46: 11(int) Constant 3
|
||||
49: 11(int) Constant 4
|
||||
52: 11(int) Constant 5
|
||||
55: 11(int) Constant 6
|
||||
58: 11(int) Constant 7
|
||||
61: 11(int) Constant 8
|
||||
4(main): 2 Function None 3
|
||||
5: Label
|
||||
37(arg): 19(ptr) Variable Function
|
||||
64(param): 12(ptr) Variable Function
|
||||
34: 33(ptr) AccessChain 31 32
|
||||
35: 28 Load 34
|
||||
38: 7(fvec4) CompositeExtract 35 0
|
||||
39: 21(ptr) AccessChain 37(arg) 32
|
||||
Store 39 38
|
||||
40: 7(fvec4) CompositeExtract 35 1
|
||||
42: 21(ptr) AccessChain 37(arg) 41
|
||||
Store 42 40
|
||||
43: 7(fvec4) CompositeExtract 35 2
|
||||
44: 21(ptr) AccessChain 37(arg) 36
|
||||
Store 44 43
|
||||
45: 7(fvec4) CompositeExtract 35 3
|
||||
47: 21(ptr) AccessChain 37(arg) 46
|
||||
Store 47 45
|
||||
48: 7(fvec4) CompositeExtract 35 4
|
||||
50: 21(ptr) AccessChain 37(arg) 49
|
||||
Store 50 48
|
||||
51: 7(fvec4) CompositeExtract 35 5
|
||||
53: 21(ptr) AccessChain 37(arg) 52
|
||||
Store 53 51
|
||||
54: 7(fvec4) CompositeExtract 35 6
|
||||
56: 21(ptr) AccessChain 37(arg) 55
|
||||
Store 56 54
|
||||
57: 7(fvec4) CompositeExtract 35 7
|
||||
59: 21(ptr) AccessChain 37(arg) 58
|
||||
Store 59 57
|
||||
60: 7(fvec4) CompositeExtract 35 8
|
||||
62: 21(ptr) AccessChain 37(arg) 61
|
||||
Store 62 60
|
||||
63: 10 Load 37(arg)
|
||||
Store 64(param) 36
|
||||
65: 7(fvec4) FunctionCall 16(f(vf4[9];i1;) 63 64(param)
|
||||
Store 27(color) 65
|
||||
Return
|
||||
FunctionEnd
|
||||
16(f(vf4[9];i1;): 7(fvec4) Function None 13
|
||||
14(a): 10 FunctionParameter
|
||||
15(ix): 12(ptr) FunctionParameter
|
||||
17: Label
|
||||
20(indexable): 19(ptr) Variable Function
|
||||
18: 11(int) Load 15(ix)
|
||||
Store 20(indexable) 14(a)
|
||||
22: 21(ptr) AccessChain 20(indexable) 18
|
||||
23: 7(fvec4) Load 22
|
||||
ReturnValue 23
|
||||
FunctionEnd
|
||||
Loading…
Add table
Add a link
Reference in a new issue