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 454f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz#include "vk_validation_error_messages.h" 464f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz 472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskinamespace object_tracker { 482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void InitObjectTracker(layer_data *my_data, const VkAllocationCallbacks *pAllocator) { 502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_object_tracker"); 522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Add new queue to head of global queue list 552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AddQueueInfo(VkDevice device, uint32_t queue_node_index, VkQueue queue) { 562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queueItem = device_data->queue_info_map.find(queue); 582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queueItem == device_data->queue_info_map.end()) { 592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OT_QUEUE_INFO *p_queue_info = new OT_QUEUE_INFO; 602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (p_queue_info != NULL) { 612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski memset(p_queue_info, 0, sizeof(OT_QUEUE_INFO)); 622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_queue_info->queue = queue; 632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_queue_info->queue_node_index = queue_node_index; 642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->queue_info_map[queue] = p_queue_info; 652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, 672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(queue), __LINE__, OBJTRACK_INTERNAL_ERROR, LayerName, 682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "ERROR: VK_ERROR_OUT_OF_HOST_MEMORY -- could not allocate memory for Queue Information"); 692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Destroy memRef lists and free all memory 742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void DestroyQueueDataStructures(VkDevice device) { 752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto queue_item : device_data->queue_info_map) { 782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete queue_item.second; 792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->queue_info_map.clear(); 812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Destroy the items in the queue map 832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].begin(); 842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (queue != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].end()) { 852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t obj_index = queue->second->object_type; 862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_total_objects > 0); 872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects--; 882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_objects[obj_index] > 0); 892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[obj_index]--; 902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, queue->second->object_type, queue->second->handle, 912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, 922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ_STAT Destroy Queue obj 0x%" PRIxLEAST64 " (%" PRIu64 " total objs remain & %" PRIu64 " Queue objs).", 932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski queue->second->handle, device_data->num_total_objects, device_data->num_objects[obj_index]); 942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete queue->second; 952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski queue = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].erase(queue); 962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Check Queue type flags for selected queue operations 1002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void ValidateQueueFlags(VkQueue queue, const char *function) { 1012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 1022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue_item = device_data->queue_info_map.find(queue); 1032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue_item != device_data->queue_info_map.end()) { 1042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OT_QUEUE_INFO *pQueueInfo = queue_item->second; 1052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pQueueInfo != NULL) { 1062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(device_data->physical_device), layer_data_map); 1072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instance_data->queue_family_properties[pQueueInfo->queue_node_index].queueFlags & VK_QUEUE_SPARSE_BINDING_BIT) == 1082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 0) { 1092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, 1102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(queue), __LINE__, OBJTRACK_UNKNOWN_OBJECT, LayerName, 1112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "Attempting %s on a non-memory-management capable queue -- VK_QUEUE_SPARSE_BINDING_BIT not set", function); 1122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AllocateCommandBuffer(VkDevice device, const VkCommandPool command_pool, const VkCommandBuffer command_buffer, 1182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT object_type, VkCommandBufferLevel level) { 1192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<const uint64_t>(command_buffer), 1222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 1232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski string_VkDebugReportObjectTypeEXT(object_type), reinterpret_cast<const uint64_t>(command_buffer)); 1242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 1262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 1272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<const uint64_t>(command_buffer); 1282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<const uint64_t &>(command_pool); 1292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (level == VK_COMMAND_BUFFER_LEVEL_SECONDARY) { 1302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_COMMAND_BUFFER_SECONDARY; 1312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 1322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 1332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type][reinterpret_cast<const uint64_t>(command_buffer)] = pNewObjNode; 1352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 1362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 1372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateCommandBuffer(VkDevice device, VkCommandPool command_pool, VkCommandBuffer command_buffer) { 1402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 1422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t>(command_buffer); 1432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].find(object_handle) != 1442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].end()) { 1452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = 1462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT][reinterpret_cast<uint64_t>(command_buffer)]; 1472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object != reinterpret_cast<uint64_t &>(command_pool)) { 1492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, object_handle, 1502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_COMMAND_POOL_MISMATCH, LayerName, 1512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "FreeCommandBuffers is attempting to free Command Buffer 0x%" PRIxLEAST64 1522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski " belonging to Command Pool 0x%" PRIxLEAST64 " from pool 0x%" PRIxLEAST64 ").", 1532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(command_buffer), pNode->parent_object, 1542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(command_pool)); 1552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 1570ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, 1580ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "Unable to remove command buffer obj 0x%" PRIxLEAST64 1590ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski ". Was it created? Has it already been destroyed?", 1600ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_handle); 1612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return skip_call; 1632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void AllocateDescriptorSet(VkDevice device, VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set, 1662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT object_type) { 1672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, 1702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set), __LINE__, OBJTRACK_NONE, LayerName, 1712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, object_name[object_type], 1722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set)); 1732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 1752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 1762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 1772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t &>(descriptor_set); 1782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<uint64_t &>(descriptor_pool); 1792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT][reinterpret_cast<uint64_t &>(descriptor_set)] = 1802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode; 1812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 1822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 1832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 1842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic bool ValidateDescriptorSet(VkDevice device, VkDescriptorPool descriptor_pool, VkDescriptorSet descriptor_set) { 1862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 1882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t object_handle = reinterpret_cast<uint64_t &>(descriptor_set); 1892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto dsItem = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].find(object_handle); 1902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (dsItem != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].end()) { 1912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = dsItem->second; 1922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object != reinterpret_cast<uint64_t &>(descriptor_pool)) { 1942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, object_handle, 1952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_DESCRIPTOR_POOL_MISMATCH, LayerName, 1962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "FreeDescriptorSets is attempting to free descriptorSet 0x%" PRIxLEAST64 1972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski " belonging to Descriptor Pool 0x%" PRIxLEAST64 " from pool 0x%" PRIxLEAST64 ").", 1982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_set), pNode->parent_object, 1992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(descriptor_pool)); 2002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 2012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 2020ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski skip_call |= log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, 2030ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "Unable to remove descriptor set obj 0x%" PRIxLEAST64 2040ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski ". Was it created? Has it already been destroyed?", 2050ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_handle); 2062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 2072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return skip_call; 2082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CreateQueue(VkDevice device, VkQueue vkObj, VkDebugReportObjectTypeEXT object_type) { 2112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, reinterpret_cast<uint64_t>(vkObj), __LINE__, 2142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 2152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[object_type], reinterpret_cast<uint64_t>(vkObj)); 2162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *p_obj_node = NULL; 2182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto queue_item = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].find(reinterpret_cast<uint64_t>(vkObj)); 2192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue_item == device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT].end()) { 2202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node = new OBJTRACK_NODE; 2212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT][reinterpret_cast<uint64_t>(vkObj)] = p_obj_node; 2222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[object_type]++; 2232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects++; 2242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 2252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node = queue_item->second; 2262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 2272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->object_type = object_type; 2282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->status = OBJSTATUS_NONE; 2292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski p_obj_node->handle = reinterpret_cast<uint64_t>(vkObj); 2302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CreateSwapchainImageObject(VkDevice dispatchable_object, VkImage swapchain_image, VkSwapchainKHR swapchain) { 2332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, 2352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(swapchain_image), __LINE__, OBJTRACK_NONE, LayerName, 2362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, "SwapchainImage", 2372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t &>(swapchain_image)); 2382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 2402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT; 2412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->status = OBJSTATUS_NONE; 2422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->handle = reinterpret_cast<uint64_t &>(swapchain_image); 2432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->parent_object = reinterpret_cast<uint64_t &>(swapchain); 2442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->swapchainImageMap[reinterpret_cast<uint64_t &>(swapchain_image)] = pNewObjNode; 2452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 247da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbestemplate<typename T> 248da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbesuint64_t handle_value(T handle) { 249da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes return reinterpret_cast<uint64_t &>(handle); 250da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes} 251da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbestemplate<typename T> 252da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbesuint64_t handle_value(T *handle) { 253da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes return reinterpret_cast<uint64_t>(handle); 254da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes} 255da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes 2562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 2576e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinskistatic void CreateObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, const VkAllocationCallbacks *pAllocator) { 2582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2598967fbe63cd0aaa9d32c7ab3c39ba0be181e2866Chris Forbes 260da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes auto object_handle = handle_value(object); 2616e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski bool custom_allocator = pAllocator != nullptr; 2622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2632cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes log_msg(instance_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, object_type, object_handle, 2642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski __LINE__, OBJTRACK_NONE, LayerName, "OBJ[0x%" PRIxLEAST64 "] : CREATE %s object 0x%" PRIxLEAST64, object_track_index++, 2652cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes object_name[object_type], object_handle); 2662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNewObjNode = new OBJTRACK_NODE; 2682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pNewObjNode->object_type = object_type; 269c8a0b73f7bbeb0cdbf8a6878b2a2d0e7681954d9Chris Forbes pNewObjNode->status = custom_allocator ? OBJSTATUS_CUSTOM_ALLOCATOR : OBJSTATUS_NONE; 2702cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes pNewObjNode->handle = object_handle; 2712cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes instance_data->object_map[object_type][object_handle] = pNewObjNode; 2722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_objects[object_type]++; 2732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_total_objects++; 2742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 2752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 2776e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinskistatic void DestroyObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, const VkAllocationCallbacks *pAllocator) { 2782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 2792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 280da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes auto object_handle = handle_value(object); 2816e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski bool custom_allocator = pAllocator != nullptr; 2822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto item = device_data->object_map[object_type].find(object_handle); 2842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (item != device_data->object_map[object_type].end()) { 2852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = item->second; 2872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_total_objects > 0); 2882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_total_objects--; 2892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device_data->num_objects[pNode->object_type] > 0); 2902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[pNode->object_type]--; 2912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_INFORMATION_BIT_EXT, pNode->object_type, object_handle, __LINE__, 2932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NONE, LayerName, 2942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ_STAT Destroy %s obj 0x%" PRIxLEAST64 " (%" PRIu64 " total objs remain & %" PRIu64 " %s objs).", 2952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_name[pNode->object_type], reinterpret_cast<uint64_t &>(object), device_data->num_total_objects, 2962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->num_objects[pNode->object_type], object_name[pNode->object_type]); 2972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 2986e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski auto allocated_with_custom = (pNode->status & OBJSTATUS_CUSTOM_ALLOCATOR) ? true : false; 299e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes if (custom_allocator ^ allocated_with_custom) { 300e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, object_handle, __LINE__, 301e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes OBJTRACK_ALLOCATOR_MISMATCH, LayerName, 302e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes "Custom allocator %sspecified while destroying %s obj 0x%" PRIxLEAST64 " but %sspecified at creation", 303e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (custom_allocator ? "" : "not "), object_name[object_type], object_handle, 304e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes (allocated_with_custom ? "" : "not ")); 305e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes } 306e2d522b355afc24ff89c6453f20305194a7e5c64Chris Forbes 3072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete pNode; 3082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[object_type].erase(item); 3092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 3102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, object_handle, __LINE__, 3112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_UNKNOWN_OBJECT, LayerName, 3120ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski "Unable to remove %s obj 0x%" PRIxLEAST64 ". Was it created? Has it already been destroyed?", 3130ad284010d1d333dbeceb2769ac0f24e7eb66864Mark Lobodzinski object_name[object_type], object_handle); 3142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskitemplate <typename T1, typename T2> 3184f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultzstatic bool ValidateObject(T1 dispatchable_object, T2 object, VkDebugReportObjectTypeEXT object_type, bool null_allowed, 3194f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz int error_code = -1) { 3202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (null_allowed && (object == VK_NULL_HANDLE)) { 3212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 323da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes auto object_handle = handle_value(object); 324da5450dacd563d329c945a9fa8450d5f06f7316dChris Forbes 3252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(dispatchable_object), layer_data_map); 32645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes if (device_data->object_map[object_type].find(object_handle) == device_data->object_map[object_type].end()) { 3272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // If object is an image, also look for it in the swapchain image map 3282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((object_type != VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT) || 32945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes (device_data->swapchainImageMap.find(object_handle) == device_data->swapchainImageMap.end())) { 3304f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz const char *error_msg = (error_code == -1) ? "" : validation_error_map[error_code]; 3314f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz return log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_type, object_handle, __LINE__, 3324f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz error_code, LayerName, "Invalid %s Object 0x%" PRIxLEAST64 ". %s", object_name[object_type], 3334f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz object_handle, error_msg); 3342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return false; 3372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void DeviceReportUndestroyedObjects(VkDevice device, VkDebugReportObjectTypeEXT object_type) { 3402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto item = device_data->object_map[object_type].begin(); item != device_data->object_map[object_type].end();) { 3422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *object_info = item->second; 3432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, object_info->object_type, object_info->handle, __LINE__, 3442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_OBJECT_LEAK, LayerName, 3452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "OBJ ERROR : For device 0x%" PRIxLEAST64 ", %s object 0x%" PRIxLEAST64 " has not been destroyed.", 3462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski reinterpret_cast<uint64_t>(device), object_name[object_type], object_info->handle); 3472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski item = device_data->object_map[object_type].erase(item); 3482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 3502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { 3522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dispatch_key key = get_dispatch_key(instance); 3552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(key, layer_data_map); 3562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Enable the temporary callback(s) here to catch cleanup issues: 3582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool callback_setup = false; 3592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instance_data->num_tmp_callbacks > 0) { 3602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!layer_enable_tmp_callbacks(instance_data->report_data, instance_data->num_tmp_callbacks, 3612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->tmp_dbg_create_infos, instance_data->tmp_callbacks)) { 3622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski callback_setup = true; 3632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 3652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 366186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, true, VALIDATION_ERROR_00021); 3672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3685af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, pAllocator); 3692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Report any remaining objects in LL 3702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (auto iit = instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].begin(); 3722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski iit != instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].end();) { 3732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = iit->second; 3742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDevice device = reinterpret_cast<VkDevice>(pNode->handle); 3762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski log_msg(instance_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, pNode->object_type, pNode->handle, __LINE__, 3782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_OBJECT_LEAK, LayerName, "OBJ ERROR : %s object 0x%" PRIxLEAST64 " has not been destroyed.", 3792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski string_VkDebugReportObjectTypeEXT(pNode->object_type), pNode->handle); 3802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Semaphore: 3812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT); 3822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT); 3832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT); 3842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT); 3852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT); 3862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT); 3872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT); 3882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT); 3892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT); 3902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT); 3912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT); 3922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT); 3932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT); 3942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT); 3952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT); 3962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT); 3972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT); 3982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT); 3992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT); 4002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT); 4012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT); 4022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT); 4032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT); 4042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT].clear(); 4062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 4082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DestroyInstance(instance, pAllocator); 4092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Disable and cleanup the temporary callback(s): 4112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (callback_setup) { 4122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_disable_tmp_callbacks(instance_data->report_data, instance_data->num_tmp_callbacks, instance_data->tmp_callbacks); 4132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instance_data->num_tmp_callbacks > 0) { 4152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_free_tmp_callbacks(instance_data->tmp_dbg_create_infos, instance_data->tmp_callbacks); 4162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->num_tmp_callbacks = 0; 4172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Clean up logging callback, if any 4202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (instance_data->logging_callback.size() > 0) { 4212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT callback = instance_data->logging_callback.back(); 4222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_destroy_msg_callback(instance_data->report_data, callback, pAllocator); 4232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->logging_callback.pop_back(); 4242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_debug_report_destroy_instance(instance_data->report_data); 4272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data_map.erase(key); 4282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap.erase(pInstanceTable); 4302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 4312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ot_instance_table_map.erase(key); 4322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 4332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4342faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { 4352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 437186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, true, VALIDATION_ERROR_00052); 4385af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, pAllocator); 4392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Report any remaining objects associated with this VkDevice object in LL 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_SURFACE_KHR_EXT); 4622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT); 4632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // DeviceReportUndestroyedObjects(device, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT); 4642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Clean up Queue's MemRef Linked Lists 4662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski DestroyQueueDataStructures(device); 4672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 4692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dispatch_key key = get_dispatch_key(device); 4712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerDispatchTable *pDisp = get_dispatch_table(ot_device_table_map, device); 4722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pDisp->DestroyDevice(device, pAllocator); 4732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ot_device_table_map.erase(key); 4742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 4752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4762faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures *pFeatures) { 4772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 4782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 4792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 480186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 481186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01679); 4822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 4842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 4852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures); 4872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 4882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 4892faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 4902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkFormatProperties *pFormatProperties) { 4912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 4922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 4932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 494186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 495186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01683); 4962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 4972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 4982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 4992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 5012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties); 5022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5042faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 5052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageType type, VkImageTiling tiling, 5062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageUsageFlags usage, VkImageCreateFlags flags, 5072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageFormatProperties *pImageFormatProperties) { 5082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 511186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 512186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01686); 5132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 5162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 5182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 5192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties); 5202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 5212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5232faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties) { 5242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 527186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 528186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00026); 5292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 5322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties); 5342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5362faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, 5372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPhysicalDeviceMemoryProperties *pMemoryProperties) { 5382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 541186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 542186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00609); 5432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 5462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); 5482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5502faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *pName); 5512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5522faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *pName); 5532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5542faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, 5552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties); 5562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5572faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pPropertyCount, VkLayerProperties *pProperties); 5582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5592faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pPropertyCount, 5602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties); 5612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 5622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) { 5632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 5642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 5652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 566186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(queue, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, true, VALIDATION_ERROR_00130); 5672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits) { 5682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < submitCount; ++idx0) { 5692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pCommandBuffers) { 5702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pSubmits[idx0].commandBufferCount; ++idx1) { 57145e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, pSubmits[idx0].pCommandBuffers[idx1], 572bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, VALIDATION_ERROR_00149); 5732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pSignalSemaphores) { 5762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < pSubmits[idx0].signalSemaphoreCount; ++idx2) { 57745e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, pSubmits[idx0].pSignalSemaphores[idx2], 578bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false, VALIDATION_ERROR_00150); 5792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSubmits[idx0].pWaitSemaphores) { 5822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx3 = 0; idx3 < pSubmits[idx0].waitSemaphoreCount; ++idx3) { 58345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, pSubmits[idx0].pWaitSemaphores[idx3], 584bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false, VALIDATION_ERROR_00146); 5852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (queue) { 590186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false, VALIDATION_ERROR_00128); 5912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 5942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 5952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 5962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence); 5972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 5982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 5992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6002faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(VkQueue queue) { 6012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 604186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false, VALIDATION_ERROR_00317); 6052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueWaitIdle(queue); 6102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6132faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(VkDevice device) { 6142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 617186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00318); 6182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->DeviceWaitIdle(device); 6232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6262faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, 6272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) { 6282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 631186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00612); 6322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory); 6372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 6392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 6402cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pMemory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); 6412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6462faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 6472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 6482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 651186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00635); 6522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges) { 6532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < memoryRangeCount; ++idx0) { 6542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges[idx0].memory) { 655bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pMemoryRanges[idx0].memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, 656bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz false, VALIDATION_ERROR_00648); 6572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 6652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 6662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6692faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 6702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 6712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 674186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00638); 6752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges) { 6762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < memoryRangeCount; ++idx0) { 6772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pMemoryRanges[idx0].memory) { 678bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pMemoryRanges[idx0].memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, 679bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz false, VALIDATION_ERROR_00648); 6802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 6852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 6862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 6872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 6882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 6892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 6902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 6912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 6922faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, 6932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize *pCommittedMemoryInBytes) { 6942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 6952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 6962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 697186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00654); 698186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false, VALIDATION_ERROR_00655); 6992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); 7042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7062faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, 7072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize memoryOffset) { 7082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 711186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00799); 712186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00798); 713186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false, VALIDATION_ERROR_00800); 7142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->BindBufferMemory(device, buffer, memory, memoryOffset); 7192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7222faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) { 7232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 726186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00807); 727186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00808); 728186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false, VALIDATION_ERROR_00809); 7292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 7322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->BindImageMemory(device, image, memory, memoryOffset); 7342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 7352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7372faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, 7382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkMemoryRequirements *pMemoryRequirements) { 7392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 742186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00784); 743186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00783); 7442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements); 7492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements *pMemoryRequirements) { 7522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 755186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00787); 756186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00788); 7572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements); 7622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount, 7652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSparseImageMemoryRequirements *pSparseMemoryRequirements) { 7662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 769186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_01610); 770186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01611); 7712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 7762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); 7772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7792faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 7802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageType type, VkSampleCountFlagBits samples, 7812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageUsageFlags usage, VkImageTiling tiling, 7822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pPropertyCount, 7832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSparseImageFormatProperties *pProperties) { 7842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 7852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 7862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 787186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false, 788186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01601); 7892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 7912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 7922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 7932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 7942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, 7952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pProperties); 7962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 7972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 7982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo, 7992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFence *pFence) { 8002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 803186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00166); 8042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence); 8092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 8122cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pFence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, pAllocator); 8132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 8162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator) { 8192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 822186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00176); 823186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, true, VALIDATION_ERROR_00177); 8242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 8272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 8305af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, pAllocator); 8312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyFence(device, fence, pAllocator); 8332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8352faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences) { 8362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 839186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00184); 8402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pFences) { 8412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < fenceCount; ++idx0) { 842186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 843186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pFences[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false, VALIDATION_ERROR_00187); 8442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetFences(device, fenceCount, pFences); 8512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 8522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8542faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(VkDevice device, VkFence fence) { 8552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 858186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00180); 859186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false, VALIDATION_ERROR_00181); 8602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->GetFenceStatus(device, fence); 8652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 8662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8682faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, 8692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint64_t timeout) { 8702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 873186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00188); 8742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pFences) { 8752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < fenceCount; ++idx0) { 876186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 877186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pFences[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, false, VALIDATION_ERROR_00191); 8782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout); 8852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 8862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 8872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 8882faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo, 8892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore) { 8902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 8912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 8922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 893186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00192); 8942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 8962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 8972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 8982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore); 8992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 9022cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pSemaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, pAllocator); 9032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator) { 9092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 912186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00202); 913186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, true, VALIDATION_ERROR_00203); 9142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 9172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9205af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, pAllocator); 9212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySemaphore(device, semaphore, pAllocator); 9232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9252faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, 9262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkEvent *pEvent) { 9272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 930186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00206); 9312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent); 9362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 9392cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pEvent, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, pAllocator); 9402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9452faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator) { 9462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 949186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00216); 950186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, true, VALIDATION_ERROR_00217); 9512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 9542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 9575af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, pAllocator); 9582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyEvent(device, event, pAllocator); 9602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9622faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(VkDevice device, VkEvent event) { 9632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 966186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00220); 967186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, VALIDATION_ERROR_00221); 9682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->GetEventStatus(device, event); 9732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9762faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL SetEvent(VkDevice device, VkEvent event) { 9772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 980186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00223); 981186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, VALIDATION_ERROR_00224); 9822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->SetEvent(device, event); 9872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 9882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 9892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 9902faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetEvent(VkDevice device, VkEvent event) { 9912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 9922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 9932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 994186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00227); 995186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, VALIDATION_ERROR_00228); 9962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 9972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 9982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 9992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetEvent(device, event); 10012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10042faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, 10052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool) { 10062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1009186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_01002); 10102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); 10152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 10182cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pQueryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, pAllocator); 10192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10242faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks *pAllocator) { 10252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1028186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_01015); 1029186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, true, VALIDATION_ERROR_01016); 10302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 10332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10365af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, pAllocator); 10372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyQueryPool(device, queryPool, pAllocator); 10392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10412faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, 10422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags) { 10432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1046186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_01054); 1047186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01055); 10482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 10532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); 10542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10572faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, 10582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) { 10592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10624f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00659); 10632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 10662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer); 10682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 10712cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, pAllocator); 10722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 10752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10772faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator) { 10782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1081186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, true, VALIDATION_ERROR_00680); 1082186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00679); 10832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 10852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 10862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 10895af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, pAllocator); 10902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 10912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyBuffer(device, buffer, pAllocator); 10922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 10932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 10942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, 10952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkBufferView *pView) { 10962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 10972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 10982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1099186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00683); 11002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 1101bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= 1102bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz ValidateObject(device, pCreateInfo->buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00699); 11032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView); 11092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 11122cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, pAllocator); 11132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 11162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks *pAllocator) { 11192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1122186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, bufferView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, true, VALIDATION_ERROR_00705); 1123186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00704); 11242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 11272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11305af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, bufferView, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, pAllocator); 11312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyBufferView(device, bufferView, pAllocator); 11332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11352faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, 11362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkImage *pImage) { 11372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1140186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00709); 11412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage); 11462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 11492cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, pAllocator); 11502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 11532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11552faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) { 11562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1159186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00746); 1160186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, true, VALIDATION_ERROR_00747); 11612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 11642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 11675af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, pAllocator); 11682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyImage(device, image, pAllocator); 11702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11722faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, 11732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSubresourceLayout *pLayout) { 11742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1177186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00734); 1178186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00735); 11792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 11822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); 11842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 11852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 11862faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, 11872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkImageView *pView) { 11882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 11892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 11902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1191186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00750); 11922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 1193bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= 1194bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz ValidateObject(device, pCreateInfo->image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00763); 11952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 11972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 11982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 11992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView); 12012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 12042cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, pAllocator); 12052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 12082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12102faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks *pAllocator) { 12112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1214186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00779); 1215186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, imageView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, true, VALIDATION_ERROR_00780); 12162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12225af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, imageView, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, pAllocator); 12232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyImageView(device, imageView, pAllocator); 12252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12272faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, 12282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkShaderModule *pShaderModule) { 12292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1232186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00466); 12332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 12362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 12382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule); 12392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 12422cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pShaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, pAllocator); 12432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 12462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12482faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, 12492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 12502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1253186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00481); 1254186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1255186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, shaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, true, VALIDATION_ERROR_00482); 12562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12625af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, shaderModule, VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, pAllocator); 12632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyShaderModule(device, shaderModule, pAllocator); 12652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12672faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo, 12682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineCache *pPipelineCache) { 12692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1272186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00562); 12732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 12762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 12782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache); 12792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 12812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 12822cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pPipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, pAllocator); 12832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 12862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 12872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 12882faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, 12892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 12902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 12912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 12922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1293186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00585); 1294186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1295186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, true, VALIDATION_ERROR_00586); 12962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 12972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 12982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 12992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13025af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, pAllocator); 13032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipelineCache(device, pipelineCache, pAllocator); 13052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13072faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t *pDataSize, 13082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski void *pData) { 13092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1312186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00578); 1313186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1314186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false, VALIDATION_ERROR_00579); 13152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData); 13212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13242faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, 13252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkPipelineCache *pSrcCaches) { 13262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1329186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00572); 1330186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1331186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, dstCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false, VALIDATION_ERROR_00573); 13322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSrcCaches) { 13332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < srcCacheCount; ++idx0) { 1334186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, pSrcCaches[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, false, 1335186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00577); 13362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); 13442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13472faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks *pAllocator) { 13482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1351186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00558); 1352186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, true, VALIDATION_ERROR_00559); 13532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 13562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13595af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 13602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipeline(device, pipeline, pAllocator); 13622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, 13652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout) { 13662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1369186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00861); 13702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 13712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pSetLayouts) { 13722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->setLayoutCount; ++idx0) { 1373bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= 1374bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz ValidateObject(device, pCreateInfo->pSetLayouts[idx0], 1375bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, false, VALIDATION_ERROR_00875); 13762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 13812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 13822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 13842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout); 13852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 13872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 13882cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pPipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, pAllocator); 13892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 13912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 13922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 13932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 13942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, 13952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 13962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 13972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 13982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1399186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00885); 1400186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1401186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, true, VALIDATION_ERROR_00886); 14022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14085af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, pipelineLayout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, pAllocator); 14092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout, pAllocator); 14112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14132faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, 14142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) { 14152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1418186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00812); 14192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 14222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler); 14242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 14272cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pSampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, pAllocator); 14282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 14312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks *pAllocator) { 14342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1437186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00840); 1438186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, sampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, true, VALIDATION_ERROR_00841); 14392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14455af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, sampler, VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, pAllocator); 14462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySampler(device, sampler, pAllocator); 14482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14502faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, 14512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 14522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorSetLayout *pSetLayout) { 14532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1456186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00844); 14572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 14582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pBindings) { 14592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->bindingCount; ++idx0) { 1460bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if ((pCreateInfo->pBindings[idx0].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER) || 1461bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pCreateInfo->pBindings[idx0].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)) { 1462bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if (pCreateInfo->pBindings[idx0].pImmutableSamplers) { 1463bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz for (uint32_t idx1 = 0; idx1 < pCreateInfo->pBindings[idx0].descriptorCount; ++idx1) { 1464bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pCreateInfo->pBindings[idx0].pImmutableSamplers[idx1], 1465bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT, false, VALIDATION_ERROR_00852); 1466bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz } 14672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 14752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 14772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout); 14782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 14802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 14812cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, pAllocator); 14822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 14852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 14862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 14872faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, 14882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 14892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 14902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 14912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1492186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, descriptorSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, true, 1493186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00858); 1494186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00857); 14952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 14972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 14982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 14992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15015af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, descriptorSetLayout, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, pAllocator); 15022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator); 15042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15062faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo, 15072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pDescriptorPool) { 15082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1511186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00889); 15122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 15152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 15172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool); 15182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 15202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 15212cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pDescriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, pAllocator); 15222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 15252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15272faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 15282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorPoolResetFlags flags) { 15292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 1530835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes std::unique_lock<std::mutex> lock(global_lock); 1531835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1532186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1533186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false, VALIDATION_ERROR_00930); 1534186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00929); 15352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 15362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 15372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1538835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes // A DescriptorPool's descriptor sets are implicitly deleted when the pool is reset. 1539835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes // Remove this pool's descriptor sets from our descriptorSet map. 1540835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes auto itr = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].begin(); 1541835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes while (itr != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].end()) { 1542835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes OBJTRACK_NODE *pNode = (*itr).second; 1543835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes auto del_itr = itr++; 1544835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes if (pNode->parent_object == reinterpret_cast<uint64_t &>(descriptorPool)) { 1545835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes DestroyObject(device, (VkDescriptorSet)((*del_itr).first), 15466e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, nullptr); 1547835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes } 1548835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes } 1549835c89427f8c18d5594f8c50ff9abf9a9e3505e6Chris Forbes lock.unlock(); 15502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags); 15512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 15522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 15532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 15542faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, 15552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, 15562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCopyDescriptorSet *pDescriptorCopies) { 15572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 15582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 15592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1560186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00933); 15612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies) { 15622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < descriptorCopyCount; ++idx0) { 15632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies[idx0].dstSet) { 156445e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pDescriptorCopies[idx0].dstSet, 1565bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false, VALIDATION_ERROR_00972); 15662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorCopies[idx0].srcSet) { 156845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pDescriptorCopies[idx0].srcSet, 1569bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false, VALIDATION_ERROR_00971); 15702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites) { 15742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < descriptorWriteCount; ++idx1) { 15752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].dstSet) { 157645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pDescriptorWrites[idx1].dstSet, 1577bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false, VALIDATION_ERROR_00955); 15782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1579bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) || 1580bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)) { 15812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < pDescriptorWrites[idx1].descriptorCount; ++idx2) { 1582bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pDescriptorWrites[idx1].pTexelBufferView[idx2], 1583bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT, false, VALIDATION_ERROR_00940); 15842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1586bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) || 15872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) || 1588bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) || 1589bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT)) { 15902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx3 = 0; idx3 < pDescriptorWrites[idx1].descriptorCount; ++idx3) { 15912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorWrites[idx1].pImageInfo[idx3].imageView) { 159245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pDescriptorWrites[idx1].pImageInfo[idx3].imageView, 1593bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, false, VALIDATION_ERROR_00943); 15942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 15962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 1597bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if ((pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) || 1598bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) || 1599bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) || 1600bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz (pDescriptorWrites[idx1].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)) { 16012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx4 = 0; idx4 < pDescriptorWrites[idx1].descriptorCount; ++idx4) { 1602bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz if (pDescriptorWrites[idx1].pBufferInfo[idx4].buffer) { 1603bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pDescriptorWrites[idx1].pBufferInfo[idx4].buffer, 1604bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00962); 1605bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz } 16062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 16132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 16152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); 16162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16182faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, 16192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer) { 16202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1623186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00400); 16242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 16252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->pAttachments) { 16262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pCreateInfo->attachmentCount; ++idx0) { 1627bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pCreateInfo->pAttachments[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT, 1628bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz false, VALIDATION_ERROR_00420); 16292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo->renderPass) { 1632bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz skip_call |= ValidateObject(device, pCreateInfo->renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false, 1633bc8fce034a9e20141a0e1845f0582450baca2479Karl Schultz VALIDATION_ERROR_00419); 16342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 16392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 16412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); 16422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 16452cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pFramebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, pAllocator); 16462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 16492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks *pAllocator) { 16522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1655186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00425); 1656186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, framebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, true, VALIDATION_ERROR_00426); 16572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 16602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16635af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, framebuffer, VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, pAllocator); 16642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyFramebuffer(device, framebuffer, pAllocator); 16662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16682faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, 16692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) { 16702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1673186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00319); 16742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 16772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 16792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); 16802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 16822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 16832cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pRenderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, pAllocator); 16842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 16872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 16882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 16892faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) { 16902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 16912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 16922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1693186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00396); 1694186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, true, VALIDATION_ERROR_00397); 16952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 16972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 16982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 16992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17015af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, pAllocator); 17022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyRenderPass(device, renderPass, pAllocator); 17042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17062faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D *pGranularity) { 17072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1710186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00449); 1711186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, renderPass, VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false, VALIDATION_ERROR_00450); 17122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 17152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity); 17172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, 17202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool) { 17212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1724186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00064); 17252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 17302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); 17312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 17332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 17342cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pCommandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, pAllocator); 17352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17402faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) { 17412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1744186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 1745186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false, VALIDATION_ERROR_00074); 1746186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00073); 17472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->ResetCommandPool(device, commandPool, flags); 17522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17552faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(VkCommandBuffer command_buffer, const VkCommandBufferBeginInfo *begin_info) { 17562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(command_buffer), layer_data_map); 17572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1760186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(command_buffer, command_buffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1761186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00108); 17622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (begin_info) { 17632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = 17642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT][reinterpret_cast<const uint64_t>(command_buffer)]; 17652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((begin_info->pInheritanceInfo) && (pNode->status & OBJSTATUS_COMMAND_BUFFER_SECONDARY)) { 176645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(command_buffer, begin_info->pInheritanceInfo->framebuffer, 17672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, true); 176845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(command_buffer, begin_info->pInheritanceInfo->renderPass, 17692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, true); 17702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 17742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 17752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 17762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, command_buffer)->BeginCommandBuffer(command_buffer, begin_info); 17772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17802faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(VkCommandBuffer commandBuffer) { 17812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1784186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1785186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00125); 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, commandBuffer)->EndCommandBuffer(commandBuffer); 17912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 17922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 17932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 17942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) { 17952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 17962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 17972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1798186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1799186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00090); 18002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 18032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags); 18052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 18062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 18092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipeline pipeline) { 18102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1813186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1814186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00599); 18152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 1816186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, pipeline, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, false, VALIDATION_ERROR_00601); 18172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); 18222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18242faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, 18252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkViewport *pViewports) { 18262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1829186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1830186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01443); 18312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); 18362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, 18392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkRect2D *pScissors) { 18402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1843186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1844186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01492); 18452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); 18502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18522faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) { 18532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1856186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1857186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01478); 18582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth); 18632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18652faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, 18662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski float depthBiasSlopeFactor) { 18672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1870186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1871186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01483); 18722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 18772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); 18782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18802faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) { 18812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1884186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1885186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01551); 18862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 18882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 18892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 18902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants); 18912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 18922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 18932faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) { 18942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 18952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 18962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1897186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1898186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01507); 18992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); 19042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19062faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, 19072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t compareMask) { 19082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1911186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1912186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01515); 19132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); 19182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19202faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) { 19212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1924186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1925186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01521); 19262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); 19312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) { 19342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1937186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1938186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01527); 19392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference); 19442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19462faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 19472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, 19482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDescriptorSet *pDescriptorSets, uint32_t dynamicOffsetCount, 19492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const uint32_t *pDynamicOffsets) { 19502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1953186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1954186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00979); 19552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 1956186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, layout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false, VALIDATION_ERROR_00981); 19572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pDescriptorSets) { 19582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < descriptorSetCount; ++idx0) { 195945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pDescriptorSets[idx0], 19602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, false); 19612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 19682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, 19692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski dynamicOffsetCount, pDynamicOffsets); 19702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19722faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 19732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkIndexType indexType) { 19742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1977186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01354); 1978186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1979186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01353); 19802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 19822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 19832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 19842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); 19852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 19862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 19872faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, 19882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkBuffer *pBuffers, const VkDeviceSize *pOffsets) { 19892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 19902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 19912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 1992186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 1993186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01419); 19942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBuffers) { 19952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bindingCount; ++idx0) { 19962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 199745e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(commandBuffer, pBuffers[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_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 ->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); 20062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, 20092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t firstVertex, uint32_t firstInstance) { 20102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2013186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2014186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01362); 20152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); 20212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20232faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, 20242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) { 20252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2028186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2029186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01369); 20302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); 20362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t drawCount, 20392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t stride) { 20402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2043186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01378); 2044186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2045186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01377); 20462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, drawCount, stride); 20512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20532faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 20542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t drawCount, uint32_t stride) { 20552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2058186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01390); 2059186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2060186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01389); 20612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 20662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, drawCount, stride); 20672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20692faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) { 20702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2073186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2074186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01559); 20752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z); 20802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20822faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) { 20832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 20852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2086186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01566); 2087186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2088186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01565); 20892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 20912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 20922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 20932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset); 20942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 20952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 20962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, 20972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t regionCount, const VkBufferCopy *pRegions) { 20982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 20992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2101186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2102186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01166); 2103186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 2104186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01168); 21052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2106186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01167); 21072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); 21132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21152faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 21162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 21172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageCopy *pRegions) { 21182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2121186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2122186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01186); 2123186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01189); 2124186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01187); 21252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 21312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21332faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 21342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 21352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageBlit *pRegions, VkFilter filter) { 21362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2139186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2140186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01291); 2141186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01294); 2142186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01292); 21432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); 21492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21512faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, 21522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImageLayout dstImageLayout, uint32_t regionCount, 21532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkBufferImageCopy *pRegions) { 21542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2157186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2158186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01235); 2159186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01237); 21602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2161186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, srcBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01236); 21622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); 21682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21702faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 21712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions) { 21722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2175186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2176186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01253); 21772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2178186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01256); 2179186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01254); 21802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 21832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 21852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); 21862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 21872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 21882faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 21892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize dataSize, const uint32_t *pData) { 21902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 21912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 21922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2193186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2194186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01150); 21952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2196186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01151); 21972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 21982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 21992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); 22022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22042faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 22052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize size, uint32_t data) { 22062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2209186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2210186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01138); 22112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2212186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01139); 22132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); 22182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22202faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 22212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearColorValue *pColor, uint32_t rangeCount, 22222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 22232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2226186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2227186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01089); 2228186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01090); 22292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); 22352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22372faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 22382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearDepthStencilValue *pDepthStencil, uint32_t rangeCount, 22392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 22402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2243186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2244186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01104); 2245186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01105); 22462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); 22522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22542faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, 22552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearAttachment *pAttachments, uint32_t rectCount, 22562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkClearRect *pRects) { 22572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2260186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2261186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01117); 22622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); 22682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22702faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 22712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 22722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkImageResolve *pRegions) { 22732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2276186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2277186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01327); 2278186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, dstImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01330); 2279186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, srcImage, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_01328); 22802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 22852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 22862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 22872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 22882faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 22892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 22902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 22912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2292186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2293186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00232); 2294186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, VALIDATION_ERROR_00233); 22952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 22972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 22982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 22992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask); 23002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23022faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 23032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2306186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2307186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00243); 2308186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, event, VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, VALIDATION_ERROR_00244); 23092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask); 23142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23162faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, 23172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, 23182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 23192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 23202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 23212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2324186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2325186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00252); 23262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers) { 23272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bufferMemoryBarrierCount; ++idx0) { 23282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers[idx0].buffer) { 232945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pBufferMemoryBarriers[idx0].buffer, 2330186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00259); 23312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pEvents) { 23352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < eventCount; ++idx1) { 2336186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, pEvents[idx1], VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT, false, 2337186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00253); 23382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers) { 23412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < imageMemoryBarrierCount; ++idx2) { 23422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers[idx2].image) { 234345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pImageMemoryBarriers[idx2].image, 2344186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00260); 23452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 23532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, 23542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 23552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23572faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, 23582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, 23592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 23602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 23612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 23622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2365186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2366186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00270); 23672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers) { 23682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < bufferMemoryBarrierCount; ++idx0) { 23692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pBufferMemoryBarriers[idx0].buffer) { 237045e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pBufferMemoryBarriers[idx0].buffer, 2371186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_00277); 23722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers) { 23762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < imageMemoryBarrierCount; ++idx1) { 23772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pImageMemoryBarriers[idx1].image) { 237845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pImageMemoryBarriers[idx1].image, 2379186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false, VALIDATION_ERROR_00278); 23802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 23852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 23862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 23872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 23882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, 23892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 23902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 23912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 23922faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query, 23932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueryControlFlags flags) { 23942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 23952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 23962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2397186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2398186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01035); 23992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2400186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01036); 24012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, query, flags); 24062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t query) { 24092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2412186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2413186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01043); 24142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2415186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01044); 24162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, query); 24212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24232faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 24242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queryCount) { 24252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2428186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2429186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01021); 24302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2431186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01022); 24322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); 24372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24392faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, 24402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueryPool queryPool, uint32_t query) { 24412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2444186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2445186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01078); 24462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2447186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01080); 24482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); 24532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24552faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 24562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, 24572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDeviceSize stride, VkQueryResultFlags flags) { 24582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2461186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2462186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_01068); 2463186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 2464186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, dstBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false, VALIDATION_ERROR_01070); 24652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2466186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, queryPool, VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT, false, VALIDATION_ERROR_01069); 24672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 24722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); 24732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24752faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, 24762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t offset, uint32_t size, const void *pValues) { 24772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2480186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2481186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00993); 24822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 2483186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(commandBuffer, layout, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false, VALIDATION_ERROR_00994); 24842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 24862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 24872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 24882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 24892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); 24902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 24912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 24922faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin, 24932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSubpassContents contents) { 24942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 24952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 24962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2497186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2498186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00435); 24992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pRenderPassBegin) { 250045e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pRenderPassBegin->framebuffer, 25012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT, false); 250245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(commandBuffer, pRenderPassBegin->renderPass, 25032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 25042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); 25102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25122faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) { 25132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2516186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2517186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00454); 25182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents); 25232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25252faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) { 25262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2529186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2530186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00461); 25312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer); 25362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, 25392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCommandBuffer *pCommandBuffers) { 25402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 2543186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false, 2544186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00159); 25452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCommandBuffers) { 25462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < commandBufferCount; ++idx0) { 2547186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(commandBuffer, pCommandBuffers[idx0], VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, 2548186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz false, VALIDATION_ERROR_00160); 25492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); 25562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25582faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySurfaceKHR(VkInstance instance, VkSurfaceKHR surface, const VkAllocationCallbacks *pAllocator) { 25592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 256245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 256345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 25642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 25672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25705af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(instance, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 25712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->DestroySurfaceKHR(instance, surface, pAllocator); 25732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25752faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, 25762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceKHR surface, VkBool32 *pSupported) { 25772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 258145e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 258245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 25832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 25852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 25862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 25872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 25882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported); 25892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 25902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 25912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 25922faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 25932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { 25942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 25952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 25962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 25972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 259845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 259945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities); 26062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26092faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 26102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pSurfaceFormatCount, 26112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSurfaceFormatKHR *pSurfaceFormats) { 26122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 261645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 261745e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); 26242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26272faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 26282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pPresentModeCount, 26292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPresentModeKHR *pPresentModes) { 26302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 263445e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 263545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(physicalDevice, surface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 26412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes); 26422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26452faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, 26462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) { 26472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 265045e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 26512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfo) { 265245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfo->oldSwapchain, 26532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, true); 26542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 265545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device_data->physical_device, pCreateInfo->surface, 26562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 26572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 26632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); 26642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 26672cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, *pSwapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 26682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26732faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, 26742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { 26752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 267845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 267945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, fence, VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT, true); 268045e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, semaphore, VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, true); 268145e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, swapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, false); 26822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 26842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 26852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 26862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 26872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); 26882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 26892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 26902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 26912faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) { 26922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 26932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 26942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 26952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo) { 26962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo->pSwapchains) { 26972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < pPresentInfo->swapchainCount; ++idx0) { 269845e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, pPresentInfo->pSwapchains[idx0], 26992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, false); 27002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPresentInfo->pWaitSemaphores) { 27032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pPresentInfo->waitSemaphoreCount; ++idx1) { 270445e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, pPresentInfo->pWaitSemaphores[idx1], 27052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT, false); 27062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 270945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(queue, queue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT, false); 27102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueuePresentKHR(queue, pPresentInfo); 27152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 27192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, 27202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 27212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 272445e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 27252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 27302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 27312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 27342cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 27352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27402faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWin32PresentationSupportKHR(VkPhysicalDevice physicalDevice, 27412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex) { 27422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 274645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 27472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 27502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 27522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceWin32PresentationSupportKHR(physicalDevice, queueFamilyIndex); 27532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 27562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 27582faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, 27592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 27602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 276345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 27642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 27672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 27692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 27702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 27732cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 27742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27792faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, 27802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, xcb_connection_t *connection, 27812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski xcb_visualid_t visual_id) { 27822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 27832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 27842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 27852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 278645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 27872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 27892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 27902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 27912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 27922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id); 27932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 27942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 27952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 27962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 27972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 27982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, 27992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 28002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 280345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 28042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 28072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 28092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 28102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 28132cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 28142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, Display *dpy, 28212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VisualID visualID) { 28222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 282645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 28272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 28302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 28322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID); 28332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 28362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 28382faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo, 28392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 28402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 284345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 28442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 28472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 28492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 28502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 28532cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 28542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28592faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, MirConnection *connection) { 28612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 286545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 28662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 28692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 28712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceMirPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection); 28722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 28752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 28772faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, 28782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 28792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 28802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 288245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 28832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 28852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 28862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 28882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 28892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 28902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 28912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 28922cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 28932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 28952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 28962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 28972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 28982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, 28992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t queueFamilyIndex, 29002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski struct wl_display *display) { 29012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 29022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= 290545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 29062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 29082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_FALSE; 29092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkBool32 result = get_dispatch_table(ot_instance_table_map, physicalDevice) 29112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display); 29122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 29152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 29172faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, 29182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 29192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 29202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 292245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false); 29232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 29252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 29262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 29282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, instance)->CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 29292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski { 29302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 29312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 29322cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pSurface, VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, pAllocator); 29332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 29382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 293919ab93c7fb4fb9ae62679852783a97f599d1b367Mark YoungVKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, 294019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkSwapchainCreateInfoKHR *pCreateInfos, 294119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { 294219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young bool skip_call = false; 294319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young uint32_t i = 0; 294419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young { 294519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young std::lock_guard<std::mutex> lock(global_lock); 294645e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 294719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (NULL != pCreateInfos) { 294819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young for (i = 0; i < swapchainCount; i++) { 294945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[i].oldSwapchain, 295019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, true); 295119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 295245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device_data->physical_device, pCreateInfos[i].surface, 295319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT, false); 295419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 295519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 295619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 295719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (skip_call) { 295819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return VK_ERROR_VALIDATION_FAILED_EXT; 295919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 296019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VkResult result = 296119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young get_dispatch_table(ot_device_table_map, device)->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); 296219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young { 296319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young std::lock_guard<std::mutex> lock(global_lock); 296419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (result == VK_SUCCESS) { 296519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young for (i = 0; i < swapchainCount; i++) { 29662cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, pSwapchains[i], VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 296719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 296819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 296919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 297019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return result; 297119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young} 297219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 29732faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(VkInstance instance, 29742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 29752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 29762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT *pCallback) { 29772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 29782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = pInstanceTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pCallback); 29792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (VK_SUCCESS == result) { 29802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 29812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski result = layer_create_msg_callback(instance_data->report_data, false, pCreateInfo, pAllocator, pCallback); 29822cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(instance, *pCallback, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, pAllocator); 29832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 29842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 29852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29872faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 29882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 29892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 29902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 29912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 29922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_destroy_msg_callback(instance_data->report_data, msgCallback, pAllocator); 29935af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(instance, msgCallback, VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT, pAllocator); 29942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 29952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 29962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 29972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 29982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 29992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, instance); 30002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pInstanceTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 30012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}}; 30042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic const VkLayerProperties globalLayerProps = {"VK_LAYER_LUNARG_object_tracker", 30062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_LAYER_API_VERSION, // specVersion 30072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 1, // implementationVersion 30082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski "LunarG Validation Layer"}; 30092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30102faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { 30112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetLayerProperties(1, &globalLayerProps, pCount, pProperties); 30122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30142faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 30152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 30162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetLayerProperties(1, &globalLayerProps, pCount, pProperties); 30172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30192faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 30202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 30212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pLayerName && !strcmp(pLayerName, globalLayerProps.layerName)) 30222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties); 30232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_LAYER_NOT_PRESENT; 30252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30272faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, 30282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pCount, VkExtensionProperties *pProperties) { 30292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pLayerName && !strcmp(pLayerName, globalLayerProps.layerName)) 30302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return util_GetExtensionProperties(0, nullptr, pCount, pProperties); 30312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice); 30332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(ot_instance_table_map, physicalDevice); 30342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return pTable->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pCount, pProperties); 30352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptMsgCallbackGetProcAddrCommand(const char *name, VkInstance instance) { 30382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 30392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return debug_report_get_instance_proc_addr(instance_data->report_data, name); 30402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstance instance) { 30432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(ot_instance_table_map, instance); 30442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (instanceExtMap.size() == 0 || !instanceExtMap[pTable].wsi_enabled) 30452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 30462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkDestroySurfaceKHR", name)) 30482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(DestroySurfaceKHR); 30492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceSupportKHR", name)) 30502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceSupportKHR); 30512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceCapabilitiesKHR", name)) 30522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilitiesKHR); 30532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfaceFormatsKHR", name)) 30542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR); 30552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp("vkGetPhysicalDeviceSurfacePresentModesKHR", name)) 30562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR); 30572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 30592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instanceExtMap[pTable].win32_enabled == true) && !strcmp("vkCreateWin32SurfaceKHR", name)) 30602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWin32SurfaceKHR); 30612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if ((instanceExtMap[pTable].win32_enabled == true) && !strcmp("vkGetPhysicalDeviceWin32PresentationSupportKHR", name)) 30622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceWin32PresentationSupportKHR); 30632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 30642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 3065564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xcb_enabled == true) && !strcmp("vkCreateXcbSurfaceKHR", name)) 30662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXcbSurfaceKHR); 3067564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xcb_enabled == true) && !strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) 30682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXcbPresentationSupportKHR); 30692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 30702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 3071564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xlib_enabled == true) && !strcmp("vkCreateXlibSurfaceKHR", name)) 30722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXlibSurfaceKHR); 3073564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].xlib_enabled == true) && !strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) 30742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXlibPresentationSupportKHR); 30752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 30762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 3077564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].mir_enabled == true) && !strcmp("vkCreateMirSurfaceKHR", name)) 30782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateMirSurfaceKHR); 3079564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].mir_enabled == true) && !strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) 30802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMirPresentationSupportKHR); 30812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 30822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 3083564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].wayland_enabled == true) && !strcmp("vkCreateWaylandSurfaceKHR", name)) 30842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWaylandSurfaceKHR); 3085564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].wayland_enabled == true) && !strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) 30862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceWaylandPresentationSupportKHR); 30872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 30882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 3089564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski if ((instanceExtMap[pTable].android_enabled == true) && !strcmp("vkCreateAndroidSurfaceKHR", name)) 30902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateAndroidSurfaceKHR); 30912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 30922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 30942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 30952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 30962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CheckDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { 30972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 30982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->wsi_enabled = false; 309919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = false; 310019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->objtrack_extensions_enabled = false; 31012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 31032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { 31042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->wsi_enabled = true; 31052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 310619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) { 310719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = true; 310819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 31092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], "OBJTRACK_EXTENSIONS") == 0) { 31102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->objtrack_extensions_enabled = true; 31112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic void CheckInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { 31162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pDisp = get_dispatch_table(ot_instance_table_map, instance); 31172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp] = {}; 31202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 31222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { 31232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].wsi_enabled = true; 31242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 31262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { 31272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].xlib_enabled = true; 31282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 31312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) { 31322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].xcb_enabled = true; 31332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 31362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) { 31372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].wayland_enabled = true; 31382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 31412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) { 31422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].mir_enabled = true; 31432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 31462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) { 31472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].android_enabled = true; 31482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 31512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) { 31522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instanceExtMap[pDisp].win32_enabled = true; 31532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski#endif 31552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31582faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, 31592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { 31602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 31612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *phy_dev_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 31622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 31632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(chain_info->u.pLayerInfo); 31652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 31662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; 31672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(phy_dev_data->instance, "vkCreateDevice"); 31682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (fpCreateDevice == NULL) { 31692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_INITIALIZATION_FAILED; 31702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Advance the link info for the next element on the chain 31732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 31742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); 31762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result != VK_SUCCESS) { 31772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 31782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 31792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); 31812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->report_data = layer_debug_report_create_device(phy_dev_data->report_data, *pDevice); 31822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Add link back to physDev 31842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->physical_device = physicalDevice; 31852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski initDeviceTable(*pDevice, fpGetDeviceProcAddr, ot_device_table_map); 31872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CheckDeviceRegisterExtensions(pCreateInfo, *pDevice); 31892cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(*pDevice, *pDevice, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, pAllocator); 31902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 31922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 31932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 31942faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, 31952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski uint32_t *pQueueFamilyPropertyCount, 31962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkQueueFamilyProperties *pQueueFamilyProperties) { 31972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_instance_table_map, physicalDevice) 31982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); 31992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 32002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pQueueFamilyProperties != NULL) { 32012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 32022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pQueueFamilyPropertyCount; i++) { 32032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->queue_family_properties.emplace_back(pQueueFamilyProperties[i]); 32042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32082faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, 32092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkInstance *pInstance) { 32102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 32112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(chain_info->u.pLayerInfo); 32132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 32142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); 32152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (fpCreateInstance == NULL) { 32162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_INITIALIZATION_FAILED; 32172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Advance the link info for the next element on the chain 32202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 32212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); 32232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result != VK_SUCCESS) { 32242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *instance_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map); 32282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->instance = *pInstance; 32292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski initInstanceTable(*pInstance, fpGetInstanceProcAddr, ot_instance_table_map); 32302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerInstanceDispatchTable *pInstanceTable = get_dispatch_table(ot_instance_table_map, *pInstance); 32312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Look for one or more debug report create info structures, and copy the 32332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // callback(s) for each one found (for use by vkDestroyInstance) 32342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_copy_tmp_callbacks(pCreateInfo->pNext, &instance_data->num_tmp_callbacks, &instance_data->tmp_dbg_create_infos, 32352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski &instance_data->tmp_callbacks); 32362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski instance_data->report_data = debug_report_create_instance(pInstanceTable, *pInstance, pCreateInfo->enabledExtensionCount, 32382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski pCreateInfo->ppEnabledExtensionNames); 32392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski InitObjectTracker(instance_data, pAllocator); 32412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CheckInstanceRegisterExtensions(pCreateInfo, *pInstance); 32422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32432cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(*pInstance, *pInstance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, pAllocator); 32442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32482faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, 32492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkPhysicalDevice *pPhysicalDevices) { 32502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 32512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3252186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(instance, instance, VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT, false, VALIDATION_ERROR_00023); 32532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 32552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 32562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, instance) 32582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); 32592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 32602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 32612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pPhysicalDevices) { 32622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++) { 32636e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski CreateObject(instance, pPhysicalDevices[i], VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, nullptr); 32642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 32672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 32692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32712faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) { 32722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3273186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00062); 32742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 32752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue); 32772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 32792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CreateQueue(device, *pQueue, VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT); 32812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AddQueueInfo(device, queueFamilyIndex, *pQueue); 32822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32842faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator) { 3285450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis bool skip = false; 32862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3287450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis skip |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00621); 3288450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis skip |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, true, VALIDATION_ERROR_00622); 32892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 3290450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis if (!skip) { 3291450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis get_dispatch_table(ot_device_table_map, device)->FreeMemory(device, memory, pAllocator); 32922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 3293450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis lock.lock(); 3294450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis DestroyObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, pAllocator); 3295450677bb3c91e3b80b6ac5f953dd965bb9ca4511Tobin Ehlis } 32962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 32972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 32982faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, 32992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkMemoryMapFlags flags, void **ppData) { 33002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3302186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00631); 33032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call == VK_TRUE) { 33052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 33062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->MapMemory(device, memory, offset, size, flags, ppData); 33082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33112faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL UnmapMemory(VkDevice device, VkDeviceMemory memory) { 33122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3314186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00650); 33152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call == VK_TRUE) { 33172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 33182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->UnmapMemory(device, memory); 33212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33222faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo *pBindInfo, 33232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkFence fence) { 33242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 33252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ValidateQueueFlags(queue, "QueueBindSparse"); 33262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < bindInfoCount; i++) { 33282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].bufferBindCount; j++) 332945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(queue, pBindInfo[i].pBufferBinds[j].buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, 33302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski false); 33312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].imageOpaqueBindCount; j++) 333245e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(queue, pBindInfo[i].pImageOpaqueBinds[j].image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, 33332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski false); 33342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t j = 0; j < pBindInfo[i].imageBindCount; j++) 333545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes ValidateObject(queue, pBindInfo[i].pImageBinds[j].image, VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT, false); 33362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence); 33402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33432faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, 33442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkCommandBuffer *pCommandBuffers) { 33452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3347186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00084); 3348186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, pAllocateInfo->commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false, 3349186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz VALIDATION_ERROR_00090); 33502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 33532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 33542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 33572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); 33582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 33602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->commandBufferCount; i++) { 33612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AllocateCommandBuffer(device, pAllocateInfo->commandPool, pCommandBuffers[i], 33622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, pAllocateInfo->level); 33632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33692faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *pAllocateInfo, 33702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDescriptorSet *pDescriptorSets) { 33712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 33722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3373186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00908); 337445e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pAllocateInfo->descriptorPool, 33752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false); 33762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++) { 337745e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pAllocateInfo->pSetLayouts[i], 33782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT, false); 33792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 33822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 33832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = 33862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets); 33872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (VK_SUCCESS == result) { 33892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 33902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++) { 33912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski AllocateDescriptorSet(device, pAllocateInfo->descriptorPool, pDescriptorSets[i], 33922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT); 33932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 33952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 33962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 33972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 33982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 33992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34002faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, 34012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkCommandBuffer *pCommandBuffers) { 34022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 34032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3404186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, false, VALIDATION_ERROR_00099); 3405186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00098); 34062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < commandBufferCount; i++) { 34072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateCommandBuffer(device, commandPool, pCommandBuffers[i]); 34082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 341070b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski for (uint32_t i = 0; i < commandBufferCount; i++) { 34116e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski DestroyObject(device, pCommandBuffers[i], VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, nullptr); 341270b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski } 341370b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski 34142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!skip_call) { 34162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device) 34172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); 34182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34202faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySwapchainKHR(VkDevice device, VkSwapchainKHR swapchain, const VkAllocationCallbacks *pAllocator) { 34212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 34232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A swapchain's images are implicitly deleted when the swapchain is deleted. 34242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this swapchain's images from our map of such images. 34252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unordered_map<uint64_t, OBJTRACK_NODE *>::iterator itr = device_data->swapchainImageMap.begin(); 34262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->swapchainImageMap.end()) { 34272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 34282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(swapchain)) { 34292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski delete pNode; 34302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto delete_item = itr++; 34312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->swapchainImageMap.erase(delete_item); 34322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } else { 34332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ++itr; 34342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34365af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, swapchain, VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT, pAllocator); 34372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroySwapchainKHR(device, swapchain, pAllocator); 34402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34422faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, 34432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDescriptorSet *pDescriptorSets) { 34442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 34452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 34462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3447186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 3448186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, false, VALIDATION_ERROR_00924); 3449186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00923); 34502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < descriptorSetCount; i++) { 34512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateDescriptorSet(device, descriptorPool, pDescriptorSets[i]); 34522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 345470b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski for (uint32_t i = 0; i < descriptorSetCount; i++) { 34556e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski DestroyObject(device, pDescriptorSets[i], VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, nullptr); 345670b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski } 345770b40903b507b29b971069949ca446fc5899b72cMark Lobodzinski 34582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!skip_call) { 34602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski result = get_dispatch_table(ot_device_table_map, device) 34612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); 34622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 34642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34662faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 34672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 34682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 34692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3471186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00904); 3472186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 3473186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, true, VALIDATION_ERROR_00905); 34742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 34762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 34772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A DescriptorPool's descriptor sets are implicitly deleted when the pool is deleted. 34792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this pool's descriptor sets from our descriptorSet map. 34802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 34812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unordered_map<uint64_t, OBJTRACK_NODE *>::iterator itr = 34822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].begin(); 34832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT].end()) { 34842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 34852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto del_itr = itr++; 34862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(descriptorPool)) { 34875af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, (VkDescriptorSet)((*del_itr).first), 34886e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT, nullptr); 34892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 34915af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, descriptorPool, VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT, pAllocator); 34922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 34932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool, pAllocator); 34942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 34952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 34962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks *pAllocator) { 34972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = false; 34992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3500186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00080); 3501186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, true, VALIDATION_ERROR_00081); 35022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 35042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return; 35052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // A CommandPool's command buffers are implicitly deleted when the pool is deleted. 35082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // Remove this pool's cmdBuffers from our cmd buffer map. 35092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto itr = device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].begin(); 35102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski auto del_itr = itr; 35112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski while (itr != device_data->object_map[VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT].end()) { 35122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski OBJTRACK_NODE *pNode = (*itr).second; 35132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski del_itr = itr++; 35142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pNode->parent_object == reinterpret_cast<uint64_t &>(commandPool)) { 35152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski skip_call |= ValidateCommandBuffer(device, commandPool, reinterpret_cast<VkCommandBuffer>((*del_itr).first)); 35165af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, reinterpret_cast<VkCommandBuffer>((*del_itr).first), 35176e17c244b21ce43ac57404a00a0d844039eed363Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, nullptr); 35182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35205af529785b0cad133c4e30f9bdee2dd112a1dd9eChris Forbes DestroyObject(device, commandPool, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT, pAllocator); 35212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski get_dispatch_table(ot_device_table_map, device)->DestroyCommandPool(device, commandPool, pAllocator); 35232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35252faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount, 35262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkImage *pSwapchainImages) { 35272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 35282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 352945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 35302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 35322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 35332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 35352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); 35362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pSwapchainImages != NULL) { 35372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t i = 0; i < *pSwapchainImageCount; i++) { 35392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski CreateSwapchainImageObject(device, pSwapchainImages[i], swapchain); 35402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 35442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35462faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 35472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkGraphicsPipelineCreateInfo *pCreateInfos, 35482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 35492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 35502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3551186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00519); 35522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos) { 35532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { 35542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].basePipelineHandle) { 355545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].basePipelineHandle, 35562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, true); 35572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].layout) { 355945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].layout, 35602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 35612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].pStages) { 35632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < pCreateInfos[idx0].stageCount; ++idx1) { 35642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].pStages[idx1].module) { 356545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].pStages[idx1].module, 35662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, false); 35672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].renderPass) { 357145e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].renderPass, 35722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT, false); 35732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pipelineCache) { 3577186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 3578186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, true, VALIDATION_ERROR_00520); 35792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 35822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 35832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 35852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 35862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 35872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 35882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx2 = 0; idx2 < createInfoCount; ++idx2) { 35892cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, pPipelines[idx2], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 35902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 35922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 35932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 35942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 35952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 35962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 35972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkComputePipelineCreateInfo *pCreateInfos, 35982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 35992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski bool skip_call = VK_FALSE; 36002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3601186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false, VALIDATION_ERROR_00486); 36022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos) { 36032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx0 = 0; idx0 < createInfoCount; ++idx0) { 36042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].basePipelineHandle) { 360545e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].basePipelineHandle, 36062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, true); 36072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].layout) { 360945e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].layout, 36102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT, false); 36112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pCreateInfos[idx0].stage.module) { 361345e190cb1b90dcbe568e8d458605dbf727b1f594Chris Forbes skip_call |= ValidateObject(device, pCreateInfos[idx0].stage.module, 36142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT, false); 36152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (pipelineCache) { 3619186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz skip_call |= 3620186ccd82a0c427f01ac37fd7a8d9b52caf7c11afKarl Schultz ValidateObject(device, pipelineCache, VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT, true, VALIDATION_ERROR_00487); 36212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 36232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (skip_call) { 36242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 36252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device) 36272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 36282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.lock(); 36292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (result == VK_SUCCESS) { 36302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski for (uint32_t idx1 = 0; idx1 < createInfoCount; ++idx1) { 36312cafb02d5b2a01121088987b40dd74e4977cdbfdChris Forbes CreateObject(device, pPipelines[idx1], VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT, pAllocator); 36322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 36342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski lock.unlock(); 36352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return result; 36362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 36372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 363867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski// VK_EXT_debug_marker Extension 363967b33e122ab5a2887c7849f0e2833107b7c88b82Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, VkDebugMarkerObjectTagInfoEXT *pTagInfo) { 364067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski bool skip_call = VK_FALSE; 364167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 364267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 364367b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski lock.unlock(); 364467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (skip_call) { 364567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 364667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski } 364767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->DebugMarkerSetObjectTagEXT(device, pTagInfo); 364867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return result; 364967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski} 365067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski 365167b33e122ab5a2887c7849f0e2833107b7c88b82Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, VkDebugMarkerObjectNameInfoEXT *pNameInfo) { 365267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski bool skip_call = VK_FALSE; 365367b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 365467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 365567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski lock.unlock(); 365667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (skip_call) { 365767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 365867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski } 365967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->DebugMarkerSetObjectNameEXT(device, pNameInfo); 366067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return result; 366167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski} 366267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski 366367b33e122ab5a2887c7849f0e2833107b7c88b82Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { 366467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski bool skip_call = VK_FALSE; 366567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 366667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 366767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski lock.unlock(); 366867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!skip_call) { 366967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); 367067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski } 367167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski} 367267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski 367367b33e122ab5a2887c7849f0e2833107b7c88b82Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDebugMarkerEndEXT(VkCommandBuffer commandBuffer) { 367467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski bool skip_call = VK_FALSE; 367567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 367667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 367767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski lock.unlock(); 367867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!skip_call) { 367967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDebugMarkerEndEXT(commandBuffer); 368067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski } 368167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski} 368267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski 368367b33e122ab5a2887c7849f0e2833107b7c88b82Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { 368467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski bool skip_call = VK_FALSE; 368567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 368667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, false); 368767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski lock.unlock(); 368867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!skip_call) { 368967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer)->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); 369067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski } 369167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski} 369267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski 3693c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski// VK_NV_external_memory_capabilities Extension 3694c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV( 3695c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, 3696c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, 3697c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) { 3698c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski 3699c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski bool skip_call = false; 3700c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski { 3701c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski std::lock_guard<std::mutex> lock(global_lock); 3702c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski skip_call |= ValidateObject(physicalDevice, physicalDevice, VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, false); 3703c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski } 3704c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski if (skip_call) { 3705c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 3706c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski } 3707c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski VkResult result = get_dispatch_table(ot_instance_table_map, physicalDevice) 3708c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski ->GetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, 3709c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski externalHandleType, pExternalImageFormatProperties); 3710c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski return result; 3711c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski} 3712c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski 37135968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 37145968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski// VK_NV_external_memory_win32 Extension 37155968893580b5497045d66c4de0bac94f79cea6a1Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(VkDevice device, VkDeviceMemory memory, 37165968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE *pHandle) { 37175968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski bool skip_call = VK_FALSE; 37185968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 37195968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski skip_call |= ValidateObject(device, device, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 37205968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski skip_call |= ValidateObject(device, memory, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT, false); 37215968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski lock.unlock(); 37225968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski if (skip_call) { 37235968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski return VK_ERROR_VALIDATION_FAILED_EXT; 37245968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski } 37255968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski VkResult result = get_dispatch_table(ot_device_table_map, device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle); 37265968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski return result; 37275968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski} 37285968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 37295968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski 3730570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski// VK_AMD_draw_indirect_count Extension 3731570bcbe019cb5490b512ee75728e516508648844Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 3732570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski VkBuffer countBuffer, VkDeviceSize countBufferOffset, uint32_t maxDrawCount, 3733570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski uint32_t stride) { 3734570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski bool skip_call = VK_FALSE; 3735570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3736570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 3737570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 3738570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski lock.unlock(); 3739570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski if (!skip_call) { 3740570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 3741570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski ->CmdDrawIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); 3742570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski } 3743570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski} 3744570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski 3745570bcbe019cb5490b512ee75728e516508648844Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirectCountAMD(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 3746570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski VkBuffer countBuffer, VkDeviceSize countBufferOffset, 3747570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski uint32_t maxDrawCount, uint32_t stride) { 3748570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski bool skip_call = VK_FALSE; 3749570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski std::unique_lock<std::mutex> lock(global_lock); 3750570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, commandBuffer, VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT, false); 3751570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski skip_call |= ValidateObject(commandBuffer, buffer, VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT, false); 3752570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski lock.unlock(); 3753570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski if (!skip_call) { 3754570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski get_dispatch_table(ot_device_table_map, commandBuffer) 3755570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski ->CmdDrawIndexedIndirectCountAMD(commandBuffer, buffer, offset, countBuffer, countBufferOffset, maxDrawCount, stride); 3756570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski } 3757570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski} 3758570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski 3759570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski 37602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptCoreDeviceCommand(const char *name) { 37612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!name || name[0] != 'v' || name[1] != 'k') 37622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 37632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 37642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski name += 2; 37652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceProcAddr")) 37662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceProcAddr; 37672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDevice")) 37682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDevice; 37692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceQueue")) 37702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceQueue; 37712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueSubmit")) 37722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueSubmit; 37732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueWaitIdle")) 37742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueWaitIdle; 37752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DeviceWaitIdle")) 37762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DeviceWaitIdle; 37772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateMemory")) 37782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateMemory; 37792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeMemory")) 37802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeMemory; 37812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "MapMemory")) 37822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)MapMemory; 37832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "UnmapMemory")) 37842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)UnmapMemory; 37852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FlushMappedMemoryRanges")) 37862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FlushMappedMemoryRanges; 37872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "InvalidateMappedMemoryRanges")) 37882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)InvalidateMappedMemoryRanges; 37892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetDeviceMemoryCommitment")) 37902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetDeviceMemoryCommitment; 37912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BindBufferMemory")) 37922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BindBufferMemory; 37932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BindImageMemory")) 37942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BindImageMemory; 37952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetBufferMemoryRequirements")) 37962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetBufferMemoryRequirements; 37972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageMemoryRequirements")) 37982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageMemoryRequirements; 37992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageSparseMemoryRequirements")) 38002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageSparseMemoryRequirements; 38012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "QueueBindSparse")) 38022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)QueueBindSparse; 38032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateFence")) 38042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateFence; 38052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyFence")) 38062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyFence; 38072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetFences")) 38082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetFences; 38092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetFenceStatus")) 38102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetFenceStatus; 38112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "WaitForFences")) 38122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)WaitForFences; 38132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateSemaphore")) 38142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateSemaphore; 38152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroySemaphore")) 38162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroySemaphore; 38172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateEvent")) 38182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateEvent; 38192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyEvent")) 38202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyEvent; 38212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetEventStatus")) 38222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetEventStatus; 38232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "SetEvent")) 38242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)SetEvent; 38252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetEvent")) 38262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetEvent; 38272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateQueryPool")) 38282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateQueryPool; 38292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyQueryPool")) 38302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyQueryPool; 38312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetQueryPoolResults")) 38322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetQueryPoolResults; 38332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateBuffer")) 38342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateBuffer; 38352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyBuffer")) 38362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyBuffer; 38372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateBufferView")) 38382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateBufferView; 38392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyBufferView")) 38402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyBufferView; 38412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateImage")) 38422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateImage; 38432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyImage")) 38442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyImage; 38452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetImageSubresourceLayout")) 38462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetImageSubresourceLayout; 38472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateImageView")) 38482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateImageView; 38492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyImageView")) 38502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyImageView; 38512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateShaderModule")) 38522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateShaderModule; 38532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyShaderModule")) 38542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyShaderModule; 38552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreatePipelineCache")) 38562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreatePipelineCache; 38572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipelineCache")) 38582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipelineCache; 38592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPipelineCacheData")) 38602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPipelineCacheData; 38612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "MergePipelineCaches")) 38622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)MergePipelineCaches; 38632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateGraphicsPipelines")) 38642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateGraphicsPipelines; 38652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateComputePipelines")) 38662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateComputePipelines; 38672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipeline")) 38682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipeline; 38692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreatePipelineLayout")) 38702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreatePipelineLayout; 38712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyPipelineLayout")) 38722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyPipelineLayout; 38732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateSampler")) 38742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateSampler; 38752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroySampler")) 38762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroySampler; 38772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDescriptorSetLayout")) 38782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDescriptorSetLayout; 38792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDescriptorSetLayout")) 38802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDescriptorSetLayout; 38812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDescriptorPool")) 38822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDescriptorPool; 38832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyDescriptorPool")) 38842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyDescriptorPool; 38852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetDescriptorPool")) 38862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetDescriptorPool; 38872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateDescriptorSets")) 38882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateDescriptorSets; 38892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeDescriptorSets")) 38902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeDescriptorSets; 38912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "UpdateDescriptorSets")) 38922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)UpdateDescriptorSets; 38932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateFramebuffer")) 38942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateFramebuffer; 38952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyFramebuffer")) 38962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyFramebuffer; 38972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateRenderPass")) 38982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateRenderPass; 38992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyRenderPass")) 39002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyRenderPass; 39012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetRenderAreaGranularity")) 39022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetRenderAreaGranularity; 39032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateCommandPool")) 39042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateCommandPool; 39052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyCommandPool")) 39062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyCommandPool; 39072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetCommandPool")) 39082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetCommandPool; 39092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "AllocateCommandBuffers")) 39102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)AllocateCommandBuffers; 39112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "FreeCommandBuffers")) 39122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)FreeCommandBuffers; 39132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "BeginCommandBuffer")) 39142faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)BeginCommandBuffer; 39152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EndCommandBuffer")) 39162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EndCommandBuffer; 39172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "ResetCommandBuffer")) 39182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)ResetCommandBuffer; 39192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindPipeline")) 39202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindPipeline; 39212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetViewport")) 39222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetViewport; 39232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetScissor")) 39242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetScissor; 39252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetLineWidth")) 39262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetLineWidth; 39272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetDepthBias")) 39282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetDepthBias; 39292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetBlendConstants")) 39302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetBlendConstants; 39312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetDepthBounds")) 39322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetDepthBounds; 39332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilCompareMask")) 39342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilCompareMask; 39352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilWriteMask")) 39362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilWriteMask; 39372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetStencilReference")) 39382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetStencilReference; 39392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindDescriptorSets")) 39402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindDescriptorSets; 39412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindIndexBuffer")) 39422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindIndexBuffer; 39432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBindVertexBuffers")) 39442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBindVertexBuffers; 39452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDraw")) 39462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDraw; 39472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndexed")) 39482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndexed; 39492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndirect")) 39502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndirect; 39512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDrawIndexedIndirect")) 39522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndexedIndirect; 39532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDispatch")) 39542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDispatch; 39552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdDispatchIndirect")) 39562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdDispatchIndirect; 39572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyBuffer")) 39582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyBuffer; 39592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyImage")) 39602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyImage; 39612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBlitImage")) 39622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBlitImage; 39632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyBufferToImage")) 39642faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyBufferToImage; 39652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyImageToBuffer")) 39662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyImageToBuffer; 39672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdUpdateBuffer")) 39682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdUpdateBuffer; 39692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdFillBuffer")) 39702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdFillBuffer; 39712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearColorImage")) 39722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearColorImage; 39732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearDepthStencilImage")) 39742faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearDepthStencilImage; 39752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdClearAttachments")) 39762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdClearAttachments; 39772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResolveImage")) 39782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResolveImage; 39792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdSetEvent")) 39802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdSetEvent; 39812faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResetEvent")) 39822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResetEvent; 39832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdWaitEvents")) 39842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdWaitEvents; 39852faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdPipelineBarrier")) 39862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdPipelineBarrier; 39872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBeginQuery")) 39882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBeginQuery; 39892faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdEndQuery")) 39902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdEndQuery; 39912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdResetQueryPool")) 39922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdResetQueryPool; 39932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdWriteTimestamp")) 39942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdWriteTimestamp; 39952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdCopyQueryPoolResults")) 39962faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdCopyQueryPoolResults; 39972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdPushConstants")) 39982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdPushConstants; 39992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdBeginRenderPass")) 40002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdBeginRenderPass; 40012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdNextSubpass")) 40022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdNextSubpass; 40032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdEndRenderPass")) 40042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdEndRenderPass; 40052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CmdExecuteCommands")) 40062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CmdExecuteCommands; 400767b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!strcmp(name, "DebugMarkerSetObjectTagEXT")) 400867b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return (PFN_vkVoidFunction)DebugMarkerSetObjectTagEXT; 400967b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!strcmp(name, "DebugMarkerSetObjectNameEXT")) 401067b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return (PFN_vkVoidFunction)DebugMarkerSetObjectNameEXT; 401167b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!strcmp(name, "CmdDebugMarkerBeginEXT")) 401267b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return (PFN_vkVoidFunction)CmdDebugMarkerBeginEXT; 401367b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!strcmp(name, "CmdDebugMarkerEndEXT")) 401467b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return (PFN_vkVoidFunction)CmdDebugMarkerEndEXT; 401567b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski if (!strcmp(name, "CmdDebugMarkerInsertEXT")) 401667b33e122ab5a2887c7849f0e2833107b7c88b82Mark Lobodzinski return (PFN_vkVoidFunction)CmdDebugMarkerInsertEXT; 40175968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 40185968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski if (!strcmp(name, "GetMemoryWin32HandleNV")) 40195968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski return (PFN_vkVoidFunction)GetMemoryWin32HandleNV; 40205968893580b5497045d66c4de0bac94f79cea6a1Mark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 4021570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski if (!strcmp(name, "CmdDrawIndirectCountAMD")) 4022570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndirectCountAMD; 4023570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski if (!strcmp(name, "CmdDrawIndexedIndirectCountAMD")) 4024570bcbe019cb5490b512ee75728e516508648844Mark Lobodzinski return (PFN_vkVoidFunction)CmdDrawIndexedIndirectCountAMD; 40252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 40272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptCoreInstanceCommand(const char *name) { 40292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!name || name[0] != 'v' || name[1] != 'k') 40302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 40312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski name += 2; 40332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateInstance")) 40342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateInstance; 40352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "DestroyInstance")) 40362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)DestroyInstance; 40372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumeratePhysicalDevices")) 40382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumeratePhysicalDevices; 40392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceFeatures")) 40402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceFeatures; 40412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceFormatProperties")) 40422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceFormatProperties; 40432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceImageFormatProperties")) 40442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceImageFormatProperties; 40452faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceProperties")) 40462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceProperties; 40472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceQueueFamilyProperties")) 40482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceQueueFamilyProperties; 40492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceMemoryProperties")) 40502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceMemoryProperties; 40512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetInstanceProcAddr")) 40522faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetInstanceProcAddr; 40532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "CreateDevice")) 40542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)CreateDevice; 40552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateInstanceExtensionProperties")) 40562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateInstanceExtensionProperties; 40572faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateInstanceLayerProperties")) 40582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateInstanceLayerProperties; 40592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "EnumerateDeviceLayerProperties")) 40602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)EnumerateDeviceLayerProperties; 40612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceSparseImageFormatProperties")) 40622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceSparseImageFormatProperties; 4063c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski if (!strcmp(name, "GetPhysicalDeviceExternalImageFormatPropertiesNV")) 4064c8ee4de7ba52dc63915176ddee6ed0bedc6f079dMark Lobodzinski return (PFN_vkVoidFunction)GetPhysicalDeviceExternalImageFormatPropertiesNV; 40652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 40672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40692faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinskistatic inline PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkDevice device) { 40702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (device) { 40712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 407219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 407319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_enabled) { 407419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkCreateSwapchainKHR", name)) 407519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR); 407619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkDestroySwapchainKHR", name)) 407719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(DestroySwapchainKHR); 407819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkGetSwapchainImagesKHR", name)) 407919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR); 408019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkAcquireNextImageKHR", name)) 408119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImageKHR); 408219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkQueuePresentKHR", name)) 408319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(QueuePresentKHR); 408419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 408519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 408619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_display_swapchain_enabled) { 408719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkCreateSharedSwapchainsKHR", name)) { 408819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(CreateSharedSwapchainsKHR); 408919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 409019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 409119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 40922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return nullptr; 40942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 40952faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 40962faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) { 40972faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkVoidFunction addr; 40982faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreDeviceCommand(funcName); 40992faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 41002faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 41012faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41022faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(device); 41032faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41042faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, device); 41052faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 41062faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 41072faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41082faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (get_dispatch_table(ot_device_table_map, device)->GetDeviceProcAddr == NULL) { 41092faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 41102faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41112faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return get_dispatch_table(ot_device_table_map, device)->GetDeviceProcAddr(device, funcName); 41122faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41132faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41142faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) { 41152faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski PFN_vkVoidFunction addr; 41162faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreInstanceCommand(funcName); 41172faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!addr) { 41182faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptCoreDeviceCommand(funcName); 41192faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41202faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (!addr) { 41212faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, VkDevice(VK_NULL_HANDLE)); 41222faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41232faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 41242faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 41252faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41262faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(instance); 41272faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41282faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptMsgCallbackGetProcAddrCommand(funcName, instance); 41292faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 41302faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 41312faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41322faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski addr = InterceptWsiEnabledCommand(funcName, instance); 41332faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (addr) { 41342faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return addr; 41352faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41362faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski if (get_dispatch_table(ot_instance_table_map, instance)->GetInstanceProcAddr == NULL) { 41372faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return NULL; 41382faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski } 41392faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return get_dispatch_table(ot_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName); 41402faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41412faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41422faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} // namespace object_tracker 41432faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41442faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// vk_layer_logging.h expects these to be defined 41452faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(VkInstance instance, 41462faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 41472faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 41482faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportCallbackEXT *pMsgCallback) { 41492faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback); 41502faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41512faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41522faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 41532faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 41542faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_tracker::DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 41552faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41562faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41572faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 41582faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 41592faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 41602faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski object_tracker::DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 41612faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41622faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41632faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski// Loader-layer interface v0, just wrappers since there is only a layer 41642faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 41652faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 41662faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties); 41672faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41682faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41692faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount, 41702faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 41712faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateInstanceLayerProperties(pCount, pProperties); 41722faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41732faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41742faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 41752faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkLayerProperties *pProperties) { 41762faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // The layer command handles VK_NULL_HANDLE just fine internally 41772faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice == VK_NULL_HANDLE); 41782faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties); 41792faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41802faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41812faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) { 41822faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::GetDeviceProcAddr(dev, funcName); 41832faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41842faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41852faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { 41862faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::GetInstanceProcAddr(instance, funcName); 41872faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski} 41882faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski 41892faa21475b11e094bb4a82cb7d370b9da1609623Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, 41902faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski const char *pLayerName, uint32_t *pCount, 41912faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski VkExtensionProperties *pProperties) { 41922faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski // The layer command handles VK_NULL_HANDLE just fine internally 41932faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski assert(physicalDevice == VK_NULL_HANDLE); 41942faa21475b11e094bb4a82cb7d370b9da1609623Mark Lobodzinski return object_tracker::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties); 4195564a5f5d53d8cb073aed3f78d39dd72be96af362Mark Lobodzinski} 4196