object_tracker.cpp revision e2d522b355afc24ff89c6453f20305194a7e5c64
12faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski/* 22faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Copyright (c) 2015-2016 The Khronos Group Inc. 32faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Copyright (c) 2015-2016 Valve Corporation 42faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Copyright (c) 2015-2016 LunarG, Inc. 52faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Copyright (c) 2015-2016 Google, Inc. 62faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * 72faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Licensed under the Apache License, Version 2.0 (the "License"); 82faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * you may not use this file except in compliance with the License. 92faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * You may obtain a copy of the License at 102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * 112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * http://www.apache.org/licenses/LICENSE-2.0 122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * 132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Unless required by applicable law or agreed to in writing, software 142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * distributed under the License is distributed on an "AS IS" BASIS, 152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * See the License for the specific language governing permissions and 172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * limitations under the License. 182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * 192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Mark Lobodzinski <mark@lunarg.com> 202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Tobin Ehlis <tobine@google.com> 212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Courtney Goeltzenleuchter <courtneygo@google.com> 222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Jon Ashburn <jon@lunarg.com> 232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Mike Stroyan <stroyan@google.com> 242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski * Author: Tony Barbour <tony@LunarG.com> 252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski */ 262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vk_loader_platform.h" 282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vulkan/vulkan.h" 292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include <cinttypes> 312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include <stdio.h> 322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include <stdlib.h> 332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include <string.h> 342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include <unordered_map> 362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vk_layer_config.h" 382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vk_layer_data.h" 392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vk_layer_logging.h" 402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vk_layer_table.h" 412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "vulkan/vk_layer.h" 422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#include "object_tracker.h" 442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskinamespace object_tracker { 462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void InitObjectTracker(layer_data *my_data, const VkAllocationCallbacks *pAllocator) { 482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_object_tracker"); 502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Add new queue to head of global queue list 532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AddQueueInfo(VkDevice device, uint32_t queue_node_index, VkQueue queue) { 542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queueItem = device_data->queue_info_map.find(queue); 562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queueItem == device_data->queue_info_map.end()) { 572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OT_QUEUE_INFO *p_queue_info = new OT_QUEUE_INFO; 582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (p_queue_info != NULL) { 592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski memset(p_queue_info, 0, sizeof(OT_QUEUE_INFO)); 602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_queue_info->queue = queue; 612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_queue_info->queue_node_index = queue_node_index; 622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->queue_info_map[queue] = p_queue_info; 632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, 652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(queue), __LINE__, OBJTRACK_INTERNAL_ERROR, LayerName, 662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "ERROR: VK_ERROR_OUT_OF_HOST_MEMORY -- could not allocate memory for Queue Information"); 672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Destroy memRef lists and free all memory 722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void DestroyQueueDataStructures(VkDevice device) { 732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto queue_item : device_data->queue_info_map) { 762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete queue_item.second; 772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->queue_info_map.clear(); 792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Destroy the items in the queue map 812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].begin(); 822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (queue != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].end()) { 832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t obj_index = queue->second->object_type; 842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_total_objects > 0); 852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects--; 862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_objects[obj_index] > 0); 872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[obj_index]--; 882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, queue->second->object_type, queue->second->handle, 892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, 902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ_STAT Destroy Queue obj 0x%" PRIxLEAST64 " (%" PRIu64 " total objs remain & %" PRIu64 " Queue objs).", 912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski queue->second->handle, device_data->num_total_objects, device_data->num_objects[obj_index]); 922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete queue->second; 932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski queue = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].erase(queue); 942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Check Queue type flags for selected queue operations 982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void ValidateQueueFlags(VkQueue queue, const char *function) { 992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 1002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue_item = device_data->queue_info_map.find(queue); 1012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue_item != device_data->queue_info_map.end()) { 1022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OT_QUEUE_INFO *pQueueInfo = queue_item->second; 1032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pQueueInfo != NULL) { 1042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(device_data->physical_device), layer_data_map); 1052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instance_data->queue_family_properties[pQueueInfo->queue_node_index].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) == 1062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 0) { 1072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, 1082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(queue), __LINE__, OBJTRACK_UNKNOWN_OBJECT, LayerName, 1092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "Attempting %s on a non-memory-management capable queue -- VK_QUEUE_SPARSE_BINDING_BIT not set", function); 1102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AllocateCommandBuffer(VkDevice device, const VkCommandPool command_pool, const VkCommandBuffer command_buffer, 1162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT object_type, VkCommandBufferLevel level) { 1172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<const uint64_t>(command_buffer), 1202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 1212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski string_VkDebugReportObjectTypeEXT(object_type), reinterpret_cast<const uint64_t>(command_buffer)); 1222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 1242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 1252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<const uint64_t>(command_buffer); 1262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<const uint64_t &>(command_pool); 1272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) { 1282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_COMMAND_BUFFER_SECONDARY; 1292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 1302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 1312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type][reinterpret_cast<const uint64_t>(command_buffer)] = pNewObjNode; 1332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 1342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 1352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateCommandBuffer(VkDevice device, VkCommandPool command_pool, VkCommandBuffer command_buffer) { 1382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 1402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t>(command_buffer); 1412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].find(object_handle) != 1422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].end()) { 1432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = 1442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT][reinterpret_cast<uint64_t>(command_buffer)]; 1452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object != reinterpret_cast<uint64_t &>(command_pool)) { 1472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, object_handle, 1482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_COMMAND_POOL_MISMATCH, LayerName, 1492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "FreeCommandBuffers is attempting to free Command Buffer 0x%" PRIxLEAST64 1502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski " belonging to Command Pool 0x%" PRIxLEAST64 " from pool 0x%" PRIxLEAST64 ").", 1512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(command_buffer), pNode->parent_object, 1522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(command_pool)); 1532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 1550ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, 1560ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "Unable to remove command buffer obj 0x%" PRIxLEAST64 1570ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski ". Was it created? Has it already been destroyed?", 1580ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_handle); 1592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return skip_call; 1612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AllocateDescriptorSet(VkDevice device, VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set, 1642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT object_type) { 1652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, 1682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set), __LINE__, OBJTRACK_NONE, LayerName, 1692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, object_name[object_type], 1702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set)); 1712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 1732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 1742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 1752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t &>(descriptor_set); 1762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<uint64_t &>(descriptor_pool); 1772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT][reinterpret_cast<uint64_t &>(descriptor_set)] = 1782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode; 1792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 1802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 1812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateDescriptorSet(VkDevice device, VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set) { 1842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 1862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t &>(descriptor_set); 1872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto dsItem = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].find(object_handle); 1882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (dsItem != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].end()) { 1892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = dsItem->second; 1902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object != reinterpret_cast<uint64_t &>(descriptor_pool)) { 1922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, object_handle, 1932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_DESCRIPTOR_POOL_MISMATCH, LayerName, 1942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "FreeDescriptorSets is attempting to free descriptorSet 0x%" PRIxLEAST64 1952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski " belonging to Descriptor Pool 0x%" PRIxLEAST64 " from pool 0x%" PRIxLEAST64 ").", 1962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set), pNode->parent_object, 1972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_pool)); 1982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 2000ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, 2010ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "Unable to remove descriptor set obj 0x%" PRIxLEAST64 2020ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski ". Was it created? Has it already been destroyed?", 2030ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_handle); 2042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 2052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return skip_call; 2062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CreateQueue(VkDevice device, VkQueue vkObj, VkDebugReportObjectTypeEXT object_type) { 2092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<uint64_t>(vkObj), __LINE__, 2122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 2132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[object_type], reinterpret_cast<uint64_t>(vkObj)); 2142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *p_obj_node = NULL; 2162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue_item = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].find(reinterpret_cast<uint64_t>(vkObj)); 2172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue_item == device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].end()) { 2182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node = new OBJTRACK_NODE; 2192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT][reinterpret_cast<uint64_t>(vkObj)] = p_obj_node; 2202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 2212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 2222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 2232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node = queue_item->second; 2242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 2252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->object_type = object_type; 2262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->status = OBJSTATUS_NONE; 2272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->handle = reinterpret_cast<uint64_t>(vkObj); 2282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CreateSwapchainImageObject(VkDevice dispatchable_object, VkImage swapchain_image, VkSwapchainKHR swapchain) { 2312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, 2332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(swapchain_image), __LINE__, OBJTRACK_NONE, LayerName, 2342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, "SwapchainImage", 2352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(swapchain_image)); 2362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 2382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT; 2392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 2402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t &>(swapchain_image); 2412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<uint64_t &>(swapchain); 2422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->swapchainImageMap[reinterpret_cast<uint64_t &>(swapchain_image)] = pNewObjNode; 2432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 246c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbesstatic void CreateDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { 2472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<uint64_t>(object), 2502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 2512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[object_type], reinterpret_cast<uint64_t>(object)); 2522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 2542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 255c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes pNewObjNode->status = custom_allocator ? OBJSTATUS_CUSTOM_ALLOCATOR : OBJSTATUS_NONE; 2562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t>(object); 2572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->object_map[object_type][reinterpret_cast<uint64_t>(object)] = pNewObjNode; 2582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_objects[object_type]++; 2592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_total_objects++; 2602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 263c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbesstatic void CreateNonDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { 2642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<uint64_t &>(object), 2672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 2682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[object_type], reinterpret_cast<uint64_t &>(object)); 2692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 2712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 272c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes pNewObjNode->status = custom_allocator ? OBJSTATUS_CUSTOM_ALLOCATOR : OBJSTATUS_NONE; 2732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t &>(object); 2742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type][reinterpret_cast<uint64_t &>(object)] = pNewObjNode; 2752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 2762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 2772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 280e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbesstatic void DestroyDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { 2812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t>(object); 2842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 285e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes // TODO: This function produces errors, but doesn't compose well with either 286e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes // a call down the chain or its own state updates 2872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto item = instance_data->object_map[object_type].find(object_handle); 2882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (item != instance_data->object_map[object_type].end()) { 2892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = item->second; 2912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(instance_data->num_total_objects > 0); 2922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_total_objects--; 2932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(instance_data->num_objects[object_type] > 0); 2942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_objects[pNode->object_type]--; 2952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, pNode->object_type, object_handle, __LINE__, 2972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NONE, LayerName, 2982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ_STAT Destroy %s obj 0x%" PRIxLEAST64 " (%" PRIu64 " total objs remain & %" PRIu64 " %s objs).", 2992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[pNode->object_type], reinterpret_cast<uint64_t>(object), instance_data->num_total_objects, 3002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_objects[pNode->object_type], object_name[pNode->object_type]); 3012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 302e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes auto allocated_with_custom = pNode->status & OBJSTATUS_CUSTOM_ALLOCATOR; 303e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes if (custom_allocator ^ allocated_with_custom) { 304e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, object_handle, __LINE__, 305e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes OBJTRACK_ALLOCATOR_MISMATCH, LayerName, 306e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes "Custom allocator %sspecified while destroying %s obj 0x%" PRIxLEAST64 " but %sspecified at creation", 307e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (custom_allocator ? "" : "not "), object_name[object_type], object_handle, 308e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (allocated_with_custom ? "" : "not ")); 309e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes } 310e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes 3112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete pNode; 3122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->object_map[object_type].erase(item); 3132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 3142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, __LINE__, 3152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_UNKNOWN_OBJECT, LayerName, 3160ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski "Unable to remove %s obj 0x%" PRIxLEAST64 ". Was it created? Has it already been destroyed?", 3170ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_name[object_type], object_handle); 3182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 322e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbesstatic void DestroyNonDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool custom_allocator) { 3232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 3242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t &>(object); 3262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto item = device_data->object_map[object_type].find(object_handle); 3282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (item != device_data->object_map[object_type].end()) { 3292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = item->second; 3312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_total_objects > 0); 3322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects--; 3332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_objects[pNode->object_type] > 0); 3342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[pNode->object_type]--; 3352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, pNode->object_type, object_handle, __LINE__, 3372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NONE, LayerName, 3382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ_STAT Destroy %s obj 0x%" PRIxLEAST64 " (%" PRIu64 " total objs remain & %" PRIu64 " %s objs).", 3392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[pNode->object_type], reinterpret_cast<uint64_t &>(object), device_data->num_total_objects, 3402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[pNode->object_type], object_name[pNode->object_type]); 3412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 342e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes auto allocated_with_custom = pNode->status & OBJSTATUS_CUSTOM_ALLOCATOR; 343e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes if (custom_allocator ^ allocated_with_custom) { 344e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, object_handle, __LINE__, 345e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes OBJTRACK_ALLOCATOR_MISMATCH, LayerName, 346e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes "Custom allocator %sspecified while destroying %s obj 0x%" PRIxLEAST64 " but %sspecified at creation", 347e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (custom_allocator ? "" : "not "), object_name[object_type], object_handle, 348e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (allocated_with_custom ? "" : "not ")); 349e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes } 350e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes 3512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete pNode; 3522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type].erase(item); 3532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 3542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, __LINE__, 3552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_UNKNOWN_OBJECT, LayerName, 3560ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski "Unable to remove %s obj 0x%" PRIxLEAST64 ". Was it created? Has it already been destroyed?", 3570ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_name[object_type], object_handle); 3582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 3622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, 3632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool null_allowed) { 3642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (null_allowed && (object == VK_NULL_HANDLE)) { 3652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 3682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instance_data->object_map[object_type].find(reinterpret_cast<uint64_t>(object)) == 3702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->object_map[object_type].end()) { 3712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, reinterpret_cast<uint64_t>(object), 3720ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski __LINE__, OBJTRACK_INVALID_OBJECT, LayerName, "Invalid %s Object 0x%" PRIxLEAST64, object_name[object_type], 3732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(object)); 3742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 3792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateNonDispatchableObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, 3802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool null_allowed) { 3812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (null_allowed && (object == VK_NULL_HANDLE)) { 3822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 3852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (device_data->object_map[object_type].find(reinterpret_cast<uint64_t &>(object)) == 3862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type].end()) { 3872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // If object is an image, also look for it in the swapchain image map 3882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((object_type != VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT) || 3892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (device_data->swapchainImageMap.find(reinterpret_cast<uint64_t &>(object)) == device_data->swapchainImageMap.end())) { 3902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, 3912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(object), __LINE__, OBJTRACK_INVALID_OBJECT, LayerName, 3920ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski "Invalid %s Object 0x%" PRIxLEAST64, object_name[object_type], reinterpret_cast<uint64_t &>(object)); 3932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void DeviceReportUndestroyedObjects(VkDevice device, VkDebugReportObjectTypeEXT object_type) { 3992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 4002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto item = device_data->object_map[object_type].begin(); item != device_data->object_map[object_type].end();) { 4012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *object_info = item->second; 4022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_info->object_type, object_info->handle, __LINE__, 4032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_OBJECT_LEAK, LayerName, 4042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ ERROR : For device 0x%" PRIxLEAST64 ", %s object 0x%" PRIxLEAST64 " has not been destroyed.", 4052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(device), object_name[object_type], object_info->handle); 4062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski item = device_data->object_map[object_type].erase(item); 4072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 4092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4102faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { 4112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 4122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dispatch_key key = get_dispatch_key(instance); 4142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(key, layer_data_map); 4152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Enable the temporary callback(s) here to catch cleanup issues: 4172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool callback_setup = false; 4182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instance_data->num_tmp_callbacks > 0) { 4192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!layer_enable_tmp_callbacks(instance_data->report_data, instance_data->num_tmp_callbacks, 4202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->tmp_dbg_create_infos, instance_data->tmp_callbacks)) { 4212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski callback_setup = true; 4222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 4262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 427e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, pAllocator); 4282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Report any remaining objects in LL 4292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto iit = instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].begin(); 4312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski iit != instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].end();) { 4322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = iit->second; 4332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDevice device = reinterpret_cast<VkDevice>(pNode->handle); 4352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, pNode->handle, __LINE__, 4372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_OBJECT_LEAK, LayerName, "OBJ ERROR : %s object 0x%" PRIxLEAST64 " has not been destroyed.", 4382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski string_VkDebugReportObjectTypeEXT(pNode->object_type), pNode->handle); 4392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Semaphore: 4402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT); 4412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT); 4422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT); 4432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT); 4442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT); 4452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT); 4462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT); 4472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT); 4482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT); 4492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT); 4502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT); 4512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT); 4522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT); 4532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT); 4542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT); 4552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT); 4562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT); 4572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT); 4582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT); 4592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT); 4602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT); 4612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT); 4622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT); 4632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].clear(); 4652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 4672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DestroyInstance(instance, pAllocator); 4682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Disable and cleanup the temporary callback(s): 4702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (callback_setup) { 4712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_disable_tmp_callbacks(instance_data->report_data, instance_data->num_tmp_callbacks, instance_data->tmp_callbacks); 4722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instance_data->num_tmp_callbacks > 0) { 4742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_free_tmp_callbacks(instance_data->tmp_dbg_create_infos, instance_data->tmp_callbacks); 4752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_tmp_callbacks = 0; 4762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Clean up logging callback, if any 4792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (instance_data->logging_callback.size() > 0) { 4802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT callback = instance_data->logging_callback.back(); 4812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_destroy_msg_callback(instance_data->report_data, callback, pAllocator); 4822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->logging_callback.pop_back(); 4832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_debug_report_destroy_instance(instance_data->report_data); 4862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data_map.erase(key); 4872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap.erase(pInstanceTable); 4892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 4902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ot_instance_table_map.erase(key); 4912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 4922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4932faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { 4942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 4962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 497e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, pAllocator); 4982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Report any remaining objects associated with this VkDevice object in LL 5002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT); 5012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT); 5022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT); 5032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT); 5042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT); 5052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT); 5062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT); 5072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT); 5082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT); 5092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT); 5102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT); 5112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT); 5122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT); 5132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT); 5142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT); 5152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT); 5162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT); 5172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT); 5182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT); 5192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT); 5202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT); 5212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT); 5222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT); 5232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Clean up Queue's MemRef Linked Lists 5252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DestroyQueueDataStructures(device); 5262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 5282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dispatch_key key = get_dispatch_key(device); 5302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerDispatchTable *pDisp = get_dispatch_table(ot_device_table_map, device); 5312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pDisp->DestroyDevice(device, pAllocator); 5322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ot_device_table_map.erase(key); 5332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5352faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures *pFeatures) { 5362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 5392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 5402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 5412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 5442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures); 5462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5482faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 5492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkFormatProperties *pFormatProperties) { 5502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 5532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 5542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 5552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 5582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 5602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties); 5612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5632faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 5642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageType type, VkImageTiling tiling, 5652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageUsageFlags usage, VkImageCreateFlags flags, 5662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageFormatProperties *pImageFormatProperties) { 5672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 5702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 5712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 5722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 5752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 5772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 5782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties); 5792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 5802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties) { 5832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 5862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 5872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 5882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 5912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties); 5932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5952faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, 5962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPhysicalDeviceMemoryProperties *pMemoryProperties) { 5972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 6012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 6022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 6052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); 6072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6092faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *pName); 6102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6112faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *pName); 6122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6132faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, 6142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties); 6152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6162faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pPropertyCount, VkLayerProperties *pProperties); 6172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, 6192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties); 6202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6212faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) { 6222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(queue, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, true); 6262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits) { 6272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < submitCount; ++idx0) { 6282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pCommandBuffers) { 6292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pSubmits[idx0].commandBufferCount; ++idx1) { 6302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(queue, pSubmits[idx0].pCommandBuffers[idx1], 6312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 6322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pSignalSemaphores) { 6352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < pSubmits[idx0].signalSemaphoreCount; ++idx2) { 6362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(queue, pSubmits[idx0].pSignalSemaphores[idx2], 6372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false); 6382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pWaitSemaphores) { 6412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx3 = 0; idx3 < pSubmits[idx0].waitSemaphoreCount; ++idx3) { 6422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(queue, pSubmits[idx0].pWaitSemaphores[idx3], 6432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false); 6442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue) { 6492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false); 6502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence); 6562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6592faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(VkQueue queue) { 6602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false); 6642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueWaitIdle(queue); 6692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6722faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(VkDevice device) { 6732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 6772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->DeviceWaitIdle(device); 6822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6852faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, 6862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) { 6872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 6912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory); 6962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 699c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pMemory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); 7002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7052faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 7062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 7072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 7102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 7112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges) { 7122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < memoryRangeCount; ++idx0) { 7132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges[idx0].memory) { 7142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pMemoryRanges[idx0].memory, 7152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 7162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 7242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 7252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7282faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 7292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 7302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 7332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 7342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges) { 7352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < memoryRangeCount; ++idx0) { 7362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges[idx0].memory) { 7372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pMemoryRanges[idx0].memory, 7382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 7392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 7472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 7482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, 7522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize *pCommittedMemoryInBytes) { 7532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 7562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 7572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 7582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); 7632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7652faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, 7662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize memoryOffset) { 7672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 7702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 7712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 7722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 7732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->BindBufferMemory(device, buffer, memory, memoryOffset); 7782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7812faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) { 7822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 7852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 7862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 7872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 7882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->BindImageMemory(device, image, memory, memoryOffset); 7932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, 7972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkMemoryRequirements *pMemoryRequirements) { 7982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 8022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements); 8082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8102faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements *pMemoryRequirements) { 8112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 8162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements); 8212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8232faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount, 8242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSparseImageMemoryRequirements *pSparseMemoryRequirements) { 8252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 8302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 8352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); 8362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 8392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageType type, VkSampleCountFlagBits samples, 8402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageUsageFlags usage, VkImageTiling tiling, 8412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pPropertyCount, 8422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSparseImageFormatProperties *pProperties) { 8432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 8472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 8482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 8532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, 8542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pProperties); 8552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8572faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo, 8582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFence *pFence) { 8592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence); 8682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 871c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pFence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, pAllocator); 8722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 8752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8772faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator) { 8782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false); 8832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 889e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, pAllocator); 8902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyFence(device, fence, pAllocator); 8922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences) { 8952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 8992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pFences) { 9002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < fenceCount; ++idx0) { 9012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pFences[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false); 9022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetFences(device, fenceCount, pFences); 9092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9122faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(VkDevice device, VkFence fence) { 9132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 9172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false); 9182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->GetFenceStatus(device, fence); 9232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9262faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, 9272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t timeout) { 9282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 9322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pFences) { 9332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < fenceCount; ++idx0) { 9342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pFences[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false); 9352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout); 9422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9452faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo, 9462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore) { 9472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 9512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore); 9562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 959c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pSemaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, pAllocator); 9602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9652faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator) { 9662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 9702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false); 9712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 9742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 977e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, pAllocator); 9782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySemaphore(device, semaphore, pAllocator); 9802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, 9832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkEvent *pEvent) { 9842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 9882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent); 9932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 996c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pEvent, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, pAllocator); 9972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10022faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator) { 10032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 10082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 10112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1014e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, pAllocator); 10152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyEvent(device, event, pAllocator); 10172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(VkDevice device, VkEvent event) { 10202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 10252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->GetEventStatus(device, event); 10302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL SetEvent(VkDevice device, VkEvent event) { 10342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 10392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->SetEvent(device, event); 10442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10472faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetEvent(VkDevice device, VkEvent event) { 10482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 10532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetEvent(device, event); 10582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10612faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, 10622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool) { 10632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); 10722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1075c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pQueryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, pAllocator); 10762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10812faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks *pAllocator) { 10822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 10862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 10872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 10902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1093e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, pAllocator); 10942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyQueryPool(device, queryPool, pAllocator); 10962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, 10992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags) { 11002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 11052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 11102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); 11112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 11122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11142faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, 11152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) { 11162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer); 11252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1128c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, pAllocator); 11292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 11322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11342faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator) { 11352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 11392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 11432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1146e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, pAllocator); 11472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyBuffer(device, buffer, pAllocator); 11492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, 11522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkBufferView *pView) { 11532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 11582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 11592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView); 11652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1168c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, pAllocator); 11692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 11722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11742faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks *pAllocator) { 11752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, bufferView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, false); 11792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 11832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1186e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, bufferView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, pAllocator); 11872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyBufferView(device, bufferView, pAllocator); 11892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11912faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, 11922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkImage *pImage) { 11932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 11972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 12002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage); 12022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1205c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, pAllocator); 12062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 12092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12112faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) { 12122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 12162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 12172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1223e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, pAllocator); 12242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyImage(device, image, pAllocator); 12262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12282faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, 12292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSubresourceLayout *pLayout) { 12302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 12342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 12352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); 12402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12422faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, 12432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkImageView *pView) { 12442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 12482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 12492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 12502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 12542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView); 12562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1259c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, pAllocator); 12602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 12632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12652faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks *pAllocator) { 12662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 12702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, imageView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, false); 12712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1277e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, imageView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, pAllocator); 12782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyImageView(device, imageView, pAllocator); 12802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, 12832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkShaderModule *pShaderModule) { 12842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 12882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 12912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 12932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule); 12942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1297c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pShaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, pAllocator); 12982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13032faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, 13042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 13052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 13092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, shaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, false); 13102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 13132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1316e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, shaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, pAllocator); 13172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyShaderModule(device, shaderModule, pAllocator); 13192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13212faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo, 13222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineCache *pPipelineCache) { 13232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 13272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache); 13332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1336c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pPipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, pAllocator); 13372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13422faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, 13432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 13442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 13482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 13492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 13522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1355e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, pAllocator); 13562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipelineCache(device, pipelineCache, pAllocator); 13582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13602faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t *pDataSize, 13612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski void *pData) { 13622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 13662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 13672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData); 13732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13762faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, 13772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkPipelineCache *pSrcCaches) { 13782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 13822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, dstCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 13832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSrcCaches) { 13842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < srcCacheCount; ++idx0) { 13852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 13862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(device, pSrcCaches[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 13872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); 13952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks *pAllocator) { 13992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 14032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, false); 14042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1410e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 14112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipeline(device, pipeline, pAllocator); 14132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14152faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, 14162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout) { 14172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 14212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 14222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pSetLayouts) { 14232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->setLayoutCount; ++idx0) { 14242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->pSetLayouts[idx0], 14252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, false); 14262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 14322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 14342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout); 14352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1438c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pPipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, pAllocator); 14392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 14422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14442faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, 14452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 14462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 14502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 14512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1457e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, pipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, pAllocator); 14582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout, pAllocator); 14602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, 14632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) { 14642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 14682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 14712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler); 14732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1476c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pSampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, pAllocator); 14772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 14802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks *pAllocator) { 14832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 14872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, sampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, false); 14882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1494e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, sampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, pAllocator); 14952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySampler(device, sampler, pAllocator); 14972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14992faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, 15002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 15012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorSetLayout *pSetLayout) { 15022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 15062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 15072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pBindings) { 15082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->bindingCount; ++idx0) { 15092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pBindings[idx0].pImmutableSamplers) { 15102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pCreateInfo->pBindings[idx0].descriptorCount; ++idx1) { 15112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 15122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(device, pCreateInfo->pBindings[idx0].pImmutableSamplers[idx1], 15132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, false); 15142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 15222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 15242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout); 15252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1528c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, pAllocator); 15292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 15322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15342faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, 15352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 15362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, descriptorSetLayout, 15402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, false); 15412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 15422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 15452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1548e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, descriptorSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, pAllocator); 15492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator); 15512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15532faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo, 15542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pDescriptorPool) { 15552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 15592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 15622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 15642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool); 15652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1568c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pDescriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, pAllocator); 15692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 15722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15742faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 15752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorPoolResetFlags flags) { 15762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false); 15802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 15812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 15842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags); 15862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 15872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15892faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, 15902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, 15912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCopyDescriptorSet *pDescriptorCopies) { 15922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 15962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies) { 15972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < descriptorCopyCount; ++idx0) { 15982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies[idx0].dstSet) { 15992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorCopies[idx0].dstSet, 16002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 16012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies[idx0].srcSet) { 16032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorCopies[idx0].srcSet, 16042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 16052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites) { 16092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < descriptorWriteCount; ++idx1) { 16102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].dstSet) { 16112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorWrites[idx1].dstSet, 16122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 16132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) || 16152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) || 16162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) || 16172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)) { 16182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < pDescriptorWrites[idx1].descriptorCount; ++idx2) { 16192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].pBufferInfo[idx2].buffer) { 16202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorWrites[idx1].pBufferInfo[idx2].buffer, 16212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 16222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER) || 16262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) || 16272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT) || 16282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) || 16292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE)) { 16302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx3 = 0; idx3 < pDescriptorWrites[idx1].descriptorCount; ++idx3) { 16312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].pImageInfo[idx3].imageView) { 16322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorWrites[idx1].pImageInfo[idx3].imageView, 16332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, false); 16342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].pImageInfo[idx3].sampler) { 16362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorWrites[idx1].pImageInfo[idx3].sampler, 16372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, false); 16382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) || 16422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)) { 16432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx4 = 0; idx4 < pDescriptorWrites[idx1].descriptorCount; ++idx4) { 16442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pDescriptorWrites[idx1].pTexelBufferView[idx4], 16452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, true); 16462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 16532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 16552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); 16562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16582faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, 16592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer) { 16602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 16642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 16652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pAttachments) { 16662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->attachmentCount; ++idx0) { 16672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->pAttachments[idx0], 16682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, false); 16692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->renderPass) { 16722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->renderPass, 16732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 16742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 16792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 16812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); 16822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1685c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pFramebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, pAllocator); 16862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 16892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16912faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks *pAllocator) { 16922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 16962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, framebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, false); 16972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 17002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1703e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, framebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, pAllocator); 17042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyFramebuffer(device, framebuffer, pAllocator); 17062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, 17092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) { 17102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 17142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 17192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); 17202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1723c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pRenderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, pAllocator); 17242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17292faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) { 17302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 17342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 17352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 17382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1741e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, pAllocator); 17422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyRenderPass(device, renderPass, pAllocator); 17442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17462faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D *pGranularity) { 17472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 17512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 17522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 17552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity); 17572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17592faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, 17602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool) { 17612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 17652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 17702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); 17712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 1774c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pCommandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, pAllocator); 17752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17802faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) { 17812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false); 17852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 17862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetCommandPool(device, commandPool, flags); 17912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(VkCommandBuffer command_buffer, const VkCommandBufferBeginInfo *begin_info) { 17952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(command_buffer), layer_data_map); 17962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(command_buffer, command_buffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (begin_info) { 18022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = 18032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT][reinterpret_cast<const uint64_t>(command_buffer)]; 18042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((begin_info->pInheritanceInfo) && (pNode->status & OBJSTATUS_COMMAND_BUFFER_SECONDARY)) { 18052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(command_buffer, begin_info->pInheritanceInfo->framebuffer, 18062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, true); 18072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(command_buffer, begin_info->pInheritanceInfo->renderPass, 18082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, true); 18092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 18142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, command_buffer)->BeginCommandBuffer(command_buffer, begin_info); 18162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 18172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(VkCommandBuffer commandBuffer) { 18202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 18282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer); 18302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 18312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) { 18342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 18422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags); 18442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 18452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18472faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 18482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipeline pipeline) { 18492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, false); 18552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); 18602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, 18632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkViewport *pViewports) { 18642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); 18742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18762faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, 18772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkRect2D *pScissors) { 18782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); 18882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18902faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) { 18912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 18942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 18952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 18962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth); 19012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19032faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, 19042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski float depthBiasSlopeFactor) { 19052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 19152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); 19162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) { 19192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants); 19292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19312faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) { 19322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); 19422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19442faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, 19452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t compareMask) { 19462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); 19562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19582faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) { 19592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); 19692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19712faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) { 19722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference); 19822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19842faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 19852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, 19862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDescriptorSet *pDescriptorSets, uint32_t dynamicOffsetCount, 19872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const uint32_t *pDynamicOffsets) { 19882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 19912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 19922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 19932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, layout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 19942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorSets) { 19952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < descriptorSetCount; ++idx0) { 19962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pDescriptorSets[idx0], 19972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 19982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, 20062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dynamicOffsetCount, pDynamicOffsets); 20072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20092faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 20102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkIndexType indexType) { 20112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 20152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); 20222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20242faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, 20252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkBuffer *pBuffers, const VkDeviceSize *pOffsets) { 20262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBuffers) { 20322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bindingCount; ++idx0) { 20332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(commandBuffer, pBuffers[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 20352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); 20432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20452faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, 20462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t firstVertex, uint32_t firstInstance) { 20472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); 20582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20602faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, 20612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) { 20622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); 20732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20752faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, 20762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t stride) { 20772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 20812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride); 20882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20902faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 20912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t drawCount, uint32_t stride) { 20922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 20952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 20962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 20972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 20982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride); 21042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21062faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) { 21072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z); 21172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) { 21202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 21242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset); 21312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, 21342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t regionCount, const VkBufferCopy *pRegions) { 21352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 21412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 21422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); 21482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21502faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 21512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 21522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageCopy *pRegions) { 21532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 21592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 21602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 21662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21682faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 21692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 21702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageBlit *pRegions, VkFilter filter) { 21712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 21772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 21782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); 21842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21862faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, 21872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageLayout dstImageLayout, uint32_t regionCount, 21882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkBufferImageCopy *pRegions) { 21892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 21922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 21932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 21942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 21952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 21962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); 22022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22042faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 22052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions) { 22062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 22122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 22132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); 22192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22212faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 22222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize dataSize, const uint32_t *pData) { 22232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 22292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); 22342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22362faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 22372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize size, uint32_t data) { 22382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 22442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); 22492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 22522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearColorValue *pColor, uint32_t rangeCount, 22532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 22542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 22602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); 22662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22682faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 22692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearDepthStencilValue *pDepthStencil, uint32_t rangeCount, 22702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 22712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 22772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); 22832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22852faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, 22862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearAttachment *pAttachments, uint32_t rectCount, 22872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearRect *pRects) { 22882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 22912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 22922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 22932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); 22992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23012faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 23022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 23032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageResolve *pRegions) { 23042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 23072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 23092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 23102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 23112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 23162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 23172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 23202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 23232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 23252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 23262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask); 23312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 23342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 23372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 23392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 23402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask); 23452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23472faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, 23482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, 23492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 23502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 23512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 23522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 23552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 23572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers) { 23582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bufferMemoryBarrierCount; ++idx0) { 23592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers[idx0].buffer) { 23602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pBufferMemoryBarriers[idx0].buffer, 23612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 23622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pEvents) { 23662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < eventCount; ++idx1) { 23672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(commandBuffer, pEvents[idx1], VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false); 23692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers) { 23722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < imageMemoryBarrierCount; ++idx2) { 23732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers[idx2].image) { 23742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pImageMemoryBarriers[idx2].image, 23752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 23762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 23842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, 23852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 23862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23882faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, 23892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, 23902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 23912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 23922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 23932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 23962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 23972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 23982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers) { 23992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bufferMemoryBarrierCount; ++idx0) { 24002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers[idx0].buffer) { 24012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pBufferMemoryBarriers[idx0].buffer, 24022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 24032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers) { 24072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < imageMemoryBarrierCount; ++idx1) { 24082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers[idx1].image) { 24092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pImageMemoryBarriers[idx1].image, 24102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 24112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 24192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, 24202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 24212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24232faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, 24242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueryControlFlags flags) { 24252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 24282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 24292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 24302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 24312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, query, flags); 24362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query) { 24392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 24422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 24432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 24442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 24452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, query); 24502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24522faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 24532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queryCount) { 24542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 24572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 24582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 24592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 24602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); 24652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24672faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, 24682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueryPool queryPool, uint32_t query) { 24692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 24722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 24732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 24742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 24752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); 24802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 24832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, 24842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize stride, VkQueryResultFlags flags) { 24852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 24882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 24892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 24902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 24912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false); 24922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 24972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); 24982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25002faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, 25012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t offset, uint32_t size, const void *pValues) { 25022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 25062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, layout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 25082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 25132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); 25142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25162faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin, 25172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSubpassContents contents) { 25182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 25222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pRenderPassBegin) { 25242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pRenderPassBegin->framebuffer, 25252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, false); 25262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(commandBuffer, pRenderPassBegin->renderPass, 25272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 25282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); 25342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25362faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) { 25372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 25412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents); 25472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25492faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) { 25502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 25542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer); 25602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, 25632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCommandBuffer *pCommandBuffers) { 25642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 25682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCommandBuffers) { 25702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < commandBufferCount; ++idx0) { 25712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(commandBuffer, pCommandBuffers[idx0], 25722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 25732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); 25802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator) { 25832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 25872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(instance, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 25882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2594e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(instance, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 25952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->DestroySurfaceKHR(instance, surface, pAllocator); 25972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25992faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, 26002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceKHR surface, VkBool32 *pSupported) { 26012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 26052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 26062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported); 26132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26162faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 26172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { 26182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 26222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 26232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities); 26302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 26342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pSurfaceFormatCount, 26352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceFormatKHR *pSurfaceFormats) { 26362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 26402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 26412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); 26482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 26522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pPresentModeCount, 26532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPresentModeKHR *pPresentModes) { 26542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 26582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 26592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes); 26662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26692faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, 26702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) { 26712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 26752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 26762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfo->oldSwapchain, 26772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, true); 26782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 26792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device_data->physical_device, pCreateInfo->surface, 26802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 26872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); 26882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2691c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, *pSwapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 26922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26972faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, 26982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { 26992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 27032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, true); 27042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, true); 27052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, swapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, false); 27062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 27112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); 27122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27152faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) { 27162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo) { 27202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo->pSwapchains) { 27212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pPresentInfo->swapchainCount; ++idx0) { 27222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(queue, pPresentInfo->pSwapchains[idx0], 27232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, false); 27242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo->pWaitSemaphores) { 27272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pPresentInfo->waitSemaphoreCount; ++idx1) { 27282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(queue, pPresentInfo->pWaitSemaphores[idx1], 27292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false); 27302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false); 27342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueuePresentKHR(queue, pPresentInfo); 27392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 27432faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, 27442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 27452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 27492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 27542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 27552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2758c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 27592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, 27652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex) { 27662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 27702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 27712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 27742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 27762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex); 27772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 27802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 27822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, 27832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 27842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 27882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 27932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 27942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2797c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 27982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28032faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, xcb_connection_t *connection, 28052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski xcb_visualid_t visual_id) { 28062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 28102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 28112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 28142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 28162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id); 28172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 28202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 28222faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, 28232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 28242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 28282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 28312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 28332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 28342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2837c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 28382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28432faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, Display *dpy, 28452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VisualID visualID) { 28462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 28502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 28512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 28542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 28562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID); 28572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 28602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 28622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo, 28632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 28642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 28682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 28712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 28732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 28742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2877c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 28782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28832faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, MirConnection *connection) { 28852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 28892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 28902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 28932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 28952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceMirPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection); 28962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 28992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 29012faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, 29022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 29032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 29042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 29072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 29092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 29102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 29122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 29132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2916c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 29172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29222faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, 29232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, 29242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski struct wl_display *display) { 29252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 29262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 29292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 29302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 29322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 29332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 29352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display); 29362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 29392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 29412faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, 29422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 29432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 29442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 29472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 29492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 29502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 29522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 29532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 2956c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 29572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 29622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 296319ab93c7fb4fb9ae62679852783a97f599d1b367Mark YoungVKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, 296419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkSwapchainCreateInfoKHR *pCreateInfos, 296519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { 296619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young bool skip_call = false; 296719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young uint32_t i = 0; 296819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young { 296919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young std::lock_guard<std::mutex> lock(global_lock); 297019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 297119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (NULL != pCreateInfos) { 297219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young for (i = 0; i < swapchainCount; i++) { 297319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[i].oldSwapchain, 297419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, true); 297519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 297619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young skip_call |= ValidateNonDispatchableObject(device_data->physical_device, pCreateInfos[i].surface, 297719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 297819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 297919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 298019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 298119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (skip_call) { 298219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return VK_ERROR_VALIDATION_FAILED_EXT; 298319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 298419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VkResult result = 298519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young get_dispatch_table(ot_device_table_map, device)->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); 298619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young { 298719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young std::lock_guard<std::mutex> lock(global_lock); 298819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (result == VK_SUCCESS) { 298919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young for (i = 0; i < swapchainCount; i++) { 2990c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, pSwapchains[i], VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 299119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 299219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 299319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 299419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return result; 299519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young} 299619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 29972faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(VkInstance instance, 29982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 29992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 30002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT *pCallback) { 30012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 30022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = pInstanceTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback); 30032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (VK_SUCCESS == result) { 30042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 30052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski result = layer_create_msg_callback(instance_data->report_data, false, pCreateInfo, pAllocator, pCallback); 3006c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(instance, *pCallback, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, pAllocator); 30072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 30082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 30092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30112faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 30122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 30132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 30142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 30152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 30162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_destroy_msg_callback(instance_data->report_data, msgCallback, pAllocator); 3017e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(instance, msgCallback, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, pAllocator); 30182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30202faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 30212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 30222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 30232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 30242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 30252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}}; 30282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic const VkLayerProperties globalLayerProps = {"VK_LAYER_LUNARG_object_tracker", 30302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_LAYER_API_VERSION, // specVersion 30312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1, // implementationVersion 30322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "LunarG Validation Layer"}; 30332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30342faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { 30352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetLayerProperties(1, &globalLayerProps, pCount, pProperties); 30362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 30392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 30402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetLayerProperties(1, &globalLayerProps, pCount, pProperties); 30412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30432faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 30442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 30452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pLayerName && !strcmp(pLayerName, globalLayerProps.layerName)) 30462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties); 30472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_LAYER_NOT_PRESENT; 30492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, 30522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pCount, VkExtensionProperties *pProperties) { 30532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pLayerName && !strcmp(pLayerName, globalLayerProps.layerName)) 30542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetExtensionProperties(0, nullptr, pCount, pProperties); 30552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice); 30572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(ot_instance_table_map, physicalDevice); 30582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return pTable->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pCount, pProperties); 30592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptMsgCallbackGetProcAddrCommand(const char *name, VkInstance instance) { 30622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 30632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return debug_report_get_instance_proc_addr(instance_data->report_data, name); 30642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstance instance) { 30672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(ot_instance_table_map, instance); 30682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instanceExtMap.size() == 0 || !instanceExtMap[pTable].wsi_enabled) 30692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 30702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkDestroySurfaceKHR", name)) 30722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(DestroySurfaceKHR); 30732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) 30742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceSupportKHR); 30752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) 30762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilitiesKHR); 30772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) 30782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR); 30792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) 30802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR); 30812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 30832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instanceExtMap[pTable].win32_enabled == true) && !strcmp("vkCreateWin32SurfaceKHR", name)) 30842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWin32SurfaceKHR); 30852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instanceExtMap[pTable].win32_enabled == true) && !strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) 30862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceWin32PresentationSupportKHR); 30872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 30882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 3089564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xcb_enabled == true) && !strcmp("vkCreateXcbSurfaceKHR", name)) 30902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXcbSurfaceKHR); 3091564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xcb_enabled == true) && !strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) 30922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXcbPresentationSupportKHR); 30932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 30942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 3095564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xlib_enabled == true) && !strcmp("vkCreateXlibSurfaceKHR", name)) 30962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXlibSurfaceKHR); 3097564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xlib_enabled == true) && !strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) 30982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXlibPresentationSupportKHR); 30992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 31002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 3101564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].mir_enabled == true) && !strcmp("vkCreateMirSurfaceKHR", name)) 31022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateMirSurfaceKHR); 3103564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].mir_enabled == true) && !strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) 31042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMirPresentationSupportKHR); 31052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 31062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 3107564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].wayland_enabled == true) && !strcmp("vkCreateWaylandSurfaceKHR", name)) 31082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWaylandSurfaceKHR); 3109564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].wayland_enabled == true) && !strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) 31102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceWaylandPresentationSupportKHR); 31112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 31122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 3113564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].android_enabled == true) && !strcmp("vkCreateAndroidSurfaceKHR", name)) 31142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateAndroidSurfaceKHR); 31152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 31162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 31182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CheckDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { 31212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 31222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->wsi_enabled = false; 312319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = false; 312419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->objtrack_extensions_enabled = false; 31252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 31272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { 31282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->wsi_enabled = true; 31292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 313019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) { 313119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = true; 313219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 31332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], "OBJTRACK_EXTENSIONS") == 0) { 31342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->objtrack_extensions_enabled = true; 31352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CheckInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { 31402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(ot_instance_table_map, instance); 31412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp] = {}; 31442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 31462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { 31472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].wsi_enabled = true; 31482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 31502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { 31512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].xlib_enabled = true; 31522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 31552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) { 31562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].xcb_enabled = true; 31572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 31602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) { 31612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].wayland_enabled = true; 31622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 31652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) { 31662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].mir_enabled = true; 31672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 31702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) { 31712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].android_enabled = true; 31722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 31752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) { 31762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].win32_enabled = true; 31772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, 31832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { 31842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 31852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *phy_dev_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 31862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 31872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(chain_info->u.pLayerInfo); 31892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 31902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; 31912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(phy_dev_data->instance, "vkCreateDevice"); 31922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (fpCreateDevice == NULL) { 31932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_INITIALIZATION_FAILED; 31942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Advance the link info for the next element on the chain 31972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 31982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); 32002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result != VK_SUCCESS) { 32012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); 32052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->report_data = layer_debug_report_create_device(phy_dev_data->report_data, *pDevice); 32062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Add link back to physDev 32082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->physical_device = physicalDevice; 32092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski initDeviceTable(*pDevice, fpGetDeviceProcAddr, ot_device_table_map); 32112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CheckDeviceRegisterExtensions(pCreateInfo, *pDevice); 3213c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateDispatchableObject(*pDevice, *pDevice, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, pAllocator); 32142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, 32192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pQueueFamilyPropertyCount, 32202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueueFamilyProperties *pQueueFamilyProperties) { 32212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 32222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); 32232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 32242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pQueueFamilyProperties != NULL) { 32252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 32262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++) { 32272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->queue_family_properties.emplace_back(pQueueFamilyProperties[i]); 32282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32322faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, 32332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkInstance *pInstance) { 32342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 32352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(chain_info->u.pLayerInfo); 32372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 32382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); 32392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (fpCreateInstance == NULL) { 32402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_INITIALIZATION_FAILED; 32412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Advance the link info for the next element on the chain 32442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 32452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); 32472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result != VK_SUCCESS) { 32482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map); 32522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->instance = *pInstance; 32532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski initInstanceTable(*pInstance, fpGetInstanceProcAddr, ot_instance_table_map); 32542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, *pInstance); 32552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Look for one or more debug report create info structures, and copy the 32572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // callback(s) for each one found (for use by vkDestroyInstance) 32582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_copy_tmp_callbacks(pCreateInfo->pNext, &instance_data->num_tmp_callbacks, &instance_data->tmp_dbg_create_infos, 32592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski &instance_data->tmp_callbacks); 32602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->report_data = debug_report_create_instance(pInstanceTable, *pInstance, pCreateInfo->enabledExtensionCount, 32622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pCreateInfo->ppEnabledExtensionNames); 32632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski InitObjectTracker(instance_data, pAllocator); 32652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CheckInstanceRegisterExtensions(pCreateInfo, *pInstance); 32662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3267c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateDispatchableObject(*pInstance, *pInstance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, pAllocator); 32682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32722faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, 32732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPhysicalDevice *pPhysicalDevices) { 32742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 32752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 32762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 32772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 32792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 32802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, instance) 32822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); 32832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 32842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 32852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPhysicalDevices) { 32862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++) { 3287c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateDispatchableObject(instance, pPhysicalDevices[i], VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 32882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32952faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) { 32962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 32972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 32982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue); 33012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 33032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CreateQueue(device, *pQueue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT); 33052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AddQueueInfo(device, queueFamilyIndex, *pQueue); 33062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator) { 33092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 33112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->FreeMemory(device, memory, pAllocator); 33142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 3316e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); 33172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, 33202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkMemoryMapFlags flags, void **ppData) { 33212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 33242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call == VK_TRUE) { 33262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 33272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->MapMemory(device, memory, offset, size, flags, ppData); 33292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33322faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL UnmapMemory(VkDevice device, VkDeviceMemory memory) { 33332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 33362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call == VK_TRUE) { 33382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 33392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->UnmapMemory(device, memory); 33422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33432faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo *pBindInfo, 33442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkFence fence) { 33452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateQueueFlags(queue, "QueueBindSparse"); 33472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < bindInfoCount; i++) { 33492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].bufferBindCount; j++) 33502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(queue, pBindInfo[i].pBufferBinds[j].buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, 33512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski false); 33522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].imageOpaqueBindCount; j++) 33532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(queue, pBindInfo[i].pImageOpaqueBinds[j].image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, 33542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski false); 33552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].imageBindCount; j++) 33562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(queue, pBindInfo[i].pImageBinds[j].image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 33572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence); 33612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, 33652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkCommandBuffer *pCommandBuffers) { 33662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 33692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 33702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(device, pAllocateInfo->commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false); 33712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 33742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 33752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 33782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); 33792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 33812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) { 33822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AllocateCommandBuffer(device, pAllocateInfo->commandPool, pCommandBuffers[i], 33832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, pAllocateInfo->level); 33842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33902faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *pAllocateInfo, 33912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorSet *pDescriptorSets) { 33922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 33952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pAllocateInfo->descriptorPool, 33962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false); 33972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++) { 33982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pAllocateInfo->pSetLayouts[i], 33992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, false); 34002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 34032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 34042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 34072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets); 34082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (VK_SUCCESS == result) { 34102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 34112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++) { 34122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AllocateDescriptorSet(device, pAllocateInfo->descriptorPool, pDescriptorSets[i], 34132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT); 34142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 34192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34212faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, 34222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCommandBuffer *pCommandBuffers) { 34232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 34242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 34252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateNonDispatchableObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false); 34262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 34272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < commandBufferCount; i++) { 34282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateCommandBuffer(device, commandPool, pCommandBuffers[i]); 34292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 343170b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski for (uint32_t i = 0; i < commandBufferCount; i++) { 3432e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyDispatchableObject(device, pCommandBuffers[i], VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 343370b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski } 343470b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski 34352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!skip_call) { 34372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 34382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); 34392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34412faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *pAllocator) { 34422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 34442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A swapchain's images are implicitly deleted when the swapchain is deleted. 34452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this swapchain's images from our map of such images. 34462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unordered_map<uint64_t, OBJTRACK_NODE *>::iterator itr = device_data->swapchainImageMap.begin(); 34472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->swapchainImageMap.end()) { 34482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 34492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(swapchain)) { 34502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete pNode; 34512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto delete_item = itr++; 34522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->swapchainImageMap.erase(delete_item); 34532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 34542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ++itr; 34552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3457e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, swapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 34582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySwapchainKHR(device, swapchain, pAllocator); 34612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34632faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, 34642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDescriptorSet *pDescriptorSets) { 34652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 34662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 34672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 34682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false); 34692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 34702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < descriptorSetCount; i++) { 34712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDescriptorSet(device, descriptorPool, pDescriptorSets[i]); 34722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 347470b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski for (uint32_t i = 0; i < descriptorSetCount; i++) { 3475e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, pDescriptorSets[i], VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 347670b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski } 347770b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski 34782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!skip_call) { 34802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski result = get_dispatch_table(ot_device_table_map, device) 34812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); 34822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 34842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34862faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 34872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 34882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 34892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 34912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 34922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false); 34932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 34952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 34962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A DescriptorPool's descriptor sets are implicitly deleted when the pool is deleted. 34982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this pool's descriptor sets from our descriptorSet map. 34992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unordered_map<uint64_t, OBJTRACK_NODE *>::iterator itr = 35012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].begin(); 35022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].end()) { 35032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 35042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto del_itr = itr++; 35052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(descriptorPool)) { 35062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DestroyNonDispatchableObject(device, (VkDescriptorSet)((*del_itr).first), 3507e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 35082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3510e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, pAllocator); 35112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool, pAllocator); 35132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35152faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks *pAllocator) { 35162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 35172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 35182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 35192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 35202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false); 35212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 35232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 35242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A CommandPool's command buffers are implicitly deleted when the pool is deleted. 35272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this pool's cmdBuffers from our cmd buffer map. 35282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto itr = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].begin(); 35292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto del_itr = itr; 35302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].end()) { 35312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 35322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski del_itr = itr++; 35332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(commandPool)) { 35342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateCommandBuffer(device, commandPool, reinterpret_cast<VkCommandBuffer>((*del_itr).first)); 35352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DestroyDispatchableObject(device, reinterpret_cast<VkCommandBuffer>((*del_itr).first), 3536e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 35372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3539e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes DestroyNonDispatchableObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, pAllocator); 35402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyCommandPool(device, commandPool, pAllocator); 35422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35442faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount, 35452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage *pSwapchainImages) { 35462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 35472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 35482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 35492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 35512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 35522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 35542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); 35552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSwapchainImages != NULL) { 35562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pSwapchainImageCount; i++) { 35582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CreateSwapchainImageObject(device, pSwapchainImages[i], swapchain); 35592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 35632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35652faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 35662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkGraphicsPipelineCreateInfo *pCreateInfos, 35672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 35682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 35692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 35702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 35712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos) { 35722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { 35732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].basePipelineHandle) { 35742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].basePipelineHandle, 35752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, true); 35762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].layout) { 35782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].layout, 35792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 35802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].pStages) { 35822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pCreateInfos[idx0].stageCount; ++idx1) { 35832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].pStages[idx1].module) { 35842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].pStages[idx1].module, 35852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, false); 35862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].renderPass) { 35902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].renderPass, 35912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 35922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pipelineCache) { 35962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 35972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 36002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 36012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 36032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 36042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 36052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 36062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < createInfoCount; ++idx2) { 3607c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, pPipelines[idx2], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 36082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 36112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 36122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 36132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 36142faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 36152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkComputePipelineCreateInfo *pCreateInfos, 36162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 36172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 36182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 36192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDispatchableObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 36202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos) { 36212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { 36222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].basePipelineHandle) { 36232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].basePipelineHandle, 36242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, true); 36252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].layout) { 36272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].layout, 36282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 36292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].stage.module) { 36312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pCreateInfos[idx0].stage.module, 36322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, false); 36332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pipelineCache) { 36372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateNonDispatchableObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false); 36382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 36402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 36412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 36422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 36442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 36452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 36462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 36472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < createInfoCount; ++idx1) { 3648c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes CreateNonDispatchableObject(device, pPipelines[idx1], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 36492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 36522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 36532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 36542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 36552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) { 36562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!name || name[0] != 'v' || name[1] != 'k') 36572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 36582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 36592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski name += 2; 36602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceProcAddr")) 36612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceProcAddr; 36622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDevice")) 36632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDevice; 36642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceQueue")) 36652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceQueue; 36662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueSubmit")) 36672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueSubmit; 36682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueWaitIdle")) 36692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueWaitIdle; 36702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DeviceWaitIdle")) 36712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DeviceWaitIdle; 36722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateMemory")) 36732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateMemory; 36742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeMemory")) 36752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeMemory; 36762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "MapMemory")) 36772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)MapMemory; 36782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "UnmapMemory")) 36792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)UnmapMemory; 36802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FlushMappedMemoryRanges")) 36812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FlushMappedMemoryRanges; 36822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "InvalidateMappedMemoryRanges")) 36832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)InvalidateMappedMemoryRanges; 36842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceMemoryCommitment")) 36852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceMemoryCommitment; 36862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BindBufferMemory")) 36872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BindBufferMemory; 36882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BindImageMemory")) 36892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BindImageMemory; 36902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetBufferMemoryRequirements")) 36912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetBufferMemoryRequirements; 36922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageMemoryRequirements")) 36932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageMemoryRequirements; 36942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageSparseMemoryRequirements")) 36952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageSparseMemoryRequirements; 36962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueBindSparse")) 36972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueBindSparse; 36982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateFence")) 36992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateFence; 37002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyFence")) 37012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyFence; 37022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetFences")) 37032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetFences; 37042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetFenceStatus")) 37052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetFenceStatus; 37062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "WaitForFences")) 37072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)WaitForFences; 37082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateSemaphore")) 37092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateSemaphore; 37102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroySemaphore")) 37112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroySemaphore; 37122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateEvent")) 37132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateEvent; 37142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyEvent")) 37152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyEvent; 37162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetEventStatus")) 37172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetEventStatus; 37182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "SetEvent")) 37192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)SetEvent; 37202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetEvent")) 37212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetEvent; 37222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateQueryPool")) 37232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateQueryPool; 37242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyQueryPool")) 37252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyQueryPool; 37262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetQueryPoolResults")) 37272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetQueryPoolResults; 37282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateBuffer")) 37292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateBuffer; 37302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyBuffer")) 37312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyBuffer; 37322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateBufferView")) 37332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateBufferView; 37342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyBufferView")) 37352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyBufferView; 37362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateImage")) 37372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateImage; 37382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyImage")) 37392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyImage; 37402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageSubresourceLayout")) 37412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageSubresourceLayout; 37422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateImageView")) 37432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateImageView; 37442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyImageView")) 37452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyImageView; 37462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateShaderModule")) 37472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateShaderModule; 37482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyShaderModule")) 37492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyShaderModule; 37502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreatePipelineCache")) 37512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreatePipelineCache; 37522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipelineCache")) 37532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipelineCache; 37542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPipelineCacheData")) 37552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPipelineCacheData; 37562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "MergePipelineCaches")) 37572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)MergePipelineCaches; 37582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateGraphicsPipelines")) 37592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateGraphicsPipelines; 37602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateComputePipelines")) 37612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateComputePipelines; 37622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipeline")) 37632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipeline; 37642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreatePipelineLayout")) 37652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreatePipelineLayout; 37662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipelineLayout")) 37672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipelineLayout; 37682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateSampler")) 37692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateSampler; 37702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroySampler")) 37712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroySampler; 37722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDescriptorSetLayout")) 37732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDescriptorSetLayout; 37742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDescriptorSetLayout")) 37752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDescriptorSetLayout; 37762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDescriptorPool")) 37772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDescriptorPool; 37782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDescriptorPool")) 37792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDescriptorPool; 37802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetDescriptorPool")) 37812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetDescriptorPool; 37822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateDescriptorSets")) 37832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateDescriptorSets; 37842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeDescriptorSets")) 37852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeDescriptorSets; 37862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "UpdateDescriptorSets")) 37872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)UpdateDescriptorSets; 37882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateFramebuffer")) 37892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateFramebuffer; 37902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyFramebuffer")) 37912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyFramebuffer; 37922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateRenderPass")) 37932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateRenderPass; 37942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyRenderPass")) 37952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyRenderPass; 37962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetRenderAreaGranularity")) 37972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetRenderAreaGranularity; 37982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateCommandPool")) 37992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateCommandPool; 38002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyCommandPool")) 38012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyCommandPool; 38022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetCommandPool")) 38032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetCommandPool; 38042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateCommandBuffers")) 38052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateCommandBuffers; 38062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeCommandBuffers")) 38072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeCommandBuffers; 38082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BeginCommandBuffer")) 38092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BeginCommandBuffer; 38102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EndCommandBuffer")) 38112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EndCommandBuffer; 38122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetCommandBuffer")) 38132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetCommandBuffer; 38142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindPipeline")) 38152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindPipeline; 38162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetViewport")) 38172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetViewport; 38182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetScissor")) 38192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetScissor; 38202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetLineWidth")) 38212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetLineWidth; 38222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetDepthBias")) 38232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetDepthBias; 38242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetBlendConstants")) 38252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetBlendConstants; 38262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetDepthBounds")) 38272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetDepthBounds; 38282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilCompareMask")) 38292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilCompareMask; 38302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilWriteMask")) 38312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilWriteMask; 38322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilReference")) 38332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilReference; 38342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindDescriptorSets")) 38352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindDescriptorSets; 38362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindIndexBuffer")) 38372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindIndexBuffer; 38382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindVertexBuffers")) 38392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindVertexBuffers; 38402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDraw")) 38412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDraw; 38422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndexed")) 38432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndexed; 38442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndirect")) 38452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndirect; 38462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndexedIndirect")) 38472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndexedIndirect; 38482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDispatch")) 38492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDispatch; 38502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDispatchIndirect")) 38512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDispatchIndirect; 38522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyBuffer")) 38532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyBuffer; 38542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyImage")) 38552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyImage; 38562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBlitImage")) 38572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBlitImage; 38582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyBufferToImage")) 38592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyBufferToImage; 38602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyImageToBuffer")) 38612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyImageToBuffer; 38622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdUpdateBuffer")) 38632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdUpdateBuffer; 38642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdFillBuffer")) 38652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdFillBuffer; 38662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearColorImage")) 38672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearColorImage; 38682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearDepthStencilImage")) 38692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearDepthStencilImage; 38702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearAttachments")) 38712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearAttachments; 38722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResolveImage")) 38732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResolveImage; 38742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetEvent")) 38752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetEvent; 38762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResetEvent")) 38772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResetEvent; 38782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdWaitEvents")) 38792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdWaitEvents; 38802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdPipelineBarrier")) 38812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdPipelineBarrier; 38822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBeginQuery")) 38832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBeginQuery; 38842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdEndQuery")) 38852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdEndQuery; 38862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResetQueryPool")) 38872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResetQueryPool; 38882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdWriteTimestamp")) 38892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdWriteTimestamp; 38902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyQueryPoolResults")) 38912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyQueryPoolResults; 38922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdPushConstants")) 38932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdPushConstants; 38942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBeginRenderPass")) 38952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBeginRenderPass; 38962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdNextSubpass")) 38972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdNextSubpass; 38982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdEndRenderPass")) 38992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdEndRenderPass; 39002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdExecuteCommands")) 39012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdExecuteCommands; 39022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 39042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 39052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptCoreInstanceCommand(const char *name) { 39062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!name || name[0] != 'v' || name[1] != 'k') 39072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 39082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski name += 2; 39102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateInstance")) 39112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateInstance; 39122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyInstance")) 39132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyInstance; 39142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumeratePhysicalDevices")) 39152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumeratePhysicalDevices; 39162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceFeatures")) 39172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceFeatures; 39182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceFormatProperties")) 39192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceFormatProperties; 39202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties")) 39212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceImageFormatProperties; 39222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceProperties")) 39232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceProperties; 39242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) 39252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceQueueFamilyProperties; 39262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceMemoryProperties")) 39272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceMemoryProperties; 39282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetInstanceProcAddr")) 39292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetInstanceProcAddr; 39302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDevice")) 39312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDevice; 39322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateInstanceExtensionProperties")) 39332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateInstanceExtensionProperties; 39342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateInstanceLayerProperties")) 39352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateInstanceLayerProperties; 39362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateDeviceLayerProperties")) 39372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateDeviceLayerProperties; 39382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties")) 39392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceSparseImageFormatProperties; 39402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 39422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 39432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkDevice device) { 39452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (device) { 39462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 394719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 394819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_enabled) { 394919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkCreateSwapchainKHR", name)) 395019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR); 395119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkDestroySwapchainKHR", name)) 395219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(DestroySwapchainKHR); 395319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkGetSwapchainImagesKHR", name)) 395419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR); 395519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkAcquireNextImageKHR", name)) 395619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImageKHR); 395719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkQueuePresentKHR", name)) 395819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(QueuePresentKHR); 395919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 396019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 396119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_display_swapchain_enabled) { 396219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkCreateSharedSwapchainsKHR", name)) { 396319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(CreateSharedSwapchainsKHR); 396419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 396519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 396619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 39672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 39692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 39702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39712faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) { 39722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkVoidFunction addr; 39732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreDeviceCommand(funcName); 39742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 39752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 39762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 39772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device); 39782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, device); 39802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 39812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 39822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 39832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (get_dispatch_table(ot_device_table_map, device)->GetDeviceProcAddr == NULL) { 39842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 39852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 39862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return get_dispatch_table(ot_device_table_map, device)->GetDeviceProcAddr(device, funcName); 39872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 39882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 39892faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) { 39902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkVoidFunction addr; 39912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreInstanceCommand(funcName); 39922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!addr) { 39932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreDeviceCommand(funcName); 39942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 39952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!addr) { 39962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, VkDevice(VK_NULL_HANDLE)); 39972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 39982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 39992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 40002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 40012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(instance); 40022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptMsgCallbackGetProcAddrCommand(funcName, instance); 40042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 40052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 40062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 40072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, instance); 40082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 40092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 40102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 40112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (get_dispatch_table(ot_instance_table_map, instance)->GetInstanceProcAddr == NULL) { 40122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 40132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 40142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return get_dispatch_table(ot_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName); 40152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} // namespace object_tracker 40182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// vk_layer_logging.h expects these to be defined 40202faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(VkInstance instance, 40212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 40222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 40232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT *pMsgCallback) { 40242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback); 40252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40272faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 40282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 40292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_tracker::DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 40302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40322faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 40332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 40342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 40352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_tracker::DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 40362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Loader-layer interface v0, just wrappers since there is only a layer 40392faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 40402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 40412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties); 40422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40442faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount, 40452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 40462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateInstanceLayerProperties(pCount, pProperties); 40472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40492faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 40502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 40512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // The layer command handles VK_NULL_HANDLE just fine internally 40522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice == VK_NULL_HANDLE); 40532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties); 40542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40562faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) { 40572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::GetDeviceProcAddr(dev, funcName); 40582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40602faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { 40612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::GetInstanceProcAddr(instance, funcName); 40622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, 40652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const char *pLayerName, uint32_t *pCount, 40662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 40672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // The layer command handles VK_NULL_HANDLE just fine internally 40682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice == VK_NULL_HANDLE); 40692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties); 4070564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski} 4071