diff options
author | Jean-Michaël Celerier <jean-michael.celerier@kdab.com> | 2020-04-17 14:57:54 +0200 |
---|---|---|
committer | Jean-Michaël Celerier <jean-michael.celerier@kdab.com> | 2020-04-22 09:37:50 +0200 |
commit | c6dcb9a70b747a599628a5dd5a6e7770e74a6d15 (patch) | |
tree | 19172fde9131577ae9fef4a19c1e37035ef0a7e5 /src | |
parent | d1e29cdd45a31b3bf2afbe38de20e29554091dd9 (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.cpp | 7 |
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 { |