Fix a crash when push constants are provided insufficient data

This commit is contained in:
baldurk
2021-06-17 14:30:23 +01:00
parent e15906fddb
commit 16937f160e
2 changed files with 11 additions and 3 deletions
@@ -1715,15 +1715,23 @@ void VulkanPipelineStateViewer::addConstantBlockRow(ShaderReflection *shaderDeta
if(descriptorBind && descriptorBind->inlineBlock)
{
vecrange = QFormatStr("%1 - %2")
vecrange = QFormatStr("%1 - %2 bytes")
.arg(descriptorBind->byteOffset)
.arg(descriptorBind->byteOffset + descriptorBind->byteSize);
}
else if(!cblock->compileConstants)
{
vecrange = QFormatStr("%1 - %2")
vecrange = QFormatStr("%1 - %2 bytes")
.arg(stage.pushConstantRangeByteOffset)
.arg(stage.pushConstantRangeByteOffset + stage.pushConstantRangeByteSize);
if(stage.pushConstantRangeByteOffset + stage.pushConstantRangeByteSize >
m_Ctx.CurVulkanPipelineState()->pushconsts.size())
{
filledSlot = false;
vecrange +=
tr(", only %1 bytes pushed").arg(m_Ctx.CurVulkanPipelineState()->pushconsts.size());
}
}
}
else
+1 -1
View File
@@ -1071,7 +1071,7 @@ BoundCBuffer PipeState::GetConstantBuffer(ShaderStage stage, uint32_t BufIdx, ui
if(ret.byteOffset > src->size())
ret.byteSize = 0;
else if(ret.byteOffset + ret.byteSize > src->size())
ret.byteSize = src->size() - (ret.byteOffset + ret.byteSize);
ret.byteSize = src->size() - ret.byteOffset;
// consume the byteoffset here when copying data from the source data
ret.inlineData.resize((size_t)ret.byteSize);