
If a block has assigned a XfbOffset it is assumed that it would inherit the current global XfbBuffer. This commit fixes two use cases: 1) Getting the members of a Block with a XfbOffset to be assigned an offset, as explained on GLSL 4.60 spec, section "4.4.2 Output Layout Qualifiers", subsection "Transform Feedback Layout Qualifiers". 2) Compute properly an error on overlapping ranges if a block is assigned a XfbOffset and one of it members is assigned a explicit one. This gets working because when the members of a block get assigned a Offset/Buffer at fixBlockXfbOffsets, then the block is deassigned the Offsets, so ranges are computed only with the block members. BTW, this is already done when redeclaring block builtins. Fixes #1535
89 lines
4.6 KiB
Plaintext
89 lines
4.6 KiB
Plaintext
spv.xfbOverlapOffsetCheckWithBlockAndMember.vert
|
|
// Module Version 10000
|
|
// Generated by (magic number): 80007
|
|
// Id's are bound by 39
|
|
|
|
Capability Shader
|
|
Capability TransformFeedback
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Vertex 4 "main" 10 33 37 38
|
|
ExecutionMode 4 Xfb
|
|
Source GLSL 450
|
|
Name 4 "main"
|
|
Name 8 "block2"
|
|
MemberName 8(block2) 0 "v"
|
|
MemberName 8(block2) 1 "u"
|
|
MemberName 8(block2) 2 "w"
|
|
MemberName 8(block2) 3 "x"
|
|
Name 10 ""
|
|
Name 31 "gl_PerVertex"
|
|
MemberName 31(gl_PerVertex) 0 "gl_Position"
|
|
MemberName 31(gl_PerVertex) 1 "gl_PointSize"
|
|
MemberName 31(gl_PerVertex) 2 "gl_ClipDistance"
|
|
MemberName 31(gl_PerVertex) 3 "gl_CullDistance"
|
|
Name 33 ""
|
|
Name 37 "gl_VertexID"
|
|
Name 38 "gl_InstanceID"
|
|
MemberDecorate 8(block2) 0 Offset 12
|
|
MemberDecorate 8(block2) 1 Offset 28
|
|
MemberDecorate 8(block2) 2 Offset 40
|
|
MemberDecorate 8(block2) 3 Offset 56
|
|
Decorate 8(block2) Block
|
|
Decorate 10 Location 5
|
|
Decorate 10 XfbBuffer 3
|
|
Decorate 10 XfbStride 72
|
|
MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position
|
|
MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize
|
|
MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance
|
|
MemberDecorate 31(gl_PerVertex) 3 BuiltIn CullDistance
|
|
Decorate 31(gl_PerVertex) Block
|
|
Decorate 33 XfbBuffer 0
|
|
Decorate 33 XfbStride 0
|
|
Decorate 37(gl_VertexID) BuiltIn VertexId
|
|
Decorate 38(gl_InstanceID) BuiltIn InstanceId
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6: TypeFloat 32
|
|
7: TypeVector 6(float) 4
|
|
8(block2): TypeStruct 7(fvec4) 6(float) 7(fvec4) 7(fvec4)
|
|
9: TypePointer Output 8(block2)
|
|
10: 9(ptr) Variable Output
|
|
11: TypeInt 32 1
|
|
12: 11(int) Constant 0
|
|
13: 6(float) Constant 1065353216
|
|
14: 6(float) Constant 0
|
|
15: 7(fvec4) ConstantComposite 13 14 13 14
|
|
16: TypePointer Output 7(fvec4)
|
|
18: 11(int) Constant 1
|
|
19: 6(float) Constant 1084227584
|
|
20: TypePointer Output 6(float)
|
|
22: 11(int) Constant 2
|
|
23: 7(fvec4) ConstantComposite 13 14 14 13
|
|
25: 11(int) Constant 3
|
|
26: 7(fvec4) ConstantComposite 19 14 14 14
|
|
28: TypeInt 32 0
|
|
29: 28(int) Constant 1
|
|
30: TypeArray 6(float) 29
|
|
31(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 30 30
|
|
32: TypePointer Output 31(gl_PerVertex)
|
|
33: 32(ptr) Variable Output
|
|
34: 7(fvec4) ConstantComposite 14 14 14 14
|
|
36: TypePointer Input 11(int)
|
|
37(gl_VertexID): 36(ptr) Variable Input
|
|
38(gl_InstanceID): 36(ptr) Variable Input
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
17: 16(ptr) AccessChain 10 12
|
|
Store 17 15
|
|
21: 20(ptr) AccessChain 10 18
|
|
Store 21 19
|
|
24: 16(ptr) AccessChain 10 22
|
|
Store 24 23
|
|
27: 16(ptr) AccessChain 10 25
|
|
Store 27 26
|
|
35: 16(ptr) AccessChain 33 12
|
|
Store 35 34
|
|
Return
|
|
FunctionEnd
|