diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2017-11-13 09:38:23 -0700 |
|---|---|---|
| committer | Mark Lobodzinski <mark@lunarg.com> | 2017-11-15 10:34:31 -0700 |
| commit | 4dd2152a1fb5db933704fdecbcbb07bcf27b3ac1 (patch) | |
| tree | c1cf9a836f05d0d3ab0a20d71331ebe0d9da7b27 /layers/object_tracker.h | |
| parent | 3cbbb655d78ad16fa26ea7f838f0c19a1e2035a8 (diff) | |
| download | usermoji-4dd2152a1fb5db933704fdecbcbb07bcf27b3ac1.tar.xz | |
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
Diffstat (limited to 'layers/object_tracker.h')
| -rw-r--r-- | layers/object_tracker.h | 8 |
1 files changed, 7 insertions, 1 deletions
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 <typename T1, typename T2> 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); |
