aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp40
1 files changed, 24 insertions, 16 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index a4f0d5a9..7ccd4b3d 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -619,11 +619,13 @@ void AddCommandBufferBindingImage(const layer_data *dev_data, GLOBAL_CB_NODE *cb
// Skip validation if this image was created through WSI
if (image_state->binding.mem != MEMTRACKER_SWAP_CHAIN_IMAGE_KEY) {
// First update CB binding in MemObj mini CB list
- DEVICE_MEM_INFO *pMemInfo = getMemObjInfo(dev_data, image_state->binding.mem);
- if (pMemInfo) {
- pMemInfo->cb_bindings.insert(cb_node);
- // Now update CBInfo's Mem reference list
- cb_node->memObjs.insert(image_state->binding.mem);
+ for (auto mem_binding : image_state->GetBoundMemory()) {
+ DEVICE_MEM_INFO *pMemInfo = getMemObjInfo(dev_data, mem_binding);
+ if (pMemInfo) {
+ pMemInfo->cb_bindings.insert(cb_node);
+ // Now update CBInfo's Mem reference list
+ cb_node->memObjs.insert(mem_binding);
+ }
}
// Now update cb binding for image
cb_node->object_bindings.insert({reinterpret_cast<uint64_t &>(image_state->image), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT});
@@ -647,11 +649,13 @@ void AddCommandBufferBindingImageView(const layer_data *dev_data, GLOBAL_CB_NODE
// Create binding link between given buffer node and command buffer node
void AddCommandBufferBindingBuffer(const layer_data *dev_data, GLOBAL_CB_NODE *cb_node, BUFFER_NODE *buff_node) {
// First update CB binding in MemObj mini CB list
- DEVICE_MEM_INFO *pMemInfo = getMemObjInfo(dev_data, buff_node->binding.mem);
- if (pMemInfo) {
- pMemInfo->cb_bindings.insert(cb_node);
- // Now update CBInfo's Mem reference list
- cb_node->memObjs.insert(buff_node->binding.mem);
+ for (auto mem_binding : buff_node->GetBoundMemory()) {
+ DEVICE_MEM_INFO *pMemInfo = getMemObjInfo(dev_data, mem_binding);
+ if (pMemInfo) {
+ pMemInfo->cb_bindings.insert(cb_node);
+ // Now update CBInfo's Mem reference list
+ cb_node->memObjs.insert(mem_binding);
+ }
}
// Now update cb binding for buffer
cb_node->object_bindings.insert({reinterpret_cast<uint64_t &>(buff_node->buffer), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT});
@@ -5769,9 +5773,11 @@ VKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer,
// Any bound cmd buffers are now invalid
invalidateCommandBuffers(buff_node->cb_bindings,
{reinterpret_cast<uint64_t &>(buff_node->buffer), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT});
- auto mem_info = getMemObjInfo(dev_data, buff_node->binding.mem);
- if (mem_info) {
- RemoveBufferMemoryRange(reinterpret_cast<uint64_t &>(buffer), mem_info);
+ for (auto mem_binding : buff_node->GetBoundMemory()) {
+ auto mem_info = getMemObjInfo(dev_data, mem_binding);
+ if (mem_info) {
+ RemoveBufferMemoryRange(reinterpret_cast<uint64_t &>(buffer), mem_info);
+ }
}
ClearMemoryObjectBindings(dev_data, reinterpret_cast<uint64_t &>(buffer), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT);
dev_data->bufferMap.erase(buff_node->buffer);
@@ -5833,9 +5839,11 @@ static bool PreCallValidateDestroyImage(layer_data *dev_data, VkImage image, IMA
static void PostCallRecordDestroyImage(layer_data *dev_data, VkImage image, IMAGE_STATE *image_state, VK_OBJECT obj_struct) {
invalidateCommandBuffers(image_state->cb_bindings, obj_struct);
// Clean up memory mapping, bindings and range references for image
- auto mem_info = getMemObjInfo(dev_data, image_state->binding.mem);
- if (mem_info) {
- RemoveImageMemoryRange(obj_struct.handle, mem_info);
+ for (auto mem_binding : image_state->GetBoundMemory()) {
+ auto mem_info = getMemObjInfo(dev_data, mem_binding);
+ if (mem_info) {
+ RemoveImageMemoryRange(obj_struct.handle, mem_info);
+ }
}
ClearMemoryObjectBindings(dev_data, obj_struct.handle, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT);
// Remove image from imageMap