fix pushconstants validation issues

This commit is contained in:
Ricardo Luís Vaz Silva 2025-02-25 10:43:21 -03:00 committed by Magnus Norddahl
commit a4cc4ab9e2
3 changed files with 22 additions and 11 deletions

View file

@ -469,6 +469,8 @@ void VkRenderState::ApplySurfaceUniforms()
}
}
TArray<char> buffer;
void VkRenderState::ApplyPushConstants()
{
mPushConstants.uDataIndex = mRSBuffers->SurfaceUniformsBuffer->DataIndex();
@ -476,11 +478,25 @@ void VkRenderState::ApplyPushConstants()
mPushConstants.uBoneIndexBase = mBoneIndexBase;
mPushConstants.uFogballIndex = mFogballIndex >= 0 ? (mFogballIndex % MAX_FOGBALL_DATA) : -1;
mCommandBuffer->pushConstants(fb->GetRenderPassManager()->GetPipelineLayout(mPipelineKey.ShaderKey.UseLevelMesh, mUniforms.sz), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, (uint32_t)sizeof(PushConstants), &mPushConstants);
if(mUniforms.sz > 0)
{
mCommandBuffer->pushConstants(fb->GetRenderPassManager()->GetPipelineLayout(mPipelineKey.ShaderKey.UseLevelMesh, mUniforms.sz), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, (uint32_t)sizeof(PushConstants), (uint32_t)mUniforms.sz, mUniforms.addr);
//thanks khronos /s
size_t sz = sizeof(PushConstants) + mUniforms.sz;
if(buffer.Size() < sz)
{
buffer.Resize(sz);
}
memcpy(buffer.Data(), &mPushConstants, sizeof(PushConstants));
memcpy(buffer.Data() + sizeof(PushConstants), mUniforms.addr, mUniforms.sz);
mCommandBuffer->pushConstants(fb->GetRenderPassManager()->GetPipelineLayout(mPipelineKey.ShaderKey.UseLevelMesh, mUniforms.sz), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, sz, buffer.Data());
}
else
{
mCommandBuffer->pushConstants(fb->GetRenderPassManager()->GetPipelineLayout(mPipelineKey.ShaderKey.UseLevelMesh, mUniforms.sz), VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT, 0, (uint32_t)sizeof(PushConstants), &mPushConstants);
}
}