rhi: gles2: fix uniform gathering after struct-type member in UBOs
Given:
struct Light { vec4 foo; };
layout(std140, binding = 2) uniform material {
Light light;
int lightCount;
};
the previous code would keep "light" appended for the prefix and look for
`light.lightCount`.
Change-Id: Ia8deacd0cb4833f45151e922fa7b5970169332eb
Reviewed-by: Laszlo Agocs <laszlo.agocs@qt.io>
bb10
parent
50c6882e9f
commit
b4b8ffb233
|
|
@ -3256,11 +3256,12 @@ void QRhiGles2::gatherUniforms(GLuint program,
|
|||
QByteArray prefix = ub.structName.toUtf8() + '.';
|
||||
for (const QShaderDescription::BlockVariable &blockMember : ub.members) {
|
||||
if (blockMember.type == QShaderDescription::Struct) {
|
||||
prefix += blockMember.name.toUtf8();
|
||||
QByteArray structPrefix = prefix + blockMember.name.toUtf8();
|
||||
|
||||
const int baseOffset = blockMember.offset;
|
||||
if (blockMember.arrayDims.isEmpty()) {
|
||||
for (const QShaderDescription::BlockVariable &structMember : blockMember.structMembers)
|
||||
registerUniformIfActive(structMember, prefix, ub.binding, baseOffset, program, dst);
|
||||
registerUniformIfActive(structMember, structPrefix, ub.binding, baseOffset, program, dst);
|
||||
} else {
|
||||
if (blockMember.arrayDims.count() > 1) {
|
||||
qWarning("Array of struct '%s' has more than one dimension. Only the first dimension is used.",
|
||||
|
|
@ -3270,7 +3271,7 @@ void QRhiGles2::gatherUniforms(GLuint program,
|
|||
const int elemSize = blockMember.size / dim;
|
||||
int elemOffset = baseOffset;
|
||||
for (int di = 0; di < dim; ++di) {
|
||||
const QByteArray arrayPrefix = prefix + '[' + QByteArray::number(di) + ']' + '.';
|
||||
const QByteArray arrayPrefix = structPrefix + '[' + QByteArray::number(di) + ']' + '.';
|
||||
for (const QShaderDescription::BlockVariable &structMember : blockMember.structMembers)
|
||||
registerUniformIfActive(structMember, arrayPrefix, ub.binding, elemOffset, program, dst);
|
||||
elemOffset += elemSize;
|
||||
|
|
|
|||
Loading…
Reference in New Issue