aboutsummaryrefslogtreecommitdiff
path: root/layers/object_tracker.h
diff options
context:
space:
mode:
authorMark Lobodzinski <mark@lunarg.com>2017-11-13 09:38:23 -0700
committerMark Lobodzinski <mark@lunarg.com>2017-11-15 10:34:31 -0700
commit4dd2152a1fb5db933704fdecbcbb07bcf27b3ac1 (patch)
treec1cf9a836f05d0d3ab0a20d71331ebe0d9da7b27 /layers/object_tracker.h
parent3cbbb655d78ad16fa26ea7f838f0c19a1e2035a8 (diff)
downloadusermoji-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.h8
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);