aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTobin Ehlis <tobine@google.com>2016-10-25 21:47:46 -0600
committerTobin Ehlis <tobine@google.com>2016-10-25 21:47:46 -0600
commit94165f5005d1fa37801d49067fe7751789b89d27 (patch)
tree37605905f8235bf7fb6c3ff2b0768ddc499ab10b
parent4710dda89a1dd2e023334d4eda710a394b211cdc (diff)
downloadvulkan-validation-layers-94165f5005d1fa37801d49067fe7751789b89d27.tar.gz
layers:Fix destroy functions w/ disable flags
All of the Destroy functions Pre* calls had a bug where, if the disable flag was on, the state ptr and object struct were not correctly set. Updated all of these cases to first update state ptr and obj_struct and only then check the disable flag.
-rw-r--r--layers/core_validation.cpp45
1 files changed, 23 insertions, 22 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index d0de53cc7..89babdda6 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -5095,12 +5095,12 @@ bool ValidateObjectNotInUse(const layer_data *dev_data, BASE_NODE *obj_node, VK_
}
static bool PreCallValidateFreeMemory(layer_data *dev_data, VkDeviceMemory mem, DEVICE_MEM_INFO **mem_info, VK_OBJECT *obj_struct) {
+ *mem_info = getMemObjInfo(dev_data, mem);
+ *obj_struct = {reinterpret_cast<uint64_t &>(mem), VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT};
if (dev_data->instance_data->disabled.free_memory)
return false;
bool skip = false;
- *mem_info = getMemObjInfo(dev_data, mem);
if (*mem_info) {
- *obj_struct = {reinterpret_cast<uint64_t &>(mem), VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT};
skip |= ValidateObjectNotInUse(dev_data, *mem_info, *obj_struct, VALIDATION_ERROR_00620);
}
return skip;
@@ -5437,12 +5437,12 @@ DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallb
}
static bool PreCallValidateDestroyEvent(layer_data *dev_data, VkEvent event, EVENT_STATE **event_state, VK_OBJECT *obj_struct) {
+ *event_state = getEventNode(dev_data, event);
+ *obj_struct = {reinterpret_cast<uint64_t &>(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT};
if (dev_data->instance_data->disabled.destroy_event)
return false;
bool skip = false;
- *event_state = getEventNode(dev_data, event);
if (*event_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(event), VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT};
skip |= ValidateObjectNotInUse(dev_data, *event_state, *obj_struct, VALIDATION_ERROR_00213);
}
return skip;
@@ -5741,12 +5741,12 @@ VKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer,
static bool PreCallValidateDestroyBufferView(layer_data *dev_data, VkBufferView buffer_view, BUFFER_VIEW_STATE **buffer_view_state,
VK_OBJECT *obj_struct) {
+ *buffer_view_state = getBufferViewState(dev_data, buffer_view);
+ *obj_struct = {reinterpret_cast<uint64_t &>(buffer_view), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT};
if (dev_data->instance_data->disabled.destroy_buffer_view)
return false;
bool skip = false;
- *buffer_view_state = getBufferViewState(dev_data, buffer_view);
if (*buffer_view_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(buffer_view), VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT};
skip |= ValidateObjectNotInUse(dev_data, *buffer_view_state, *obj_struct, VALIDATION_ERROR_00701);
}
return skip;
@@ -5777,12 +5777,12 @@ DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCa
}
static bool PreCallValidateDestroyImage(layer_data *dev_data, VkImage image, IMAGE_STATE **image_state, VK_OBJECT *obj_struct) {
+ *image_state = getImageState(dev_data, image);
+ *obj_struct = {reinterpret_cast<uint64_t &>(image), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT};
if (dev_data->instance_data->disabled.destroy_image)
return false;
bool skip = false;
- *image_state = getImageState(dev_data, image);
if (*image_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(image), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT};
skip |= ValidateObjectNotInUse(dev_data, *image_state, *obj_struct, VALIDATION_ERROR_00743);
}
return skip;
@@ -5931,12 +5931,12 @@ GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements
static bool PreCallValidateDestroyImageView(layer_data *dev_data, VkImageView image_view, IMAGE_VIEW_STATE **image_view_state,
VK_OBJECT *obj_struct) {
+ *image_view_state = getImageViewState(dev_data, image_view);
+ *obj_struct = {reinterpret_cast<uint64_t &>(image_view), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT};
if (dev_data->instance_data->disabled.destroy_image_view)
return false;
bool skip = false;
- *image_view_state = getImageViewState(dev_data, image_view);
if (*image_view_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(image_view), VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT};
skip |= ValidateObjectNotInUse(dev_data, *image_view_state, *obj_struct, VALIDATION_ERROR_00776);
}
return skip;
@@ -5978,12 +5978,12 @@ DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, const VkAlloca
static bool PreCallValidateDestroyPipeline(layer_data *dev_data, VkPipeline pipeline, PIPELINE_STATE **pipeline_state,
VK_OBJECT *obj_struct) {
+ *pipeline_state = getPipelineState(dev_data, pipeline);
+ *obj_struct = {reinterpret_cast<uint64_t &>(pipeline), VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT};
if (dev_data->instance_data->disabled.destroy_pipeline)
return false;
bool skip = false;
- *pipeline_state = getPipelineState(dev_data, pipeline);
if (*pipeline_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(pipeline), VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT};
skip |= ValidateObjectNotInUse(dev_data, *pipeline_state, *obj_struct, VALIDATION_ERROR_00555);
}
return skip;
@@ -6023,12 +6023,12 @@ DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, const Vk
static bool PreCallValidateDestroySampler(layer_data *dev_data, VkSampler sampler, SAMPLER_STATE **sampler_state,
VK_OBJECT *obj_struct) {
+ *sampler_state = getSamplerState(dev_data, sampler);
+ *obj_struct = {reinterpret_cast<uint64_t &>(sampler), VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT};
if (dev_data->instance_data->disabled.destroy_sampler)
return false;
bool skip = false;
- *sampler_state = getSamplerState(dev_data, sampler);
if (*sampler_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(sampler), VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT};
skip |= ValidateObjectNotInUse(dev_data, *sampler_state, *obj_struct, VALIDATION_ERROR_00837);
}
return skip;
@@ -6037,7 +6037,8 @@ static bool PreCallValidateDestroySampler(layer_data *dev_data, VkSampler sample
static void PostCallRecordDestroySampler(layer_data *dev_data, VkSampler sampler, SAMPLER_STATE *sampler_state,
VK_OBJECT obj_struct) {
// Any bound cmd buffers are now invalid
- invalidateCommandBuffers(sampler_state->cb_bindings, obj_struct);
+ if (sampler_state)
+ invalidateCommandBuffers(sampler_state->cb_bindings, obj_struct);
dev_data->samplerMap.erase(sampler);
}
@@ -6065,12 +6066,12 @@ DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetL
static bool PreCallValidateDestroyDescriptorPool(layer_data *dev_data, VkDescriptorPool pool,
DESCRIPTOR_POOL_STATE **desc_pool_state, VK_OBJECT *obj_struct) {
+ *desc_pool_state = getDescriptorPoolState(dev_data, pool);
+ *obj_struct = {reinterpret_cast<uint64_t &>(pool), VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT};
if (dev_data->instance_data->disabled.destroy_descriptor_pool)
return false;
bool skip = false;
- *desc_pool_state = getDescriptorPoolState(dev_data, pool);
if (*desc_pool_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(pool), VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT};
skip |= ValidateObjectNotInUse(dev_data, *desc_pool_state, *obj_struct, VALIDATION_ERROR_00901);
}
return skip;
@@ -6207,10 +6208,10 @@ VKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(VkDevice device, const VkQueryPoo
}
static bool PreCallValidateDestroyCommandPool(layer_data *dev_data, VkCommandPool pool, COMMAND_POOL_NODE **cp_state) {
+ *cp_state = getCommandPoolNode(dev_data, pool);
if (dev_data->instance_data->disabled.destroy_command_pool)
return false;
bool skip = false;
- *cp_state = getCommandPoolNode(dev_data, pool);
if (*cp_state) {
// Verify that command buffers in pool are complete (not in-flight)
skip |= checkCommandBuffersInFlight(dev_data, *cp_state, "destroy command pool with", VALIDATION_ERROR_00077);
@@ -6324,12 +6325,12 @@ void invalidateCommandBuffers(std::unordered_set<GLOBAL_CB_NODE *> cb_nodes, VK_
static bool PreCallValidateDestroyFramebuffer(layer_data *dev_data, VkFramebuffer framebuffer,
FRAMEBUFFER_STATE **framebuffer_state, VK_OBJECT *obj_struct) {
+ *framebuffer_state = getFramebufferState(dev_data, framebuffer);
+ *obj_struct = {reinterpret_cast<uint64_t &>(framebuffer), VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT};
if (dev_data->instance_data->disabled.destroy_framebuffer)
return false;
bool skip = false;
- *framebuffer_state = getFramebufferState(dev_data, framebuffer);
if (*framebuffer_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(framebuffer), VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT};
skip |= ValidateObjectNotInUse(dev_data, *framebuffer_state, *obj_struct, VALIDATION_ERROR_00422);
}
return skip;
@@ -6358,12 +6359,12 @@ DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocatio
static bool PreCallValidateDestroyRenderPass(layer_data *dev_data, VkRenderPass render_pass, RENDER_PASS_STATE **rp_state,
VK_OBJECT *obj_struct) {
+ *rp_state = getRenderPassState(dev_data, render_pass);
+ *obj_struct = {reinterpret_cast<uint64_t &>(render_pass), VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT};
if (dev_data->instance_data->disabled.destroy_renderpass)
return false;
bool skip = false;
- *rp_state = getRenderPassState(dev_data, render_pass);
if (*rp_state) {
- *obj_struct = {reinterpret_cast<uint64_t &>(render_pass), VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT};
skip |= ValidateObjectNotInUse(dev_data, *rp_state, *obj_struct, VALIDATION_ERROR_00393);
}
return skip;