From 4a2aa822366ffc632900fec1d2650727fc3d0e2b Mon Sep 17 00:00:00 2001 From: baldurk Date: Tue, 29 Jan 2019 19:10:56 +0000 Subject: [PATCH] Reflect array stride, top-level array stride, and block member count --- Test/baseResults/hlsl.automap.frag.out | 20 +- .../hlsl.reflection.binding.frag.out | 8 +- Test/baseResults/hlsl.reflection.vert.out | 96 ++++----- Test/baseResults/hlsl.shift.per-set.frag.out | 20 +- Test/baseResults/reflection.options.vert.out | 18 +- Test/baseResults/reflection.vert.out | 196 +++++++++--------- Test/reflection.options.vert | 9 + glslang/MachineIndependent/reflection.cpp | 94 ++++++++- glslang/Public/ShaderLang.h | 12 +- 9 files changed, 283 insertions(+), 190 deletions(-) diff --git a/Test/baseResults/hlsl.automap.frag.out b/Test/baseResults/hlsl.automap.frag.out index 7a871a7b..51a15db4 100644 --- a/Test/baseResults/hlsl.automap.frag.out +++ b/Test/baseResults/hlsl.automap.frag.out @@ -3,8 +3,8 @@ Uniform reflection: t1: offset -1, type 8b5d, size 1, index -1, binding 11, stages 16 t2: offset -1, type 8b5e, size 1, index -1, binding 12, stages 16 t3: offset -1, type 8b5f, size 1, index -1, binding 13, stages 16 -t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16 -t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16 +t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16 +t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 t6: offset -1, type 8dc2, size 1, index -1, binding 16, stages 16 s1: offset -1, type 0, size 1, index -1, binding 31, stages 16 s2: offset -1, type 0, size 1, index -1, binding 32, stages 16 @@ -12,18 +12,18 @@ u1: offset -1, type 904c, size 1, index -1, binding 41, stages 16 u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16 u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16 u4: offset -1, type 9051, size 1, index -1, binding 44, stages 16 -u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16 -u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16 +u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 +u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16 Uniform block reflection: -t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 0 -t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 0 -u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 0 -u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 0 -cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0 -tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 0 +t4: offset -1, type ffffffff, size 0, index -1, binding 14, stages 0, numMembers 1 +t5: offset -1, type ffffffff, size 0, index -1, binding 15, stages 0, numMembers 1 +u5: offset -1, type ffffffff, size 0, index -1, binding 45, stages 0, numMembers 1 +u6: offset -1, type ffffffff, size 0, index -1, binding 46, stages 0, numMembers 1 +cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0, numMembers 1 +tb: offset -1, type ffffffff, size 4, index -1, binding 17, stages 0, numMembers 1 Pipeline input reflection: diff --git a/Test/baseResults/hlsl.reflection.binding.frag.out b/Test/baseResults/hlsl.reflection.binding.frag.out index 3c0d134d..da452cf3 100644 --- a/Test/baseResults/hlsl.reflection.binding.frag.out +++ b/Test/baseResults/hlsl.reflection.binding.frag.out @@ -2,8 +2,8 @@ hlsl.reflection.binding.frag Uniform reflection: t1: offset -1, type 8b5d, size 1, index -1, binding 15, stages 16 s1: offset -1, type 0, size 1, index -1, binding 5, stages 16 -t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16 -s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16 +t1a: offset -1, type 8b5d, size 1, index -1, binding 16, stages 16, arrayStride 4, topLevelArrayStride 4 +s1a: offset -1, type 0, size 1, index -1, binding 6, stages 16, arrayStride 4, topLevelArrayStride 4 c1_a: offset 0, type 8b52, size 1, index 0, binding -1, stages 16 c1_b: offset 16, type 1404, size 1, index 0, binding -1, stages 16 c1_c: offset 20, type 1406, size 1, index 0, binding -1, stages 16 @@ -12,8 +12,8 @@ c2_b: offset 16, type 1404, size 1, index 1, binding -1, stages 16 c2_c: offset 20, type 1406, size 1, index 1, binding -1, stages 16 Uniform block reflection: -cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 0 -cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 0 +cbuff1: offset -1, type ffffffff, size 24, index -1, binding 2, stages 0, numMembers 3 +cbuff2: offset -1, type ffffffff, size 24, index -1, binding 3, stages 0, numMembers 3 Pipeline input reflection: diff --git a/Test/baseResults/hlsl.reflection.vert.out b/Test/baseResults/hlsl.reflection.vert.out index 92cb6ab1..97c8466a 100644 --- a/Test/baseResults/hlsl.reflection.vert.out +++ b/Test/baseResults/hlsl.reflection.vert.out @@ -7,65 +7,65 @@ scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1, stages 1 c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1 c_scalarAfterm23: offset 48, type 1404, size 1, index 2, binding -1, stages 1 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1 -floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1 +floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1 -m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1 -dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1 +m22: offset 208, type 8b5a, size 9, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32 +dm22: offset 32, type 8b5a, size 4, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32 foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1 foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1 foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1 foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1 -deepA.d2.d1[2].va: offset 440, type 8b50, size 2, index 1, binding -1, stages 1 -deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1 -deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1 -deepB.d2.d1[1].va: offset 1016, type 8b50, size 2, index 1, binding -1, stages 1 -deepB.d2.d1[2].va: offset 1048, type 8b50, size 2, index 1, binding -1, stages 1 -deepB.d2.d1[3].va: offset 1080, type 8b50, size 2, index 1, binding -1, stages 1 -deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1 -deepC.d2.i: offset 1584, type 1404, size 1, index 1, binding -1, stages 1 -deepC.d2.d1[0].va: offset 1592, type 8b50, size 3, index 1, binding -1, stages 1 -deepC.d2.d1[0].b: offset 1616, type 8b56, size 1, index 1, binding -1, stages 1 -deepC.d2.d1[1].va: offset 1624, type 8b50, size 3, index 1, binding -1, stages 1 -deepC.d2.d1[1].b: offset 1648, type 8b56, size 1, index 1, binding -1, stages 1 -deepC.d2.d1[2].va: offset 1656, type 8b50, size 3, index 1, binding -1, stages 1 -deepC.d2.d1[2].b: offset 1680, type 8b56, size 1, index 1, binding -1, stages 1 -deepC.d2.d1[3].va: offset 1688, type 8b50, size 3, index 1, binding -1, stages 1 -deepC.d2.d1[3].b: offset 1712, type 8b56, size 1, index 1, binding -1, stages 1 -deepC.v3: offset 1728, type 8b54, size 1, index 1, binding -1, stages 1 -deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1 -deepD[0].d2.i: offset 2496, type 1404, size 1, index 1, binding -1, stages 1 -deepD[0].d2.d1[0].va: offset 2504, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[0].d2.d1[0].b: offset 2528, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[0].d2.d1[1].va: offset 2536, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[0].d2.d1[1].b: offset 2560, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[0].d2.d1[2].va: offset 2568, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[0].d2.d1[2].b: offset 2592, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[0].d2.d1[3].va: offset 2600, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[0].d2.d1[3].b: offset 2624, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[0].v3: offset 2640, type 8b54, size 1, index 1, binding -1, stages 1 -deepD[1].iv4: offset 2784, type 8b52, size 1, index 1, binding -1, stages 1 -deepD[1].d2.i: offset 2800, type 1404, size 1, index 1, binding -1, stages 1 -deepD[1].d2.d1[0].va: offset 2808, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[1].d2.d1[0].b: offset 2832, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[1].d2.d1[1].va: offset 2840, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[1].d2.d1[1].b: offset 2864, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[1].d2.d1[2].va: offset 2872, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[1].d2.d1[2].b: offset 2896, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[1].d2.d1[3].va: offset 2904, type 8b50, size 3, index 1, binding -1, stages 1 -deepD[1].d2.d1[3].b: offset 2928, type 8b56, size 1, index 1, binding -1, stages 1 -deepD[1].v3: offset 2944, type 8b54, size 1, index 1, binding -1, stages 1 +deepA.d2.d1[2].va: offset 440, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepB.d2.d1.va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepB.d2.d1[0].va: offset 984, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepB.d2.d1[1].va: offset 1016, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepB.d2.d1[2].va: offset 1048, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepB.d2.d1[3].va: offset 1080, type 8b50, size 2, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepC.iv4: offset 1568, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.d2.i: offset 1584, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.d2.d1[0].va: offset 1592, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepC.d2.d1[0].b: offset 1616, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.d2.d1[1].va: offset 1624, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepC.d2.d1[1].b: offset 1648, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.d2.d1[2].va: offset 1656, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepC.d2.d1[2].b: offset 1680, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.d2.d1[3].va: offset 1688, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepC.d2.d1[3].b: offset 1712, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepC.v3: offset 1728, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].iv4: offset 2480, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].d2.i: offset 2496, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].d2.d1[0].va: offset 2504, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[0].d2.d1[0].b: offset 2528, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].d2.d1[1].va: offset 2536, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[0].d2.d1[1].b: offset 2560, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].d2.d1[2].va: offset 2568, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[0].d2.d1[2].b: offset 2592, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].d2.d1[3].va: offset 2600, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[0].d2.d1[3].b: offset 2624, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[0].v3: offset 2640, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].iv4: offset 2784, type 8b52, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].d2.i: offset 2800, type 1404, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].d2.d1[0].va: offset 2808, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[1].d2.d1[0].b: offset 2832, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].d2.d1[1].va: offset 2840, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[1].d2.d1[1].b: offset 2864, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].d2.d1[2].va: offset 2872, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[1].d2.d1[2].b: offset 2896, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].d2.d1[3].va: offset 2904, type 8b50, size 3, index 1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 304 +deepD[1].d2.d1[3].b: offset 2928, type 8b56, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 +deepD[1].v3: offset 2944, type 8b54, size 1, index 1, binding -1, stages 1, topLevelArrayStride 304 foo1: offset 0, type 1406, size 1, index 4, binding -1, stages 1 foo2: offset 0, type 1406, size 1, index 5, binding -1, stages 1 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1 uf1: offset 16, type 1406, size 1, index 1, binding -1, stages 1 Uniform block reflection: -nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0 -$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 0 -c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 0 -nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0 -abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 +nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0, numMembers 9 +$Global: offset -1, type ffffffff, size 3088, index -1, binding -1, stages 0, numMembers 106 +c_nameless: offset -1, type ffffffff, size 96, index -1, binding -1, stages 0, numMembers 5 +nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0, numMembers 4 +abl: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 Pipeline input reflection: attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0 diff --git a/Test/baseResults/hlsl.shift.per-set.frag.out b/Test/baseResults/hlsl.shift.per-set.frag.out index 02c6e4a2..a6aa7a01 100644 --- a/Test/baseResults/hlsl.shift.per-set.frag.out +++ b/Test/baseResults/hlsl.shift.per-set.frag.out @@ -203,8 +203,8 @@ Uniform reflection: t1: offset -1, type 8b5d, size 1, index -1, binding 21, stages 16 t2: offset -1, type 8b5e, size 1, index -1, binding 22, stages 16 t3: offset -1, type 8b5f, size 1, index -1, binding 26, stages 16 -t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16 -t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16 +t4.@data: offset 0, type 8b52, size 1, index 0, binding -1, stages 16, arrayStride 16, topLevelArrayStride 16 +t5.@data: offset 0, type 1405, size 0, index 1, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 t6: offset -1, type 8dc2, size 1, index -1, binding 23, stages 16 s1: offset -1, type 0, size 1, index -1, binding 11, stages 16 s2: offset -1, type 0, size 1, index -1, binding 17, stages 16 @@ -212,19 +212,19 @@ u1: offset -1, type 904c, size 1, index -1, binding 31, stages 16 u2: offset -1, type 904d, size 1, index -1, binding 42, stages 16 u3: offset -1, type 904e, size 1, index -1, binding 43, stages 16 u4: offset -1, type 9051, size 1, index -1, binding 34, stages 16 -u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16 -u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16 +u5.@data: offset 0, type 1405, size 0, index 2, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 +u6.@data: offset 0, type 1406, size 1, index 3, binding -1, stages 16, arrayStride 4, topLevelArrayStride 4 cb1: offset 0, type 1404, size 1, index 4, binding -1, stages 16 tb1: offset 0, type 1404, size 1, index 5, binding -1, stages 16 ts6: offset -1, type 8b5f, size 1, index -1, binding 71, stages 16 Uniform block reflection: -t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 0 -t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 0 -u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 0 -u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 0 -cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0 -tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 0 +t4: offset -1, type ffffffff, size 0, index -1, binding 21, stages 0, numMembers 1 +t5: offset -1, type ffffffff, size 0, index -1, binding 22, stages 0, numMembers 1 +u5: offset -1, type ffffffff, size 0, index -1, binding 44, stages 0, numMembers 1 +u6: offset -1, type ffffffff, size 0, index -1, binding 34, stages 0, numMembers 1 +cb: offset -1, type ffffffff, size 4, index -1, binding 51, stages 0, numMembers 1 +tb: offset -1, type ffffffff, size 4, index -1, binding 27, stages 0, numMembers 1 Pipeline input reflection: diff --git a/Test/baseResults/reflection.options.vert.out b/Test/baseResults/reflection.options.vert.out index 178779a3..b9247a0a 100644 --- a/Test/baseResults/reflection.options.vert.out +++ b/Test/baseResults/reflection.options.vert.out @@ -1,14 +1,18 @@ reflection.options.vert Uniform reflection: -t[0].v[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1 -t[0].v[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1 -t[0].v[2].position[0]: offset 48, type 1406, size 3, index 0, binding -1, stages 1 -t[0].v[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 1 -t[0].v[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 1 -t[0].v[2].normal[0]: offset 60, type 1406, size 3, index 0, binding -1, stages 1 +t[0].v[0].position[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[1].position[0]: offset 24, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[2].position[0]: offset 48, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[0].normal[0]: offset 12, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[1].normal[0]: offset 36, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[2].normal[0]: offset 60, type 1406, size 3, index 0, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +MultipleArrays.tri[0].v[0].position[0]: offset 0, type 1406, size 1, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +MultipleArrays.vert[0].position[0]: offset 360, type 1406, size 1, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 24 +MultipleArrays.f[0]: offset 480, type 1406, size 5, index 1, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4 Uniform block reflection: -VertexCollection: offset -1, type ffffffff, size 360, index -1, binding -1, stages 0 +VertexCollection: offset -1, type ffffffff, size 360, index -1, binding -1, stages 0, numMembers 6 +MultipleArrays: offset -1, type ffffffff, size 500, index -1, binding -1, stages 0, numMembers 9 Pipeline input reflection: gl_InstanceID: offset 0, type 1404, size 0, index 0, binding -1, stages 0 diff --git a/Test/baseResults/reflection.vert.out b/Test/baseResults/reflection.vert.out index fd3c8fe0..a7793c71 100644 --- a/Test/baseResults/reflection.vert.out +++ b/Test/baseResults/reflection.vert.out @@ -11,140 +11,140 @@ scalarAfterm23: offset 48, type 1404, size 1, index 0, binding -1, stages 1 c_m23: offset 16, type 8b67, size 1, index 2, binding -1, stages 1 c_scalarAfterm23: offset 64, type 1404, size 1, index 2, binding -1, stages 1 scalarBeforeArray: offset 96, type 1404, size 1, index 0, binding -1, stages 1 -floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1 +floatArray: offset 112, type 1406, size 5, index 0, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16 scalarAfterArray: offset 192, type 1404, size 1, index 0, binding -1, stages 1 named.memvec2: offset 48, type 8b50, size 1, index 1, binding -1, stages 1 named.memf1: offset 56, type 1406, size 1, index 1, binding -1, stages 1 named.memf2: offset 60, type 8b56, size 1, index 1, binding -1, stages 1 named.memf3: offset 64, type 1404, size 1, index 1, binding -1, stages 1 named.memvec2a: offset 72, type 8b50, size 1, index 1, binding -1, stages 1 -named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1 -dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1 -m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1 +named.m22: offset 80, type 8b5a, size 7, index 1, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32 +dm22: offset -1, type 8b5a, size 4, index -1, binding -1, stages 1, arrayStride 16, topLevelArrayStride 16 +m22: offset 208, type 8b5a, size 3, index 0, binding -1, stages 1, arrayStride 32, topLevelArrayStride 32 nested.foo.n1.a: offset 0, type 1406, size 1, index 3, binding -1, stages 1 nested.foo.n2.b: offset 16, type 1406, size 1, index 3, binding -1, stages 1 nested.foo.n2.c: offset 20, type 1406, size 1, index 3, binding -1, stages 1 nested.foo.n2.d: offset 24, type 1406, size 1, index 3, binding -1, stages 1 -deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1 -deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1 -deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1 -deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 -deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 -deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 -deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 -deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1 +deepA[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepA[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[1].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[1].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[1].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[1].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[0].d2.d1[0].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[0].d2.d1[1].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[0].d2.d1[2].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepB[0].d2.d1[3].va: offset -1, type 8b50, size 2, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepC[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepC[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepC[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepC[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 176 +deepC[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 +deepC[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1, topLevelArrayStride 176 deepD[0].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1 deepD[0].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1 -deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[0].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[0].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[0].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[0].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[0].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[0].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[0].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[0].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 deepD[0].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1 deepD[1].iv4: offset -1, type 8b52, size 1, index -1, binding -1, stages 1 deepD[1].d2.i: offset -1, type 1404, size 1, index -1, binding -1, stages 1 -deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[1].d2.d1[0].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[1].d2.d1[0].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[1].d2.d1[1].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[1].d2.d1[1].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[1].d2.d1[2].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[1].d2.d1[2].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 -deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1 +deepD[1].d2.d1[3].va: offset -1, type 8b50, size 3, index -1, binding -1, stages 1, arrayStride 8, topLevelArrayStride 8 deepD[1].d2.d1[3].b: offset -1, type 8b56, size 1, index -1, binding -1, stages 1 deepD[1].v3: offset -1, type 8b54, size 1, index -1, binding -1, stages 1 abl.foo: offset 0, type 1406, size 1, index 7, binding -1, stages 1 abl2.foo: offset 0, type 1406, size 1, index 11, binding -1, stages 1 -buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1 -buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1 -buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1 -buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1 +buf1.runtimeArray: offset 4, type 1406, size 4, index 12, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4 +buf2.runtimeArray.c: offset 8, type 1406, size 1, index 13, binding -1, stages 1, topLevelArrayStride 12 +buf3.runtimeArray: offset 4, type 1406, size 0, index 14, binding -1, stages 1, arrayStride 4, topLevelArrayStride 4 +buf4.runtimeArray.c: offset 8, type 1406, size 1, index 15, binding -1, stages 1, topLevelArrayStride 12 nested2.a.n1.a: offset 16, type 1406, size 1, index 16, binding -1, stages 1 nested2.a.n2.b: offset 32, type 1406, size 1, index 16, binding -1, stages 1 nested2.a.n2.c: offset 36, type 1406, size 1, index 16, binding -1, stages 1 nested2.a.n2.d: offset 40, type 1406, size 1, index 16, binding -1, stages 1 -nested2.b[0].a: offset 48, type 1406, size 1, index 16, binding -1, stages 1 -nested2.b[1].a: offset 64, type 1406, size 1, index 16, binding -1, stages 1 -nested2.b[2].a: offset 80, type 1406, size 1, index 16, binding -1, stages 1 -nested2.b[3].a: offset 96, type 1406, size 1, index 16, binding -1, stages 1 -nested2.c.a: offset 112, type 1406, size 1, index 16, binding -1, stages 1 -nested2.d.a: offset 144, type 1406, size 1, index 16, binding -1, stages 1 -t.v.position: offset 0, type 1406, size 1, index 17, binding -1, stages 1 -t.v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1 -t.v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1 -t.v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1 -t.v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1 -t.v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1 -t.v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1 -t[0].v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[0].position: offset 72, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[0].normal: offset 84, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[1].position: offset 96, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[1].normal: offset 108, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[2].position: offset 120, type 1406, size 3, index 17, binding -1, stages 1 -t[1].v[2].normal: offset 132, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[0].position: offset 144, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[0].normal: offset 156, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[1].position: offset 168, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[1].normal: offset 180, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[2].position: offset 192, type 1406, size 3, index 17, binding -1, stages 1 -t[2].v[2].normal: offset 204, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[0].position: offset 216, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[0].normal: offset 228, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[1].position: offset 240, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[1].normal: offset 252, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[2].position: offset 264, type 1406, size 3, index 17, binding -1, stages 1 -t[3].v[2].normal: offset 276, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[0].position: offset 288, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[0].normal: offset 300, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[1].position: offset 312, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[1].normal: offset 324, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[2].position: offset 336, type 1406, size 3, index 17, binding -1, stages 1 -t[4].v[2].normal: offset 348, type 1406, size 3, index 17, binding -1, stages 1 +nested2.b[0].a: offset 48, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +nested2.b[1].a: offset 64, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +nested2.b[2].a: offset 80, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +nested2.b[3].a: offset 96, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +nested2.c.a: offset 112, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +nested2.d.a: offset 144, type 1406, size 1, index 16, binding -1, stages 1, topLevelArrayStride 16 +t.v.position: offset 0, type 1406, size 1, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t.v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[0].position: offset 0, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[0].normal: offset 12, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[1].position: offset 24, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[1].normal: offset 36, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[2].position: offset 48, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[0].v[2].normal: offset 60, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[0].position: offset 72, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[0].normal: offset 84, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[1].position: offset 96, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[1].normal: offset 108, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[2].position: offset 120, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[1].v[2].normal: offset 132, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[0].position: offset 144, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[0].normal: offset 156, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[1].position: offset 168, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[1].normal: offset 180, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[2].position: offset 192, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[2].v[2].normal: offset 204, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[0].position: offset 216, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[0].normal: offset 228, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[1].position: offset 240, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[1].normal: offset 252, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[2].position: offset 264, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[3].v[2].normal: offset 276, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[0].position: offset 288, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[0].normal: offset 300, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[1].position: offset 312, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[1].normal: offset 324, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[2].position: offset 336, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 +t[4].v[2].normal: offset 348, type 1406, size 3, index 17, binding -1, stages 1, arrayStride 4, topLevelArrayStride 72 anonMember1: offset 0, type 8b51, size 1, index 0, binding -1, stages 1 uf1: offset -1, type 1406, size 1, index -1, binding -1, stages 1 uf2: offset -1, type 1406, size 1, index -1, binding -1, stages 1 named.member3: offset 32, type 8b52, size 1, index 1, binding -1, stages 1 Uniform block reflection: -nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0 -named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 0 -c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 0 -nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0 -abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0 -nested2: offset -1, type ffffffff, size 208, index -1, binding -1, stages 0 -VertexCollection: offset -1, type ffffffff, size 360, index -1, binding -1, stages 0 +nameless: offset -1, type ffffffff, size 496, index -1, binding -1, stages 0, numMembers 9 +named: offset -1, type ffffffff, size 304, index -1, binding -1, stages 0, numMembers 10 +c_nameless: offset -1, type ffffffff, size 112, index -1, binding -1, stages 0, numMembers 5 +nested: offset -1, type ffffffff, size 32, index -1, binding -1, stages 0, numMembers 4 +abl[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl2[0]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl2[1]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl2[2]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +abl2[3]: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 1 +buf1: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 2 +buf2: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 4 +buf3: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 2 +buf4: offset -1, type ffffffff, size 4, index -1, binding -1, stages 0, numMembers 4 +nested2: offset -1, type ffffffff, size 208, index -1, binding -1, stages 0, numMembers 15 +VertexCollection: offset -1, type ffffffff, size 360, index -1, binding -1, stages 0, numMembers 30 Pipeline input reflection: attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 0 diff --git a/Test/reflection.options.vert b/Test/reflection.options.vert index 5a8d2194..cfb2b0d4 100644 --- a/Test/reflection.options.vert +++ b/Test/reflection.options.vert @@ -13,6 +13,12 @@ buffer VertexCollection { TriangleInfo t[5]; }; +buffer MultipleArrays { + TriangleInfo tri[5]; + VertexInfo vert[5]; + float f[5]; +} multiarray; + out float outval; void main() @@ -21,6 +27,9 @@ void main() f += t[0].v[0].position[0]; f += t[gl_InstanceID].v[gl_InstanceID].position[gl_InstanceID]; f += t[gl_InstanceID].v[gl_InstanceID].normal[gl_InstanceID]; + f += multiarray.tri[gl_InstanceID].v[0].position[0]; + f += multiarray.vert[gl_InstanceID].position[0]; + f += multiarray.f[gl_InstanceID]; TriangleInfo tlocal[5] = t; outval = f; } diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 1d90fcf1..b235b465 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -93,7 +93,7 @@ public: // Use a degenerate (empty) set of dereferences to immediately put as at the end of // the dereference change expected by blowUpActiveAggregate. TList derefs; - blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0); + blowUpActiveAggregate(base.getType(), base.getName(), derefs, derefs.end(), -1, -1, 0, 0); } } @@ -229,6 +229,36 @@ public: return lastOffset + lastMemberSize; } + // count the total number of leaf members from iterating out of a block type + int countAggregateMembers(const TType& parentType) + { + if (! parentType.isStruct()) + return 1; + + const bool strictArraySuffix = (reflection.options & EShReflectionStrictArraySuffix); + + bool blockParent = (parentType.getBasicType() == EbtBlock && parentType.getQualifier().storage == EvqBuffer); + + const TTypeList &memberList = *parentType.getStruct(); + + int ret = 0; + + for (size_t i = 0; i < memberList.size(); i++) + { + const TType &memberType = *memberList[i].type; + int numMembers = countAggregateMembers(memberType); + // for sized arrays of structs, apply logic to expand out the same as we would below in + // blowUpActiveAggregate + if (memberType.isArray() && ! memberType.getArraySizes()->hasUnsized() && memberType.isStruct()) { + if (! strictArraySuffix || ! blockParent) + numMembers *= memberType.getArraySizes()->getCumulativeSize(); + } + ret += numMembers; + } + + return ret; + } + // Traverse the provided deref chain, including the base, and // - build a full reflection-granularity name, array size, etc. entry out of it, if it goes down to that granularity // - recursively expand any variable array index in the middle of that traversal @@ -237,7 +267,8 @@ public: // arraySize tracks, just for the final dereference in the chain, if there was a specific known size. // A value of 0 for arraySize will mean to use the full array's size. void blowUpActiveAggregate(const TType& baseType, const TString& baseName, const TList& derefs, - TList::const_iterator deref, int offset, int blockIndex, int arraySize) + TList::const_iterator deref, int offset, int blockIndex, int arraySize, + int topLevelArrayStride) { // when strictArraySuffix is enabled, we closely follow the rules from ARB_program_interface_query. // Broadly: @@ -260,6 +291,9 @@ public: case EOpIndexIndirect: { int stride = getArrayStride(baseType, visitNode->getLeft()->getType()); + if (topLevelArrayStride == 0) + topLevelArrayStride = stride; + // Visit all the indices of this array, and for each one add on the remaining dereferencing for (int i = 0; i < std::max(visitNode->getLeft()->getType().getOuterArraySize(), 1); ++i) { TString newBaseName = name; @@ -270,16 +304,19 @@ public: TList::const_iterator nextDeref = deref; ++nextDeref; TType derefType(*terminalType, 0); - blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize); + blowUpActiveAggregate(derefType, newBaseName, derefs, nextDeref, offset, blockIndex, arraySize, + topLevelArrayStride); if (offset >= 0) - offset += stride; + offset += stride; } // it was all completed in the recursive calls above return; } - case EOpIndexDirect: + case EOpIndexDirect: { + int stride = getArrayStride(baseType, visitNode->getLeft()->getType()); + index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); if (strictArraySuffix && blockParent) { name.append(TString("[0]")); @@ -287,10 +324,15 @@ public: name.append(TString("[") + String(index) + "]"); if (offset >= 0) - offset += getArrayStride(baseType, visitNode->getLeft()->getType()) * index; + offset += stride * index; } + + if (topLevelArrayStride == 0) + topLevelArrayStride = stride; + blockParent = false; break; + } case EOpIndexDirectStruct: index = visitNode->getRight()->getAsConstantUnion()->getConstArray()[0].getIConst(); if (offset >= 0) @@ -317,6 +359,9 @@ public: if (offset >= 0) stride = getArrayStride(baseType, *terminalType); + if (topLevelArrayStride == 0) + topLevelArrayStride = stride; + int arrayIterateSize = std::max(terminalType->getOuterArraySize(), 1); // for top-level arrays in blocks, only expand [0] to avoid explosion of items @@ -329,7 +374,9 @@ public: TType derefType(*terminalType, 0); if (offset >= 0) offset = baseOffset + stride * i; - blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0); + + blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0, + topLevelArrayStride); } } else { // Visit all members of this aggregate, and for each one, @@ -349,7 +396,15 @@ public: TType derefType(*terminalType, i); if (offset >= 0) offset = baseOffset + memberOffsets[i]; - blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0); + + int arrayStride = topLevelArrayStride; + if (terminalType->getBasicType() == EbtBlock && terminalType->getQualifier().storage == EvqBuffer && + derefType.isArray()) { + arrayStride = getArrayStride(baseType, derefType); + } + + blowUpActiveAggregate(derefType, newBaseName, derefs, derefs.end(), offset, blockIndex, 0, + arrayStride); } } @@ -371,9 +426,17 @@ public: TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str()); if (it == reflection.nameToIndex.end()) { reflection.nameToIndex[name.c_str()] = (int)reflection.indexToUniform.size(); + reflection.indexToUniform.push_back(TObjectReflection(name.c_str(), *terminalType, offset, mapToGlType(*terminalType), arraySize, blockIndex)); + if (terminalType->isArray()) { + reflection.indexToUniform.back().arrayStride = getArrayStride(baseType, *terminalType); + if (topLevelArrayStride == 0) + topLevelArrayStride = reflection.indexToUniform.back().arrayStride; + } + + reflection.indexToUniform.back().topLevelArrayStride = topLevelArrayStride; } else if (arraySize > 1) { int& reflectedArraySize = reflection.indexToUniform[it->second].size; reflectedArraySize = std::max(arraySize, reflectedArraySize); @@ -465,7 +528,7 @@ public: else baseName = base->getName(); } - blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize); + blowUpActiveAggregate(base->getType(), baseName, derefs, derefs.begin(), offset, blockIndex, arraySize, 0); } int addBlockName(const TString& name, const TType& type, int size) @@ -476,6 +539,8 @@ public: blockIndex = (int)reflection.indexToUniformBlock.size(); reflection.nameToIndex[name.c_str()] = blockIndex; reflection.indexToUniformBlock.push_back(TObjectReflection(name.c_str(), type, -1, -1, size, -1)); + + reflection.indexToUniformBlock.back().numMembers = countAggregateMembers(type); } else blockIndex = it->second; @@ -883,7 +948,7 @@ void TReflectionTraverser::visitSymbol(TIntermSymbol* base) TObjectReflection::TObjectReflection(const std::string &pName, const TType &pType, int pOffset, int pGLDefineType, int pSize, int pIndex) : name(pName), offset(pOffset), glDefineType(pGLDefineType), size(pSize), index(pIndex), counterIndex(-1), - stages(EShLanguageMask(0)), type(pType.clone()) + numMembers(-1), arrayStride(0), topLevelArrayStride(0), stages(EShLanguageMask(0)), type(pType.clone()) { } @@ -902,6 +967,15 @@ void TObjectReflection::dump() const if (counterIndex != -1) printf(", counter %d", counterIndex); + if (numMembers != -1) + printf(", numMembers %d", numMembers); + + if (arrayStride != 0) + printf(", arrayStride %d", arrayStride); + + if (topLevelArrayStride != 0) + printf(", topLevelArrayStride %d", topLevelArrayStride); + printf("\n"); } diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 98529256..827de4eb 100755 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -626,14 +626,20 @@ public: std::string name; int offset; int glDefineType; - int size; // data size in bytes for a block, array size for a (non-block) object that's an array + int size; // data size in bytes for a block, array size for a (non-block) object that's an array int index; int counterIndex; + int numMembers; + int arrayStride; // stride of an array variable + int topLevelArrayStride; // stride of the top-level variable in a storage buffer member EShLanguageMask stages; protected: - TObjectReflection() : - offset(-1), glDefineType(-1), size(-1), index(-1), counterIndex(-1), stages(EShLanguageMask(0)), type(nullptr) { } + TObjectReflection() + : offset(-1), glDefineType(-1), size(-1), index(-1), counterIndex(-1), numMembers(-1), arrayStride(0), + topLevelArrayStride(0), stages(EShLanguageMask(0)), type(nullptr) + { + } const TType* type; };