From d671a9c2cc947d5ad6521881452b898e7b9d35e2 Mon Sep 17 00:00:00 2001 From: baldurk Date: Sun, 24 Apr 2016 13:30:41 +0200 Subject: [PATCH] Protect against un-recorded command buffers being executed --- .../driver/vulkan/wrappers/vk_cmd_funcs.cpp | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp index c6667a2c0..b1f284f93 100644 --- a/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp +++ b/renderdoc/driver/vulkan/wrappers/vk_cmd_funcs.cpp @@ -807,11 +807,17 @@ bool WrappedVulkan::Serialise_vkCmdExecuteCommands( { ResourceId id; if(m_State >= WRITING) - id = GetRecord(pCmdBuffers[i])->bakedCommands->GetResourceID(); + { + VkResourceRecord *bakedCommands = GetRecord(pCmdBuffers[i])->bakedCommands; + if(bakedCommands) + id = bakedCommands->GetResourceID(); + else + RDCERR("Command Buffer %p was not recorded", pCmdBuffers[i]); + } localSerialiser->Serialise("pCmdBuffers[]", id); - if(m_State < WRITING) + if(m_State < WRITING && id != ResourceId()) { cmdids.push_back(id); cmds.push_back(Unwrap(GetResourceManager()->GetLiveHandle(id))); @@ -869,11 +875,14 @@ void WrappedVulkan::vkCmdExecuteCommands( for(uint32_t i=0; i < commandBufferCount; i++) { VkResourceRecord *execRecord = GetRecord(pCmdBuffers[i]); - record->cmdInfo->dirtied.insert(execRecord->bakedCommands->cmdInfo->dirtied.begin(), execRecord->bakedCommands->cmdInfo->dirtied.end()); - record->cmdInfo->boundDescSets.insert(execRecord->bakedCommands->cmdInfo->boundDescSets.begin(), execRecord->bakedCommands->cmdInfo->boundDescSets.end()); - record->cmdInfo->subcmds.push_back(execRecord); + if(execRecord->bakedCommands) + { + record->cmdInfo->dirtied.insert(execRecord->bakedCommands->cmdInfo->dirtied.begin(), execRecord->bakedCommands->cmdInfo->dirtied.end()); + record->cmdInfo->boundDescSets.insert(execRecord->bakedCommands->cmdInfo->boundDescSets.begin(), execRecord->bakedCommands->cmdInfo->boundDescSets.end()); + record->cmdInfo->subcmds.push_back(execRecord); - GetResourceManager()->MergeBarriers(record->cmdInfo->imgbarriers, execRecord->bakedCommands->cmdInfo->imgbarriers); + GetResourceManager()->MergeBarriers(record->cmdInfo->imgbarriers, execRecord->bakedCommands->cmdInfo->imgbarriers); + } } } }