summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJean-Michaël Celerier <jean-michael.celerier@kdab.com>2020-04-17 14:57:54 +0200
committerJean-Michaël Celerier <jean-michael.celerier@kdab.com>2020-04-22 09:37:50 +0200
commitc6dcb9a70b747a599628a5dd5a6e7770e74a6d15 (patch)
tree19172fde9131577ae9fef4a19c1e37035ef0a7e5 /src
parentd1e29cdd45a31b3bf2afbe38de20e29554091dd9 (diff)
rhi: Fix upload of arrays of structures
Change-Id: I924cec511487f4d91ecd33821d8da593e730742d Reviewed-by: Paul Lemire <paul.lemire@kdab.com>
Diffstat (limited to 'src')
-rw-r--r--src/plugins/renderers/rhi/renderer/renderer.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/plugins/renderers/rhi/renderer/renderer.cpp b/src/plugins/renderers/rhi/renderer/renderer.cpp
index 34ae18b5d..eac14d0cb 100644
--- a/src/plugins/renderers/rhi/renderer/renderer.cpp
+++ b/src/plugins/renderers/rhi/renderer/renderer.cpp
@@ -2231,7 +2231,8 @@ void uploadUniform(
const RHIShader::UBO_Member& uboMember,
const QHash<int, RHIGraphicsPipeline::UBOBuffer>& uboBuffers,
const QString& uniformName,
- const QShaderDescription::BlockVariable& member)
+ const QShaderDescription::BlockVariable& member,
+ int arrayOffset = 0)
{
const int uniformNameId = StringToInt::lookupId(uniformName);
@@ -2250,7 +2251,7 @@ void uploadUniform(
QByteArray rawData;
rawData.resize(member.size);
memcpy(rawData.data(), value.constData<char>(), std::min(value.byteSize(), member.size));
- buffer->update(&submissionContext, rawData, member.offset);
+ buffer->update(&submissionContext, rawData, member.offset + arrayOffset);
// printUpload(value, member);
}
@@ -2291,7 +2292,7 @@ bool Renderer::uploadUBOsForCommand(QRhiCommandBuffer *cb, const RenderView *rv,
for (int i = 0; i < arr0; i++) {
for (const QShaderDescription::BlockVariable& structMember : member.structMembers) {
const QString processedName = member.name + "[" + QString::number(i) + "]." + structMember.name;
- uploadUniform(*m_submissionContext, uniforms, uboMember, uboBuffers, processedName, structMember);
+ uploadUniform(*m_submissionContext, uniforms, uboMember, uboBuffers, processedName, structMember, i * member.size / arr0);
}
}
} else {