Fix treatment of array input/output variables in reflection

* Non-block arrays should not be ignored when exploding types.
* When not exploding, set the array size correctly on each item.
This commit is contained in:
baldurk 2019-02-11 16:39:12 +00:00
parent 05d12a9461
commit 879562b766
10 changed files with 25 additions and 18 deletions

View File

@ -32,5 +32,5 @@ Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
Pipeline output reflection: Pipeline output reflection:
@entryPointOutput: offset 0, type 8b52, size 0, index 0, binding -1, stages 16 @entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16

View File

@ -22,5 +22,5 @@ Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
Pipeline output reflection: Pipeline output reflection:
psout.Color: offset 0, type 8b52, size 0, index 0, binding -1, stages 16 psout.Color: offset 0, type 8b52, size 1, index 0, binding -1, stages 16

View File

@ -72,11 +72,11 @@ Buffer variable reflection:
Buffer block reflection: Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 1 attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 1 attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 1 attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 1 attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 1 attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
Pipeline output reflection: Pipeline output reflection:

View File

@ -233,5 +233,5 @@ Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
Pipeline output reflection: Pipeline output reflection:
@entryPointOutput: offset 0, type 8b52, size 0, index 0, binding -1, stages 16 @entryPointOutput: offset 0, type 8b52, size 1, index 0, binding -1, stages 16

View File

@ -13,8 +13,8 @@ Buffer variable reflection:
Buffer block reflection: Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
vertin: offset 0, type 1406, size 0, index 0, binding -1, stages 1 vertin: offset 0, type 1406, size 1, index 0, binding -1, stages 1
Pipeline output reflection: Pipeline output reflection:
fragout: offset 0, type 1406, size 0, index 0, binding -1, stages 16 fragout: offset 0, type 1406, size 1, index 0, binding -1, stages 16

View File

@ -40,4 +40,5 @@ outval.val: offset 0, type 1406, size 1, index 0, binding -1, stages 1
outval.a: offset 0, type 8b51, size 1, index 0, binding -1, stages 1 outval.a: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
outval.b[0]: offset 0, type 8b50, size 4, index 0, binding -1, stages 1 outval.b[0]: offset 0, type 8b50, size 4, index 0, binding -1, stages 1
outval.c: offset 0, type 8b5a, size 1, index 0, binding -1, stages 1 outval.c: offset 0, type 8b5a, size 1, index 0, binding -1, stages 1
outarr[0]: offset 0, type 1406, size 3, index 0, binding -1, stages 1

View File

@ -151,12 +151,13 @@ Buffer variable reflection:
Buffer block reflection: Buffer block reflection:
Pipeline input reflection: Pipeline input reflection:
attributeFloat: offset 0, type 1406, size 0, index 0, binding -1, stages 1 attributeFloat: offset 0, type 1406, size 1, index 0, binding -1, stages 1
attributeFloat2: offset 0, type 8b50, size 0, index 0, binding -1, stages 1 attributeFloat2: offset 0, type 8b50, size 1, index 0, binding -1, stages 1
attributeFloat3: offset 0, type 8b51, size 0, index 0, binding -1, stages 1 attributeFloat3: offset 0, type 8b51, size 1, index 0, binding -1, stages 1
attributeFloat4: offset 0, type 8b52, size 0, index 0, binding -1, stages 1 attributeFloat4: offset 0, type 8b52, size 1, index 0, binding -1, stages 1
attributeMat4: offset 0, type 8b5c, size 0, index 0, binding -1, stages 1 attributeMat4: offset 0, type 8b5c, size 1, index 0, binding -1, stages 1
gl_InstanceID: offset 0, type 1404, size 0, index 0, binding -1, stages 1 attributeFloatArray: offset 0, type 1406, size 3, index 0, binding -1, stages 1
gl_InstanceID: offset 0, type 1404, size 1, index 0, binding -1, stages 1
Pipeline output reflection: Pipeline output reflection:

View File

@ -34,6 +34,7 @@ struct OutputStruct {
}; };
out OutputStruct outval; out OutputStruct outval;
out float outarr[3];
void main() void main()
{ {
@ -48,4 +49,5 @@ void main()
f += ubo.flt[gl_InstanceID]; f += ubo.flt[gl_InstanceID];
TriangleInfo tlocal[5] = t; TriangleInfo tlocal[5] = t;
outval.val = f; outval.val = f;
outarr[2] = f;
} }

View File

@ -107,6 +107,7 @@ layout(location = 2) in vec2 attributeFloat2;
in vec3 attributeFloat3; in vec3 attributeFloat3;
in vec4 attributeFloat4; in vec4 attributeFloat4;
in mat4 attributeMat4; in mat4 attributeMat4;
in float attributeFloatArray[3];
uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2]; uniform deep3 deepA[2], deepB[2], deepC[3], deepD[2];
@ -223,6 +224,7 @@ void main()
f += attributeFloat3.x; f += attributeFloat3.x;
f += attributeFloat4.x; f += attributeFloat4.x;
f += attributeMat4[0][1]; f += attributeMat4[0][1];
f += attributeFloatArray[2];
f += buf1i.runtimeArray[3]; f += buf1i.runtimeArray[3];
f += buf2i.runtimeArray[3].c; f += buf2i.runtimeArray[3].c;
f += buf3i.runtimeArray[gl_InstanceID]; f += buf3i.runtimeArray[gl_InstanceID];

View File

@ -121,7 +121,7 @@ public:
} }
// by convention if this is an arrayed block we ignore the array in the reflection // by convention if this is an arrayed block we ignore the array in the reflection
if (type.isArray()) { if (type.isArray() && type.getBasicType() == EbtBlock) {
blowUpIOAggregate(input, baseName, TType(type, 0)); blowUpIOAggregate(input, baseName, TType(type, 0));
} else { } else {
blowUpIOAggregate(input, baseName, type); blowUpIOAggregate(input, baseName, type);
@ -130,7 +130,8 @@ public:
TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str()); TReflection::TNameToIndex::const_iterator it = reflection.nameToIndex.find(name.c_str());
if (it == reflection.nameToIndex.end()) { if (it == reflection.nameToIndex.end()) {
reflection.nameToIndex[name.c_str()] = (int)ioItems.size(); reflection.nameToIndex[name.c_str()] = (int)ioItems.size();
ioItems.push_back(TObjectReflection(name.c_str(), type, 0, mapToGlType(type), 0, 0)); ioItems.push_back(
TObjectReflection(name.c_str(), type, 0, mapToGlType(type), mapToGlArraySize(type), 0));
EShLanguageMask& stages = ioItems.back().stages; EShLanguageMask& stages = ioItems.back().stages;
stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage()); stages = static_cast<EShLanguageMask>(stages | 1 << intermediate.getStage());