From f45686b9b504490eb94f8e4d5ac63bfa07f009fe Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 4 Oct 2016 14:54:13 +1300 Subject: layers: Tweak object_tracker for 32bit some more The previous approach doesn't actually work. --- layers/object_tracker.cpp | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'layers/object_tracker.cpp') diff --git a/layers/object_tracker.cpp b/layers/object_tracker.cpp index 0a8f7a70..afbd906e 100644 --- a/layers/object_tracker.cpp +++ b/layers/object_tracker.cpp @@ -33,7 +33,6 @@ #include #include -#include #include "vk_layer_config.h" #include "vk_layer_data.h" @@ -243,13 +242,20 @@ static void CreateSwapchainImageObject(VkDevice dispatchable_object, VkImage swa device_data->swapchainImageMap[reinterpret_cast(swapchain_image)] = pNewObjNode; } +template +uint64_t handle_value(T handle) { + return reinterpret_cast(handle); +} +template +uint64_t handle_value(T *handle) { + return reinterpret_cast(handle); +} + template static void CreateObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { layer_data *instance_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); - auto object_handle = std::is_pointer::value - ? reinterpret_cast(object) - : reinterpret_cast(object); + auto object_handle = handle_value(object); log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, object_handle, __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, @@ -268,9 +274,7 @@ template static void DestroyObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); - auto object_handle = std::is_pointer::value - ? reinterpret_cast(object) - : reinterpret_cast(object); + auto object_handle = handle_value(object); auto item = device_data->object_map[object_type].find(object_handle); if (item != device_data->object_map[object_type].end()) { @@ -311,9 +315,8 @@ static bool ValidateObject(T1 dispatchable_object, T2 object, VkDebugReportObjec if (null_allowed && (object == VK_NULL_HANDLE)) { return false; } - auto object_handle = std::is_pointer::value - ? reinterpret_cast(object) - : reinterpret_cast(object); + auto object_handle = handle_value(object); + layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); if (device_data->object_map[object_type].find(object_handle) == device_data->object_map[object_type].end()) { // If object is an image, also look for it in the swapchain image map -- cgit v1.2.3