From 4dd2152a1fb5db933704fdecbcbb07bcf27b3ac1 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Mon, 13 Nov 2017 09:38:23 -0700 Subject: layers: Validate device dispatchable objects Device object validation required dereferencing possibly bad device objects. Moved ownership of device objects to instance objects, and to search each of the layer_data object lists for a created device handle matching the our candidate device object. Change-Id: If5615294c397ff6991d4d21ac75ab58d1b0b0841 --- layers/object_tracker.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'layers/object_tracker.h') diff --git a/layers/object_tracker.h b/layers/object_tracker.h index a45d30b3..d9fdf8b4 100644 --- a/layers/object_tracker.h +++ b/layers/object_tracker.h @@ -145,7 +145,8 @@ void AllocateCommandBuffer(VkDevice device, const VkCommandPool command_pool, co void AllocateDescriptorSet(VkDevice device, VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set); void CreateSwapchainImageObject(VkDevice dispatchable_object, VkImage swapchain_image, VkSwapchainKHR swapchain); void ReportUndestroyedObjects(VkDevice device, UNIQUE_VALIDATION_ERROR_CODE error_code); - +bool ValidateDeviceObject(uint64_t device_handle, enum UNIQUE_VALIDATION_ERROR_CODE invalid_handle_code, + enum UNIQUE_VALIDATION_ERROR_CODE wrong_device_code); template bool ValidateObject(T1 dispatchable_object, T2 object, VulkanObjectType object_type, bool null_allowed, @@ -154,6 +155,11 @@ bool ValidateObject(T1 dispatchable_object, T2 object, VulkanObjectType object_t return false; } auto object_handle = HandleToUint64(object); + + if (object_type == kVulkanObjectTypeDevice) { + return ValidateDeviceObject(object_handle, invalid_handle_code, wrong_device_code); + } + VkDebugReportObjectTypeEXT debug_object_type = get_debug_report_enum[object_type]; layer_data *device_data = GetLayerDataPtr(get_dispatch_key(dispatchable_object), layer_data_map); -- cgit v1.2.3