
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
77 lines
3.9 KiB
Plaintext
77 lines
3.9 KiB
Plaintext
spv.xfbOffsetOnBlockMembersAssignment.vert
|
|
// Module Version 10000
|
|
// Generated by (magic number): 80007
|
|
// Id's are bound by 33
|
|
|
|
Capability Shader
|
|
Capability TransformFeedback
|
|
1: ExtInstImport "GLSL.std.450"
|
|
MemoryModel Logical GLSL450
|
|
EntryPoint Vertex 4 "main" 10 27 31 32
|
|
ExecutionMode 4 Xfb
|
|
Source GLSL 450
|
|
Name 4 "main"
|
|
Name 8 "block2"
|
|
MemberName 8(block2) 0 "y1_out"
|
|
MemberName 8(block2) 1 "y2_out"
|
|
Name 10 ""
|
|
Name 25 "gl_PerVertex"
|
|
MemberName 25(gl_PerVertex) 0 "gl_Position"
|
|
MemberName 25(gl_PerVertex) 1 "gl_PointSize"
|
|
MemberName 25(gl_PerVertex) 2 "gl_ClipDistance"
|
|
MemberName 25(gl_PerVertex) 3 "gl_CullDistance"
|
|
Name 27 ""
|
|
Name 31 "gl_VertexID"
|
|
Name 32 "gl_InstanceID"
|
|
MemberDecorate 8(block2) 0 Offset 0
|
|
MemberDecorate 8(block2) 1 Offset 4
|
|
Decorate 8(block2) Block
|
|
Decorate 10 Location 5
|
|
Decorate 10 XfbBuffer 2
|
|
Decorate 10 XfbStride 20
|
|
MemberDecorate 25(gl_PerVertex) 0 BuiltIn Position
|
|
MemberDecorate 25(gl_PerVertex) 1 BuiltIn PointSize
|
|
MemberDecorate 25(gl_PerVertex) 2 BuiltIn ClipDistance
|
|
MemberDecorate 25(gl_PerVertex) 3 BuiltIn CullDistance
|
|
Decorate 25(gl_PerVertex) Block
|
|
Decorate 27 XfbBuffer 0
|
|
Decorate 27 XfbStride 0
|
|
Decorate 31(gl_VertexID) BuiltIn VertexId
|
|
Decorate 32(gl_InstanceID) BuiltIn InstanceId
|
|
2: TypeVoid
|
|
3: TypeFunction 2
|
|
6: TypeFloat 32
|
|
7: TypeVector 6(float) 4
|
|
8(block2): TypeStruct 6(float) 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 1088421888
|
|
14: TypePointer Output 6(float)
|
|
16: 11(int) Constant 1
|
|
17: 6(float) Constant 1065353216
|
|
18: 6(float) Constant 0
|
|
19: 7(fvec4) ConstantComposite 17 18 18 17
|
|
20: TypePointer Output 7(fvec4)
|
|
22: TypeInt 32 0
|
|
23: 22(int) Constant 1
|
|
24: TypeArray 6(float) 23
|
|
25(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 24 24
|
|
26: TypePointer Output 25(gl_PerVertex)
|
|
27: 26(ptr) Variable Output
|
|
28: 7(fvec4) ConstantComposite 18 18 18 18
|
|
30: TypePointer Input 11(int)
|
|
31(gl_VertexID): 30(ptr) Variable Input
|
|
32(gl_InstanceID): 30(ptr) Variable Input
|
|
4(main): 2 Function None 3
|
|
5: Label
|
|
15: 14(ptr) AccessChain 10 12
|
|
Store 15 13
|
|
21: 20(ptr) AccessChain 10 16
|
|
Store 21 19
|
|
29: 20(ptr) AccessChain 27 12
|
|
Store 29 28
|
|
Return
|
|
FunctionEnd
|