From c6dcb9a70b747a599628a5dd5a6e7770e74a6d15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-Micha=C3=ABl=20Celerier?= Date: Fri, 17 Apr 2020 14:57:54 +0200 Subject: rhi: Fix upload of arrays of structures Change-Id: I924cec511487f4d91ecd33821d8da593e730742d Reviewed-by: Paul Lemire --- src/plugins/renderers/rhi/renderer/renderer.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') 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& 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(), 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 { -- cgit v1.2.3