1288e4f7d378f9185c714ead36a17dff64be24e49Mark Lobodzinski/* Copyright (c) 2015-2016 The Khronos Group Inc. 2288e4f7d378f9185c714ead36a17dff64be24e49Mark Lobodzinski * Copyright (c) 2015-2016 Valve Corporation 3288e4f7d378f9185c714ead36a17dff64be24e49Mark Lobodzinski * Copyright (c) 2015-2016 LunarG, Inc. 4288e4f7d378f9185c714ead36a17dff64be24e49Mark Lobodzinski * Copyright (C) 2015-2016 Google Inc. 5c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes * 643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Licensed under the Apache License, Version 2.0 (the "License"); 743b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * you may not use this file except in compliance with the License. 843b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * You may obtain a copy of the License at 9c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes * 1043b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * http://www.apache.org/licenses/LICENSE-2.0 11c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes * 1243b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * Unless required by applicable law or agreed to in writing, software 1343b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * distributed under the License is distributed on an "AS IS" BASIS, 1443b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1543b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * See the License for the specific language governing permissions and 1643b53e83705f02245da6ae61e31273866a35b833Jon Ashburn * limitations under the License. 1796cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter * 1896cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter * Author: Jeremy Hayes <jeremy@lunarg.com> 1996cd795bb585711057cd90d37a2251419384c937Courtney Goeltzenleuchter * Author: Tony Barbour <tony@LunarG.com> 20b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski * Author: Mark Lobodzinski <mark@LunarG.com> 21c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves * Author: Dustin Graves <dustin@lunarg.com> 22c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes */ 23c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 249d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves#define NOMINMAX 259d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 269d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves#include <math.h> 27c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <stdio.h> 28c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <stdlib.h> 29c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <string.h> 30c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 31c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <iostream> 32c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <string> 33c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes#include <sstream> 343723c5196d245599b2af381a218a417d7340b622Mark Lobodzinski#include <unordered_map> 3584db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine#include <unordered_set> 36ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes#include <vector> 37c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 387a51d9001436476d50118230d5b2a4ebcc929b79Tobin Ehlis#include "vk_loader_platform.h" 39329ca9eb16cdbee7a7644fb08ade7b3d3bb32e23David Pinedo#include "vulkan/vk_layer.h" 4056d204acf07fe1639103ab9326886f3c06dbbb76Tobin Ehlis#include "vk_layer_config.h" 419cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include "vk_enum_validate_helper.h" 429cc421eb545767e22fd723dc573a7a3225261b1cCourtney Goeltzenleuchter#include "vk_struct_validate_helper.h" 43c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4456d204acf07fe1639103ab9326886f3c06dbbb76Tobin Ehlis#include "vk_layer_table.h" 4556d204acf07fe1639103ab9326886f3c06dbbb76Tobin Ehlis#include "vk_layer_data.h" 4656d204acf07fe1639103ab9326886f3c06dbbb76Tobin Ehlis#include "vk_layer_logging.h" 4724d5abbfcd268bbff2ee978111bcca9a7e6c99ecCourtney Goeltzenleuchter#include "vk_layer_extension_utils.h" 48b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski#include "vk_layer_utils.h" 49c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 503755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves#include "parameter_name.h" 511c3335744fd8c4b4299d64153d5d3b411f8f3fa5Mark Lobodzinski#include "parameter_validation.h" 52c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 53e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wunamespace parameter_validation { 54c5ef2f000603a3e52647b44b3910e2cb6a0143fcDustin Graves 5573bb657499347bd40990c742af60e63bb03426f3Cody Northropstruct layer_data { 56e5ed0a0317fff097249065194049a589c0a3a3b2Chia-I Wu VkInstance instance; 57e5ed0a0317fff097249065194049a589c0a3a3b2Chia-I Wu 58ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes debug_report_data *report_data; 59acb1359c8e1528e5d67bb0101c94c48a07785098Courtney Goeltzenleuchter std::vector<VkDebugReportCallbackEXT> logging_callback; 6073bb657499347bd40990c742af60e63bb03426f3Cody Northrop 61f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // The following are for keeping track of the temporary callbacks that can 62f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // be used in vkCreateInstance and vkDestroyInstance: 63f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott uint32_t num_tmp_callbacks; 64f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott VkDebugReportCallbackCreateInfoEXT *tmp_dbg_create_infos; 65f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott VkDebugReportCallbackEXT *tmp_callbacks; 66f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott 67491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn // TODO: Split instance/device structs 68491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn // Device Data 69491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn // Map for queue family index to queue count 701595771772e0563fd9071b15e61e2825ab4754afMichael Lentine std::unordered_map<uint32_t, uint32_t> queueFamilyIndexMap; 713d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski VkPhysicalDeviceLimits device_limits; 729a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski VkPhysicalDeviceFeatures physical_device_features; 739a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski VkPhysicalDevice physical_device; 741595771772e0563fd9071b15e61e2825ab4754afMichael Lentine 758c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski bool wsi_enabled; 7619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young bool wsi_display_swapchain_enabled; 778c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 783d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski layer_data() 799a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski : report_data(nullptr), num_tmp_callbacks(0), tmp_dbg_create_infos(nullptr), tmp_callbacks(nullptr), device_limits{}, 8019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young physical_device_features{}, physical_device{}, wsi_enabled(false), wsi_display_swapchain_enabled(false) {}; 8173bb657499347bd40990c742af60e63bb03426f3Cody Northrop}; 82ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 83956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic std::unordered_map<void *, struct instance_extension_enables> instance_extension_map; 84491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::unordered_map<void *, layer_data *> layer_data_map; 85ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayesstatic device_table_map pc_device_table_map; 86ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayesstatic instance_table_map pc_instance_table_map; 87ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 88ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes// "my instance data" 89491a3cd11793892b996a8b5771479cc539198f99Jon Ashburndebug_report_data *mid(VkInstance object) { 90ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes dispatch_key key = get_dispatch_key(object); 918354e02a8b03ff1f427f632029305e88ab158f30Tobin Ehlis layer_data *data = get_my_data_ptr(key, layer_data_map); 92ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes#if DISPATCH_MAP_DEBUG 93414e9a4117b500eac650d8b8f01a6e1b22d05aaeMark Mueller fprintf(stderr, "MID: map: 0x%p, object: 0x%p, key: 0x%p, data: 0x%p\n", &layer_data_map, object, key, data); 94ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes#endif 95eb456c6843454b301551381be33e192541b2d289Courtney Goeltzenleuchter assert(data != NULL); 96ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 97ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return data->report_data; 98ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 99ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 100ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes// "my device data" 101491a3cd11793892b996a8b5771479cc539198f99Jon Ashburndebug_report_data *mdd(void *object) { 102ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes dispatch_key key = get_dispatch_key(object); 103ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes layer_data *data = get_my_data_ptr(key, layer_data_map); 104ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes#if DISPATCH_MAP_DEBUG 105414e9a4117b500eac650d8b8f01a6e1b22d05aaeMark Mueller fprintf(stderr, "MDD: map: 0x%p, object: 0x%p, key: 0x%p, data: 0x%p\n", &layer_data_map, object, key, data); 106ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes#endif 107eb456c6843454b301551381be33e192541b2d289Courtney Goeltzenleuchter assert(data != NULL); 108ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return data->report_data; 109ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 110ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1111c3335744fd8c4b4299d64153d5d3b411f8f3fa5Mark Lobodzinskistatic void init_parameter_validation(layer_data *my_data, const VkAllocationCallbacks *pAllocator) { 112d11c4ee2bd2a5672093d76630d895e824ee1a571Mark Lobodzinski 1131c3335744fd8c4b4299d64153d5d3b411f8f3fa5Mark Lobodzinski layer_debug_actions(my_data->report_data, my_data->logging_callback, pAllocator, "lunarg_parameter_validation"); 114ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 115ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 116956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDebugReportCallbackEXT(VkInstance instance, 117956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 118956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 119956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDebugReportCallbackEXT *pMsgCallback) { 120b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); 121491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback); 122ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 123491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (result == VK_SUCCESS) { 124b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 125c34ab18ac7c064590a1020a8db4b6abf5a8d3a18Mark Lobodzinski result = layer_create_msg_callback(data->report_data, false, pCreateInfo, pAllocator, pMsgCallback); 126ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 127ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 128ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 129ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 130ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 131956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 1327b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator) { 133b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); 134acb1359c8e1528e5d67bb0101c94c48a07785098Courtney Goeltzenleuchter pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 135ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 136b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 137f6a6e223b7ca92b5e3c8b05331b500ab8f01116aCourtney Goeltzenleuchter layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator); 138ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 139ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 140956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 141956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 142956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 143b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); 144b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 1455a424cea2014b643e6bd6e2ae480c730bc6496afCourtney Goeltzenleuchter} 1465a424cea2014b643e6bd6e2ae480c730bc6496afCourtney Goeltzenleuchter 147491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic const VkExtensionProperties instance_extensions[] = {{VK_EXT_DEBUG_REPORT_EXTENSION_NAME, VK_EXT_DEBUG_REPORT_SPEC_VERSION}}; 148ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1499ace83be45008ae7c9a15b79d7e867b1914dca33Chia-I Wustatic const VkLayerProperties global_layer = { 150f1ea418f193d10a8455cdf47e0eeeeb1f4d8b5bfJon Ashburn "VK_LAYER_LUNARG_parameter_validation", VK_LAYER_API_VERSION, 1, "LunarG Validation Layer", 1519ace83be45008ae7c9a15b79d7e867b1914dca33Chia-I Wu}; 152491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 153491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkFormatFeatureFlagBits const &enumerator) { 154752957901902cd3de9b99ef272d7b7fbaeef2705Courtney Goeltzenleuchter VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)( 155491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT | VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT | 156491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT | 157491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT | VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT | 158491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT | VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT | 159491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_FORMAT_FEATURE_BLIT_SRC_BIT | VK_FORMAT_FEATURE_BLIT_DST_BIT | 160bd897d82d89ac576544e8b2aad1136edbee0e6f2Jon Ashburn VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT); 161491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 162ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 163ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 164ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 165ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 166ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 167ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 168491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkFormatFeatureFlagBits const &enumerator) { 169491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 170ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 171ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 172ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 173ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 174491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT) { 175e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT"); 176ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 177491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT) { 178e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT"); 179ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 180491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT) { 181e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT"); 182ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 183491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT) { 184e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT"); 185e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 186491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT) { 187e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT"); 188e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 189491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT) { 190e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT"); 191e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 192491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT) { 193e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT"); 194e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 195491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT) { 196e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT"); 197e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 198491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT) { 199e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT"); 200e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 201491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT) { 202e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT"); 203ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 204491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT) { 2051f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT"); 2069e8b03f513e5ca515b99f4bf90b27634cee31453Cody Northrop } 207491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT) { 2081f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT"); 2099e8b03f513e5ca515b99f4bf90b27634cee31453Cody Northrop } 210491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT) { 211bd897d82d89ac576544e8b2aad1136edbee0e6f2Jon Ashburn strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT"); 212bd897d82d89ac576544e8b2aad1136edbee0e6f2Jon Ashburn } 213ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 214ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 215491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 216ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 217ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 218491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 219ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 220ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 221ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 222ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 223ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 224ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 225ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 226491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkImageUsageFlagBits const &enumerator) { 227491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)( 228491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT | VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | 229491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_USAGE_STORAGE_BIT | VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT | 230491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT); 231491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 232ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 233ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 234ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 235ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 236ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 237ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 238491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkImageUsageFlagBits const &enumerator) { 239491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 240ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 241ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 242ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 243ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 244491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) { 245e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT"); 246ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 247491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT) { 248c3b8eea2f5e66db11651068575f4712cf195f542Courtney Goeltzenleuchter strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT"); 249ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 250491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) { 251e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT"); 252ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 253491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_STORAGE_BIT) { 254e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT"); 255ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 256491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_SAMPLED_BIT) { 257e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT"); 258e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 259491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT) { 2601f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT"); 261e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 262491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT) { 263e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT"); 264e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 265491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT) { 2661f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT"); 267e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 268ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 269ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 270491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 271ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 272ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 273491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 274ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 275ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 276ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 277ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 278ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 279ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 280ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 281491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkQueueFlagBits const &enumerator) { 282491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkQueueFlagBits allFlags = 283491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn (VkQueueFlagBits)(VK_QUEUE_TRANSFER_BIT | VK_QUEUE_COMPUTE_BIT | VK_QUEUE_SPARSE_BINDING_BIT | VK_QUEUE_GRAPHICS_BIT); 284491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 285ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 286ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 287ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 288ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 289ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 290ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 291491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkQueueFlagBits const &enumerator) { 292491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 293ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 294ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 295ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 296ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 297491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUEUE_TRANSFER_BIT) { 298c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_QUEUE_TRANSFER_BIT"); 299ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 300491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUEUE_COMPUTE_BIT) { 301e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUEUE_COMPUTE_BIT"); 302ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 303491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUEUE_SPARSE_BINDING_BIT) { 3047e470703805a7c93655ea18f553e225e84356429Chia-I Wu strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT"); 305ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 306491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUEUE_GRAPHICS_BIT) { 307e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUEUE_GRAPHICS_BIT"); 308ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 309ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 310ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 311491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 312ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 313ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 314491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 315ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 316ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 317ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 318ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 319ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 320ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 321ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 322491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkMemoryPropertyFlagBits const &enumerator) { 323491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)( 324491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | 325491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_MEMORY_PROPERTY_HOST_CACHED_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT); 326491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 327ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 328ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 329ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 330ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 331ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 332ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 333491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkMemoryPropertyFlagBits const &enumerator) { 334491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 335ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 336ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 337ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 338ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 339491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT) { 340e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT"); 341ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 342491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT) { 34327d8ed9a91356894ae00fefedc7ef7895e796efeChia-I Wu strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT"); 344ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 345491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) { 346e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT"); 347ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 348491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT) { 34927d8ed9a91356894ae00fefedc7ef7895e796efeChia-I Wu strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT"); 350ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 351491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) { 35227d8ed9a91356894ae00fefedc7ef7895e796efeChia-I Wu strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT"); 353ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 354ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 355ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 356491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 357ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 358ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 359491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 360ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 361ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 362ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 363ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 364ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 365ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 366ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 367491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkMemoryHeapFlagBits const &enumerator) { 368b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT); 369491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 370ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 371ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 372ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 373ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 374ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 375ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 376491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkMemoryHeapFlagBits const &enumerator) { 377491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 378ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 379ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 380ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 381ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 382491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT) { 38327d8ed9a91356894ae00fefedc7ef7895e796efeChia-I Wu strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT"); 384ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 385e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 386e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 387491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 388e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 389e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 390491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 391e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 392e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 393ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 394e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 395e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 396e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 397e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 398491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkSparseImageFormatFlagBits const &enumerator) { 399491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkSparseImageFormatFlagBits allFlags = 400491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT | 401491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT | VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT); 402491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 403ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 404ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 405ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 406ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 407ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 408ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 409491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkSparseImageFormatFlagBits const &enumerator) { 410491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 411ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 412ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 413ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 414ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 415491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT) { 4167e470703805a7c93655ea18f553e225e84356429Chia-I Wu strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT"); 417c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 418491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT) { 4197e470703805a7c93655ea18f553e225e84356429Chia-I Wu strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT"); 420c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 421491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT) { 4227e470703805a7c93655ea18f553e225e84356429Chia-I Wu strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT"); 423ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 424ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 425ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 426491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 427ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 428ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 429491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 430ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 431ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 432ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 433ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 434ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 435ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 436ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 437491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkFenceCreateFlagBits const &enumerator) { 438b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT); 439491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 440e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return false; 441ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 442e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 443e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 444e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 445e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 446491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkFenceCreateFlagBits const &enumerator) { 447491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 448e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 449ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 450e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 451e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 452491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_FENCE_CREATE_SIGNALED_BIT) { 453e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT"); 454ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 455ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 456ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 457491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 458ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 459ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 460491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 461ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 462ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 463ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 464ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 465ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 466ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 467ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 468491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const &enumerator) { 469491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)( 470491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT | VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT | 471491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT | VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT | 472491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT | VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT | 473491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT | VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT | 474b93427cf68ff3e8bde88e0f89379cc56a32fcd2cCourtney Goeltzenleuchter VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT | 475b93427cf68ff3e8bde88e0f89379cc56a32fcd2cCourtney Goeltzenleuchter VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT | 476b93427cf68ff3e8bde88e0f89379cc56a32fcd2cCourtney Goeltzenleuchter VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT); 477491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 478ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 479ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 480ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 481ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 482ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 483ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 484491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const &enumerator) { 485491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 486ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 487ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 488ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 489ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 490491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT) { 491b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT"); 492b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 493491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT) { 494b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT"); 495b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 496491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT) { 497b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT"); 498b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 499491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT) { 500b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT"); 501b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 502491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT) { 503b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT"); 504b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 505491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT) { 506b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT"); 507b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 508491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT) { 509b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT"); 510b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 511491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT) { 512b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT"); 513b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 514491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT) { 515b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT"); 516b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 517491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT) { 518b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT"); 519b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 520491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT) { 521b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT"); 522ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 523ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 524ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 525491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 526ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 527ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 528491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 529ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 530ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 531ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 532ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 533ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 534ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 535ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 536491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkQueryResultFlagBits const &enumerator) { 537491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT | VK_QUERY_RESULT_WITH_AVAILABILITY_BIT | 538491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_QUERY_RESULT_WAIT_BIT | VK_QUERY_RESULT_64_BIT); 539491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 540ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 541ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 542ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 543ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 544ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 545ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 546491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkQueryResultFlagBits const &enumerator) { 547491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 548ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 549ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 550ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 551ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 552491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_RESULT_PARTIAL_BIT) { 553e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT"); 554c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 555491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT) { 556e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT"); 557c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 558491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_RESULT_WAIT_BIT) { 559e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUERY_RESULT_WAIT_BIT"); 560c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 561491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_RESULT_64_BIT) { 562e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_QUERY_RESULT_64_BIT"); 563ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 564ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 565ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 566491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 567ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 568ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 569491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 570ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 571ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 572ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 573ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 574ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 575ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 576ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 577491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkBufferUsageFlagBits const &enumerator) { 578491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)( 579491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT | 580491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT | 581491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT); 582491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 583ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 584ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 585ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 586ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 587ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 588ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 589491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkBufferUsageFlagBits const &enumerator) { 590491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 591ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 592ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 593ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 594ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 595491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT) { 596e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT"); 597ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 598491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT) { 599e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT"); 600e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 601491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT) { 602e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT"); 603e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 604491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT) { 605e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT"); 606e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 607491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT) { 608e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT"); 609e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 610491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT) { 6111f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT"); 612e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 613491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT) { 614e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT"); 615e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 616491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT) { 6171f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT"); 618e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 619491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT) { 620e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT"); 621e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 622ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 623ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 624491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 625ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 626ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 627491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 628ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 629ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 630ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 631ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 632ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 633ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 634ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 635491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkBufferCreateFlagBits const &enumerator) { 636491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)( 637491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_BUFFER_CREATE_SPARSE_ALIASED_BIT | VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT | VK_BUFFER_CREATE_SPARSE_BINDING_BIT); 638491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 639ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 640ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 641ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 642ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 643ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 644ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 645491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkBufferCreateFlagBits const &enumerator) { 646491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 647ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 648ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 649ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 650ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 651491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT) { 652e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT"); 653ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 654491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT) { 655e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT"); 656e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 657491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT) { 658c6d66ec0af7b6b7f912919977b3ce401b8d6f95dCourtney Goeltzenleuchter strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT"); 659ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 660ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 661ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 662491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 663ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 664ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 665491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 666ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 667ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 668ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 669ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 670ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 671ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 672ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 673491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkImageCreateFlagBits const &enumerator) { 674491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)( 675491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT | VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT | 676491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT | VK_IMAGE_CREATE_SPARSE_BINDING_BIT); 677491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 678ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 679ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 680ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 681ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 682ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 683ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 684491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkImageCreateFlagBits const &enumerator) { 685491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 686ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 687ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 688ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 689ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 690491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) { 691e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT"); 692ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 693491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT) { 694e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT"); 695ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 696491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT) { 697e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT"); 698e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 699491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT) { 700e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT"); 701e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 702491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) { 703c6d66ec0af7b6b7f912919977b3ce401b8d6f95dCourtney Goeltzenleuchter strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT"); 704ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 705ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 706ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 707491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 708ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 709ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 710491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 711ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 712ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 713ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 714ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 715ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 716ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 717ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 718491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkColorComponentFlagBits const &enumerator) { 719491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT | VK_COLOR_COMPONENT_B_BIT | 720491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_R_BIT); 721491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 722c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return false; 723c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 724c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 725c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 726c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 727c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 728491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkColorComponentFlagBits const &enumerator) { 729491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 730c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return "unrecognized enumerator"; 731c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 732c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 733c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::vector<std::string> strings; 734491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COLOR_COMPONENT_A_BIT) { 735c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_COLOR_COMPONENT_A_BIT"); 736c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 737491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COLOR_COMPONENT_B_BIT) { 738c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_COLOR_COMPONENT_B_BIT"); 739c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 740491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COLOR_COMPONENT_G_BIT) { 741c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_COLOR_COMPONENT_G_BIT"); 742e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 743491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COLOR_COMPONENT_R_BIT) { 744c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_COLOR_COMPONENT_R_BIT"); 745c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 746c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 747c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::string enumeratorString; 748491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 749c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += string; 750c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 751491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 752c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += '|'; 753c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 754c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 755c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 756c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return enumeratorString; 757c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 758c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 759491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkPipelineCreateFlagBits const &enumerator) { 760491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)( 761491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_CREATE_DERIVATIVE_BIT | VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT | VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT); 762491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 763c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return false; 764c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 765c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 766c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 767c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 768c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 769491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkPipelineCreateFlagBits const &enumerator) { 770491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 771c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return "unrecognized enumerator"; 772c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 773c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 774c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::vector<std::string> strings; 775491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT) { 776e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT"); 777e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 778491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT) { 779e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT"); 780e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 781491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT) { 782e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT"); 783c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 784c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 785c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::string enumeratorString; 786491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 787c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += string; 788c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 789491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 790c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += '|'; 791c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 792c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 793c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 794c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return enumeratorString; 795c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 796c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 797491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkShaderStageFlagBits const &enumerator) { 798491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)( 799491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_SHADER_STAGE_ALL | VK_SHADER_STAGE_FRAGMENT_BIT | VK_SHADER_STAGE_GEOMETRY_BIT | VK_SHADER_STAGE_COMPUTE_BIT | 800491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT | VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_VERTEX_BIT); 801491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 802ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 803ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 804ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 805ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 806ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 807ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 808491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkShaderStageFlagBits const &enumerator) { 809491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 810ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 811ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 812ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 813ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 814491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_ALL) { 815e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_SHADER_STAGE_ALL"); 816ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 817491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_FRAGMENT_BIT) { 818e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT"); 819ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 820491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_GEOMETRY_BIT) { 821e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT"); 822ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 823491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_COMPUTE_BIT) { 824e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT"); 825ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 826491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) { 827c6fd2263876bb25d6ab7f2bfb76e6eab7b0d8053Courtney Goeltzenleuchter strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT"); 828ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 829491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) { 830c6fd2263876bb25d6ab7f2bfb76e6eab7b0d8053Courtney Goeltzenleuchter strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT"); 831ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 832491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_SHADER_STAGE_VERTEX_BIT) { 833e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_SHADER_STAGE_VERTEX_BIT"); 834ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 835ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 836ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 837491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 838c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += string; 839c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 840491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 841c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += '|'; 842c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 843c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 844c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 845c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return enumeratorString; 846c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 847c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 848491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkPipelineStageFlagBits const &enumerator) { 849cba6cea253a2c957d32251a1d0a455684a053539Chia-I Wu VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)( 850491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_ALL_COMMANDS_BIT | VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT | VK_PIPELINE_STAGE_HOST_BIT | 851491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT | VK_PIPELINE_STAGE_TRANSFER_BIT | VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT | 852491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT | 853491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT | VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT | 854491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT | VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT | 855491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_PIPELINE_STAGE_VERTEX_SHADER_BIT | VK_PIPELINE_STAGE_VERTEX_INPUT_BIT | VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT | 856d3892692719770ca6cefb3d41071ce295e1be560Jon Ashburn VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT); 857491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 858ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 859ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 860ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 861ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 862ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 863ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 864491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkPipelineStageFlagBits const &enumerator) { 865491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 866ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 867ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 868ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 869ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 870491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT) { 871cba6cea253a2c957d32251a1d0a455684a053539Chia-I Wu strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT"); 872cba6cea253a2c957d32251a1d0a455684a053539Chia-I Wu } 873491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT) { 874cba6cea253a2c957d32251a1d0a455684a053539Chia-I Wu strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT"); 875ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 876491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_HOST_BIT) { 877e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_HOST_BIT"); 878ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 879491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT) { 880e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT"); 881ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 882491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT) { 883e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT"); 884ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 885491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT) { 886d3892692719770ca6cefb3d41071ce295e1be560Jon Ashburn strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT"); 887ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 888491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT) { 889e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT"); 890ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 891491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT) { 892e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT"); 893ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 894491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT) { 895c6fd2263876bb25d6ab7f2bfb76e6eab7b0d8053Courtney Goeltzenleuchter strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT"); 896e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 897491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT) { 898e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT"); 899e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 900491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT) { 901e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT"); 902e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 903491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT) { 904e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT"); 905e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 906491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT) { 907b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT"); 908e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 909491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT) { 910e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT"); 911e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 912491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT) { 913e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT"); 914e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 915491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT) { 916e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT"); 917e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 918491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT) { 919e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT"); 920ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 921ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 922ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 923491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 924ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 925ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 926491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 927ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 928ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 929ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 930ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 931ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 932ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 933ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 934491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkAccessFlagBits const &enumerator) { 935989de845e6627fecee8dceef882955149b7538baChia-I Wu VkAccessFlagBits allFlags = (VkAccessFlagBits)( 936491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_ACCESS_INDIRECT_COMMAND_READ_BIT | VK_ACCESS_INDEX_READ_BIT | VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT | 937491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_ACCESS_UNIFORM_READ_BIT | VK_ACCESS_INPUT_ATTACHMENT_READ_BIT | VK_ACCESS_SHADER_READ_BIT | VK_ACCESS_SHADER_WRITE_BIT | 938491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | 939491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT | VK_ACCESS_TRANSFER_READ_BIT | VK_ACCESS_TRANSFER_WRITE_BIT | 940491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_ACCESS_HOST_READ_BIT | VK_ACCESS_HOST_WRITE_BIT | VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT); 941491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 942491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 943ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return false; 944ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 945ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 946ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return true; 947ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 948ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 949491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkAccessFlagBits const &enumerator) { 950491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 951ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return "unrecognized enumerator"; 952ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 953ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 954ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::vector<std::string> strings; 955491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT) { 956989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT"); 957c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 958491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_INDEX_READ_BIT) { 959989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_INDEX_READ_BIT"); 960ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 961491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT) { 962989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT"); 963ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 964491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_UNIFORM_READ_BIT) { 965989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_UNIFORM_READ_BIT"); 966ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 967491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT) { 968989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT"); 969ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 970491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_SHADER_READ_BIT) { 971989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_SHADER_READ_BIT"); 972ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 973491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_SHADER_WRITE_BIT) { 974989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_SHADER_WRITE_BIT"); 975ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 976491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT) { 977989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT"); 978ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 979491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT) { 980989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT"); 981ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 982491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT) { 983989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT"); 984ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 985491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT) { 986989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT"); 987ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 988491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_TRANSFER_READ_BIT) { 989989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_TRANSFER_READ_BIT"); 990ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 991491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_TRANSFER_WRITE_BIT) { 992989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT"); 993ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 994491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_HOST_READ_BIT) { 995989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_HOST_READ_BIT"); 996ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 997491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_HOST_WRITE_BIT) { 998989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_HOST_WRITE_BIT"); 999ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1000491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_MEMORY_READ_BIT) { 1001989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_MEMORY_READ_BIT"); 1002ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1003491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_ACCESS_MEMORY_WRITE_BIT) { 1004989de845e6627fecee8dceef882955149b7538baChia-I Wu strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT"); 1005ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1006ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1007ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes std::string enumeratorString; 1008491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1009ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += string; 1010ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1011491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1012ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes enumeratorString += '|'; 1013ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1014ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1015ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1016ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return enumeratorString; 1017ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1018ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1019491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkCommandPoolCreateFlagBits const &enumerator) { 1020491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkCommandPoolCreateFlagBits allFlags = 1021491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT | VK_COMMAND_POOL_CREATE_TRANSIENT_BIT); 1022491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1023c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return false; 1024c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 1025c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1026c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 1027c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 1028c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1029491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkCommandPoolCreateFlagBits const &enumerator) { 1030491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1031c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return "unrecognized enumerator"; 1032c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 1033c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1034c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::vector<std::string> strings; 1035491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT) { 10361f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT"); 1037e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1038491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT) { 10391f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT"); 1040c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 1041c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1042c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes std::string enumeratorString; 1043491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1044c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += string; 1045c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1046491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1047c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes enumeratorString += '|'; 1048c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 1049c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes } 1050c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1051c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return enumeratorString; 1052c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 1053c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1054491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkCommandPoolResetFlagBits const &enumerator) { 1055b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT); 1056491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1057e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return false; 1058ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1059ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1060e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 1061ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1062ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1063491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkCommandPoolResetFlagBits const &enumerator) { 1064491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1065e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 1066ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1067ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1068e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 1069491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT) { 10701f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT"); 1071ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1072ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1073e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 1074491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1075e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 1076ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1077491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1078e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 1079e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1080e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1081ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1082e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 1083ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1084ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1085491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkCommandBufferUsageFlags const &enumerator) { 1086491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkCommandBufferUsageFlags allFlags = 1087491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT | VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT | 1088491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT); 1089491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1090c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return false; 1091ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1092c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1093c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 1094ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1095ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1096491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkCommandBufferUsageFlags const &enumerator) { 1097491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1098e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 1099e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1100ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1101e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 1102491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT) { 11031f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT"); 1104e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1105491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT) { 11061f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT"); 1107e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1108491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT) { 11091f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT"); 1110e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1111e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1112e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 1113491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1114e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 1115e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1116491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1117e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 1118e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1119e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1120e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1121e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 1122e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1123e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1124491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkCommandBufferResetFlagBits const &enumerator) { 1125b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT); 1126491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1127e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return false; 1128e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1129e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1130e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 1131e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1132e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1133491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkCommandBufferResetFlagBits const &enumerator) { 1134491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1135e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 1136e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1137e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1138e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 1139491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT) { 11401f85191a3a8479194ecb7b937aee284cf80cf08fChia-I Wu strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT"); 1141e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1142e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1143e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 1144491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1145e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 1146e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1147491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1148e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 1149e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1150e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1151e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1152e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 1153e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1154e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1155491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkImageAspectFlagBits const &enumerator) { 1156491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | 1157491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_COLOR_BIT); 1158491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1159e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return false; 1160e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1161e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1162e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 1163e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1164e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1165491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkImageAspectFlagBits const &enumerator) { 1166491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1167e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 1168e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1169e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1170e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 1171491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_ASPECT_METADATA_BIT) { 1172e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT"); 1173e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1174491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_ASPECT_STENCIL_BIT) { 1175e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT"); 1176e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1177491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_ASPECT_DEPTH_BIT) { 1178e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT"); 1179e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1180491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_IMAGE_ASPECT_COLOR_BIT) { 1181e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT"); 1182e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1183e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1184e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 1185491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1186e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 1187e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1188491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1189e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 1190e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1191e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1192e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1193e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 1194e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1195e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1196491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic bool ValidateEnumerator(VkQueryControlFlagBits const &enumerator) { 1197b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT); 1198491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & (~allFlags)) { 1199e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return false; 1200e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1201e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1202e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 1203e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1204e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1205491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnstatic std::string EnumeratorString(VkQueryControlFlagBits const &enumerator) { 1206491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (!ValidateEnumerator(enumerator)) { 1207e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return "unrecognized enumerator"; 1208e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1209e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1210e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::vector<std::string> strings; 1211491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (enumerator & VK_QUERY_CONTROL_PRECISE_BIT) { 1212c51b121913d6f21ccefb3f7595178d3c87e11de4Chia-I Wu strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT"); 1213e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1214e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1215e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes std::string enumeratorString; 1216491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn for (auto const &string : strings) { 1217e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += string; 1218e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1219491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (string != strings.back()) { 1220e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes enumeratorString += '|'; 1221e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1222e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 1223e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1224e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return enumeratorString; 1225e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1226e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1227b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinskistatic const int MaxParamCheckerStringLength = 256; 1228b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 12293755690f21851fc9a325acf2f6a68c680e40fe0dDustin Gravesstatic bool validate_string(debug_report_data *report_data, const char *apiName, const ParameterName &stringName, 1230bb84994a71bd9b17b407ac33eb82020014b8126aDustin Graves const char *validateString) { 12310a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(apiName != nullptr); 12320a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(validateString != nullptr); 12330a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1234956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1235b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1236b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski VkStringErrorFlags result = vk_string_validate(MaxParamCheckerStringLength, validateString); 1237b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1238b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski if (result == VK_STRING_ERROR_NONE) { 1239956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski return skip_call; 1240b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } else if (result & VK_STRING_ERROR_LENGTH) { 12413755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 12423755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call = log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 12433755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves INVALID_USAGE, LayerName, "%s: string %s exceeds max length %d", apiName, stringName.get_name().c_str(), 12443755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves MaxParamCheckerStringLength); 1245b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } else if (result & VK_STRING_ERROR_BAD_DATA) { 12463755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call = log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 12473755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves INVALID_USAGE, LayerName, "%s: string %s contains invalid characters or is badly formed", apiName, 12483755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves stringName.get_name().c_str()); 1249b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } 1250956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski return skip_call; 1251b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski} 1252b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1253fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Gravesstatic bool validate_queue_family_index(layer_data *device_data, const char *function_name, const char *parameter_name, 1254fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves uint32_t index) { 1255fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves assert(device_data != nullptr); 1256fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves debug_report_data *report_data = device_data->report_data; 1257fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves bool skip_call = false; 1258fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 1259fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves if (index == VK_QUEUE_FAMILY_IGNORED) { 1260825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, LayerName, 1261825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "%s: %s cannot be VK_QUEUE_FAMILY_IGNORED.", function_name, parameter_name); 1262fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } else { 1263fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves const auto &queue_data = device_data->queueFamilyIndexMap.find(index); 1264fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves if (queue_data == device_data->queueFamilyIndexMap.end()) { 1265fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 1266825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "%s: %s (%d) must be one of the indices specified when the device was created, via " 1267825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "the VkDeviceQueueCreateInfo structure.", 1268fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves function_name, parameter_name, index); 1269fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves return false; 1270fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1271fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1272fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 1273fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves return skip_call; 1274fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves} 1275fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 1276fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Gravesstatic bool validate_queue_family_indices(layer_data *device_data, const char *function_name, const char *parameter_name, 1277fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves const uint32_t count, const uint32_t *indices) { 1278fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves assert(device_data != nullptr); 1279fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves debug_report_data *report_data = device_data->report_data; 1280fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves bool skip_call = false; 1281fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 1282fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves if (indices != nullptr) { 1283fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves for (uint32_t i = 0; i < count; i++) { 1284fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves if (indices[i] == VK_QUEUE_FAMILY_IGNORED) { 1285825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 1286825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "%s: %s[%d] cannot be VK_QUEUE_FAMILY_IGNORED.", function_name, parameter_name, i); 1287fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } else { 1288fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves const auto &queue_data = device_data->queueFamilyIndexMap.find(indices[i]); 1289fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves if (queue_data == device_data->queueFamilyIndexMap.end()) { 1290fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 1291825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "%s: %s[%d] (%d) must be one of the indices specified when the device was " 1292825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "created, via the VkDeviceQueueCreateInfo structure.", 1293fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves function_name, parameter_name, i, indices[i]); 1294fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves return false; 1295fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1296fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1297fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1298fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves } 1299fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 1300fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves return skip_call; 1301fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves} 1302fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves 13034b8a786c1c7a5ffb01a03078cacadfc2359a1c4aMark Lobodzinskistatic void CheckInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance); 13044b8a786c1c7a5ffb01a03078cacadfc2359a1c4aMark Lobodzinski 1305956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateInstance(const VkInstanceCreateInfo *pCreateInfo, const VkAllocationCallbacks *pAllocator, 1306956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkInstance *pInstance) { 130780c0deae33503793ae085e775d75d77134ce7a54Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1308e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1309491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 13100a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(chain_info != nullptr); 13110a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(chain_info->u.pLayerInfo != nullptr); 13120a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1313491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 1314491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance)fpGetInstanceProcAddr(NULL, "vkCreateInstance"); 131580c0deae33503793ae085e775d75d77134ce7a54Dustin Graves if (fpCreateInstance == NULL) { 131680c0deae33503793ae085e775d75d77134ce7a54Dustin Graves return VK_ERROR_INITIALIZATION_FAILED; 131780c0deae33503793ae085e775d75d77134ce7a54Dustin Graves } 13182bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 131980c0deae33503793ae085e775d75d77134ce7a54Dustin Graves // Advance the link info for the next element on the chain 132080c0deae33503793ae085e775d75d77134ce7a54Dustin Graves chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 13212bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 132280c0deae33503793ae085e775d75d77134ce7a54Dustin Graves result = fpCreateInstance(pCreateInfo, pAllocator, pInstance); 13232bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1324e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves if (result == VK_SUCCESS) { 1325e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map); 1326e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_instance_data != nullptr); 13270a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1328e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map); 13292bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1330e5ed0a0317fff097249065194049a589c0a3a3b2Chia-I Wu my_instance_data->instance = *pInstance; 1331e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves my_instance_data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionCount, 1332e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves pCreateInfo->ppEnabledExtensionNames); 1333b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1334f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Look for one or more debug report create info structures 1335f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // and setup a callback(s) for each one found. 1336f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (!layer_copy_tmp_callbacks(pCreateInfo->pNext, &my_instance_data->num_tmp_callbacks, 1337f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott &my_instance_data->tmp_dbg_create_infos, &my_instance_data->tmp_callbacks)) { 1338f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (my_instance_data->num_tmp_callbacks > 0) { 1339f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Setup the temporary callback(s) here to catch early issues: 1340f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (layer_enable_tmp_callbacks(my_instance_data->report_data, my_instance_data->num_tmp_callbacks, 1341f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott my_instance_data->tmp_dbg_create_infos, my_instance_data->tmp_callbacks)) { 1342f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Failure of setting up one or more of the callback. 1343f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Therefore, clean up and don't use those callbacks: 1344f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott layer_free_tmp_callbacks(my_instance_data->tmp_dbg_create_infos, my_instance_data->tmp_callbacks); 1345f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott my_instance_data->num_tmp_callbacks = 0; 1346f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1347f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1348f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1349f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott 1350e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves init_parameter_validation(my_instance_data, pAllocator); 13514b8a786c1c7a5ffb01a03078cacadfc2359a1c4aMark Lobodzinski CheckInstanceRegisterExtensions(pCreateInfo, *pInstance); 13522bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1353e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves // Ordinarily we'd check these before calling down the chain, but none of the layer 1354e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves // support is in place until now, if we survive we can report the issue now. 1355e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves parameter_validation_vkCreateInstance(my_instance_data->report_data, pCreateInfo, pAllocator, pInstance); 135680c0deae33503793ae085e775d75d77134ce7a54Dustin Graves 1357e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves if (pCreateInfo->pApplicationInfo) { 1358e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves if (pCreateInfo->pApplicationInfo->pApplicationName) { 1359e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_string(my_instance_data->report_data, "vkCreateInstance", 1360e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves "pCreateInfo->VkApplicationInfo->pApplicationName", 1361e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves pCreateInfo->pApplicationInfo->pApplicationName); 1362e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves } 13637b8770828012dce4593a05d8f3f90f703a734e14Courtney Goeltzenleuchter 1364e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves if (pCreateInfo->pApplicationInfo->pEngineName) { 1365e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_string(my_instance_data->report_data, "vkCreateInstance", "pCreateInfo->VkApplicationInfo->pEngineName", 1366e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves pCreateInfo->pApplicationInfo->pEngineName); 1367e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves } 1368cc8ae37e066787d702adff224677ca6a3872dd9aCourtney Goeltzenleuchter } 1369f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott 1370f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Disable the tmp callbacks: 1371f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (my_instance_data->num_tmp_callbacks > 0) { 1372f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott layer_disable_tmp_callbacks(my_instance_data->report_data, my_instance_data->num_tmp_callbacks, 1373f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott my_instance_data->tmp_callbacks); 1374f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 13757b8770828012dce4593a05d8f3f90f703a734e14Courtney Goeltzenleuchter } 13767b8770828012dce4593a05d8f3f90f703a734e14Courtney Goeltzenleuchter 13772bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter return result; 1378e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1379e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 13807b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL DestroyInstance(VkInstance instance, const VkAllocationCallbacks *pAllocator) { 1381e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes // Grab the key before the instance is destroyed. 1382e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes dispatch_key key = get_dispatch_key(instance); 1383956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1384b57dd740fcf98ba3c3f4f2ce1dc4a168b4204765Courtney Goeltzenleuchter layer_data *my_data = get_my_data_ptr(key, layer_data_map); 13853e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 13863e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1387f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Enable the temporary callback(s) here to catch vkDestroyInstance issues: 1388f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott bool callback_setup = false; 1389f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (my_data->num_tmp_callbacks > 0) { 1390f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (!layer_enable_tmp_callbacks(my_data->report_data, my_data->num_tmp_callbacks, my_data->tmp_dbg_create_infos, 1391f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott my_data->tmp_callbacks)) { 1392f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott callback_setup = true; 1393f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1394f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1395f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott 1396956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyInstance(my_data->report_data, pAllocator); 13973e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1398f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott // Disable and cleanup the temporary callback(s): 1399f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (callback_setup) { 1400f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott layer_disable_tmp_callbacks(my_data->report_data, my_data->num_tmp_callbacks, my_data->tmp_callbacks); 1401f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1402f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott if (my_data->num_tmp_callbacks > 0) { 1403f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott layer_free_tmp_callbacks(my_data->tmp_dbg_create_infos, my_data->tmp_callbacks); 1404f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott my_data->num_tmp_callbacks = 0; 1405f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott } 1406f0c42bb0a2bb448cacc157a158e9fc08171f8c6bIan Elliott 1407956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1408491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); 14093e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves pTable->DestroyInstance(instance, pAllocator); 14103e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 14113e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves // Clean up logging callback, if any 14123e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves while (my_data->logging_callback.size() > 0) { 1413491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkDebugReportCallbackEXT callback = my_data->logging_callback.back(); 1414491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_destroy_msg_callback(my_data->report_data, callback, pAllocator); 14153e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves my_data->logging_callback.pop_back(); 14163e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 1417e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 14183e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves layer_debug_report_destroy_instance(mid(instance)); 14193e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves layer_data_map.erase(pTable); 1420e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 14213e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves pc_instance_table_map.erase(key); 1422875879e1a033b5d4b6c5f2ec644cf6dfdd5d59d7Tony Barbour layer_data_map.erase(key); 14233e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 1424ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1425ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 14269a5429d278c2afe9fb382d52fb4f325975d82b18Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumeratePhysicalDevices(VkInstance instance, uint32_t *pPhysicalDeviceCount, 14279a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski VkPhysicalDevice *pPhysicalDevices) { 1428491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1429956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1430491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 1431c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1432c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1433956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkEnumeratePhysicalDevices(my_data->report_data, pPhysicalDeviceCount, pPhysicalDevices); 1434c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1435956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1436491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_instance_table_map, instance) 1437491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices); 1438e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1439e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkEnumeratePhysicalDevices", result); 14409a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski if ((result == VK_SUCCESS) && (NULL != pPhysicalDevices)) { 14419a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski for (uint32_t i = 0; i < *pPhysicalDeviceCount; i++) { 14429a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski layer_data *phy_dev_data = get_my_data_ptr(get_dispatch_key(pPhysicalDevices[i]), layer_data_map); 14439a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski // Save the supported features for each physical device 14449a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski VkLayerInstanceDispatchTable *disp_table = get_dispatch_table(pc_instance_table_map, pPhysicalDevices[i]); 14459a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski disp_table->GetPhysicalDeviceFeatures(pPhysicalDevices[i], &(phy_dev_data->physical_device_features)); 14469a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 14479a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 1448c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1449e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 1450e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1451e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1452956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFeatures(VkPhysicalDevice physicalDevice, VkPhysicalDeviceFeatures *pFeatures) { 1453956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1454491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1455c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1456c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1457956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceFeatures(my_data->report_data, pFeatures); 1458c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1459956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1460c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures); 1461c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1462e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1463e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1464956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 1465956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkFormatProperties *pFormatProperties) { 1466956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1467491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1468c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1469c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1470956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceFormatProperties(my_data->report_data, format, pFormatProperties); 1471c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1472956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1473491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_instance_table_map, physicalDevice) 1474491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties); 1475c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1476ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1477ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1478956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 1479956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageType type, VkImageTiling tiling, 1480956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageUsageFlags usage, VkImageCreateFlags flags, 1481956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageFormatProperties *pImageFormatProperties) { 1482491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1483956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1484491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1485c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1486c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1487956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceImageFormatProperties(my_data->report_data, format, type, tiling, usage, 1488956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski flags, pImageFormatProperties); 1489c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1490956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1491491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_instance_table_map, physicalDevice) 1492491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, 1493491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn pImageFormatProperties); 1494ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1495e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkGetPhysicalDeviceImageFormatProperties", result); 1496c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 14975202c54bd0212e17a51d6183e9a7ecd9517f233cChia-I Wu 14985202c54bd0212e17a51d6183e9a7ecd9517f233cChia-I Wu return result; 1499ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1500ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1501956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceProperties(VkPhysicalDevice physicalDevice, VkPhysicalDeviceProperties *pProperties) { 1502956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1503491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1504c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1505c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1506956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceProperties(my_data->report_data, pProperties); 1507ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1508956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1509c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties); 1510c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1511ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1512ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1513956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceQueueFamilyProperties(VkPhysicalDevice physicalDevice, 1514956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t *pQueueFamilyPropertyCount, 1515956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkQueueFamilyProperties *pQueueFamilyProperties) { 1516956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1517491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1518c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1519c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1520956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceQueueFamilyProperties(my_data->report_data, pQueueFamilyPropertyCount, 1521956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pQueueFamilyProperties); 1522c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1523956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1524491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_instance_table_map, physicalDevice) 1525491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pQueueFamilyPropertyCount, pQueueFamilyProperties); 1526ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1527ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1528ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1529956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceMemoryProperties(VkPhysicalDevice physicalDevice, 1530956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkPhysicalDeviceMemoryProperties *pMemoryProperties) { 1531956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1532491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 1533c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1534c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1535956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceMemoryProperties(my_data->report_data, pMemoryProperties); 1536e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1537956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1538491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_instance_table_map, physicalDevice) 1539491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties); 1540c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1541e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1542e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1543491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnvoid validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, 1544491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn const std::vector<VkQueueFamilyProperties> properties) { 154584db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine std::unordered_set<uint32_t> set; 15460a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 15470a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if ((pCreateInfo != nullptr) && (pCreateInfo->pQueueCreateInfos != nullptr)) { 15480a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) { 15490a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) { 1550ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1551825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 15520a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this " 15530a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves "structure.", 15540a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves i); 15550a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } else { 15560a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex); 1557297587825976827b18a69a1cb42f9fa9a11e32c6Michael Lentine } 15580a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 15590a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if (pCreateInfo->pQueueCreateInfos[i].pQueuePriorities != nullptr) { 15600a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves for (uint32_t j = 0; j < pCreateInfo->pQueueCreateInfos[i].queueCount; ++j) { 15610a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if ((pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] < 0.f) || 15620a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves (pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] > 1.f)) { 1563ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 1564825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski __LINE__, INVALID_USAGE, LayerName, 15650a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->pQueuePriorities[%d], must be " 15660a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves "between 0 and 1. Actual value is %f", 15670a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves i, j, pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j]); 15680a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 15690a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 15700a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 15710a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 15720a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if (pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex >= properties.size()) { 15730a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves log_msg( 1574ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1575825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 1576491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex cannot be more than the number " 1577491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "of queue families.", 1578491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn i); 15790a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } else if (pCreateInfo->pQueueCreateInfos[i].queueCount > 15800a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves properties[pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex].queueCount) { 15810a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves log_msg( 1582ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1583825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 1584491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount cannot be more than the number of " 1585491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "queues for the given family index.", 1586491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn i); 15870a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 1588a1cde23fac60d07c0d77a776eb2399dae73bde60Michael Lentine } 158984db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine } 159084db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine} 159184db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine 15928c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinskistatic void CheckInstanceRegisterExtensions(const VkInstanceCreateInfo *pCreateInfo, VkInstance instance) { 1593956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkLayerInstanceDispatchTable *dispatch_table = get_dispatch_table(pc_instance_table_map, instance); 15948c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 1595956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table] = {}; 15968c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 15978c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 15988c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SURFACE_EXTENSION_NAME) == 0) { 1599956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].wsi_enabled = true; 16008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16018c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 16028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XLIB_SURFACE_EXTENSION_NAME) == 0) { 1603956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].xlib_enabled = true; 16048c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16058c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16068c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 16078c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_XCB_SURFACE_EXTENSION_NAME) == 0) { 1608956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].xcb_enabled = true; 16098c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16108c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16118c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 16128c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME) == 0) { 1613956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].wayland_enabled = true; 16148c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16158c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 16178c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_MIR_SURFACE_EXTENSION_NAME) == 0) { 1618956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].mir_enabled = true; 16198c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16208c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16218c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 16228c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_ANDROID_SURFACE_EXTENSION_NAME) == 0) { 1623956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].android_enabled = true; 16248c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16258c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16268c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 16278c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_WIN32_SURFACE_EXTENSION_NAME) == 0) { 1628956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski instance_extension_map[dispatch_table].win32_enabled = true; 16298c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16308c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif 16318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 16338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 16348c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinskistatic void CheckDeviceRegisterExtensions(const VkDeviceCreateInfo *pCreateInfo, VkDevice device) { 16358c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 16368c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski device_data->wsi_enabled = false; 163719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = false; 16388c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 16398c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 16408c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_SWAPCHAIN_EXTENSION_NAME) == 0) { 16418c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski device_data->wsi_enabled = true; 16428c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 164319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (strcmp(pCreateInfo->ppEnabledExtensionNames[i], VK_KHR_DISPLAY_SWAPCHAIN_EXTENSION_NAME) == 0) { 164419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young device_data->wsi_display_swapchain_enabled = true; 164519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 16468c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 16478c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 16488c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 1649491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnvoid storeCreateDeviceData(VkDevice device, const VkDeviceCreateInfo *pCreateInfo) { 1650b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 16510a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 16520a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if ((pCreateInfo != nullptr) && (pCreateInfo->pQueueCreateInfos != nullptr)) { 16530a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) { 16540a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves my_device_data->queueFamilyIndexMap.insert( 16550a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves std::make_pair(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex, pCreateInfo->pQueueCreateInfos[i].queueCount)); 16560a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 16571595771772e0563fd9071b15e61e2825ab4754afMichael Lentine } 16581595771772e0563fd9071b15e61e2825ab4754afMichael Lentine} 16591595771772e0563fd9071b15e61e2825ab4754afMichael Lentine 1660956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDevice(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo *pCreateInfo, 16617b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator, VkDevice *pDevice) { 1662f004499e0c232374e63c6ebf3af467d8b3c32a8fCourtney Goeltzenleuchter /* 1663f004499e0c232374e63c6ebf3af467d8b3c32a8fCourtney Goeltzenleuchter * NOTE: We do not validate physicalDevice or any dispatchable 1664f004499e0c232374e63c6ebf3af467d8b3c32a8fCourtney Goeltzenleuchter * object as the first parameter. We couldn't get here if it was wrong! 1665f004499e0c232374e63c6ebf3af467d8b3c32a8fCourtney Goeltzenleuchter */ 16662bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1667b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1668956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1669b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 16700a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(my_instance_data != nullptr); 1671e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 1672956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateDevice(my_instance_data->report_data, pCreateInfo, pAllocator, pDevice); 167380c0deae33503793ae085e775d75d77134ce7a54Dustin Graves 16740a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if (pCreateInfo != NULL) { 16750a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if ((pCreateInfo->enabledLayerCount > 0) && (pCreateInfo->ppEnabledLayerNames != NULL)) { 1676c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves for (size_t i = 0; i < pCreateInfo->enabledLayerCount; i++) { 1677956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= validate_string(my_instance_data->report_data, "vkCreateDevice", "pCreateInfo->ppEnabledLayerNames", 1678956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pCreateInfo->ppEnabledLayerNames[i]); 16790a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 1680c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 16812bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 16820a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves if ((pCreateInfo->enabledExtensionCount > 0) && (pCreateInfo->ppEnabledExtensionNames != NULL)) { 1683c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves for (size_t i = 0; i < pCreateInfo->enabledExtensionCount; i++) { 1684956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= validate_string(my_instance_data->report_data, "vkCreateDevice", 1685956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski "pCreateInfo->ppEnabledExtensionNames", pCreateInfo->ppEnabledExtensionNames[i]); 16860a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves } 1687c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 16882bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter } 16892bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1690956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1691b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO); 16920a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(chain_info != nullptr); 16930a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(chain_info->u.pLayerInfo != nullptr); 16940a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1695b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr; 1696b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr; 1697e5ed0a0317fff097249065194049a589c0a3a3b2Chia-I Wu PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice)fpGetInstanceProcAddr(my_instance_data->instance, "vkCreateDevice"); 1698b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski if (fpCreateDevice == NULL) { 1699b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski return VK_ERROR_INITIALIZATION_FAILED; 1700b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } 1701b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1702b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski // Advance the link info for the next element on the chain 1703b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext; 1704b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1705b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice); 17062bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 1707e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_instance_data->report_data, "vkCreateDevice", result); 17080a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1709e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves if (result == VK_SUCCESS) { 1710e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map); 1711e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_device_data != nullptr); 1712a1cde23fac60d07c0d77a776eb2399dae73bde60Michael Lentine 1713e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice); 1714e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map); 1715e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 17168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski CheckDeviceRegisterExtensions(pCreateInfo, *pDevice); 17178c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 1718e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves uint32_t count; 17193d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski VkLayerInstanceDispatchTable *instance_dispatch_table = get_dispatch_table(pc_instance_table_map, physicalDevice); 17203d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski instance_dispatch_table->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, nullptr); 1721e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves std::vector<VkQueueFamilyProperties> properties(count); 17223d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski instance_dispatch_table->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, &properties[0]); 1723b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 1724e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validateDeviceCreateInfo(physicalDevice, pCreateInfo, properties); 1725e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves storeCreateDeviceData(*pDevice, pCreateInfo); 17263d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski 17273d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski // Query and save physical device limits for this device 17283d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski VkPhysicalDeviceProperties device_properties = {}; 17293d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski instance_dispatch_table->GetPhysicalDeviceProperties(physicalDevice, &device_properties); 17303d547177aa38a05853d13b1d9b1ce80ca9a94d9fMark Lobodzinski memcpy(&my_device_data->device_limits, &device_properties.limits, sizeof(VkPhysicalDeviceLimits)); 17319a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski my_device_data->physical_device = physicalDevice; 173226e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski 173326e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski // Save app-enabled features in this device's layer_data structure 173426e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski if (pCreateInfo->pEnabledFeatures) { 173526e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski my_device_data->physical_device_features = *pCreateInfo->pEnabledFeatures; 173626e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski } else { 173726e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski memset(&my_device_data->physical_device_features, 0, sizeof(VkPhysicalDeviceFeatures)); 173826e15dcde463371a8c1cd5ff1c68d583cb72ed56Mark Lobodzinski } 1739e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves } 1740b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } 174184db6f59e3592edf7ba313c7d67f9db2af82d841Michael Lentine 1742e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 1743e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 1744e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 17457b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL DestroyDevice(VkDevice device, const VkAllocationCallbacks *pAllocator) { 1746e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes dispatch_key key = get_dispatch_key(device); 1747956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 17483e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves layer_data *my_data = get_my_data_ptr(key, layer_data_map); 17493e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 17503e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1751956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyDevice(my_data->report_data, pAllocator); 17523e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1753956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 17543e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves layer_debug_report_destroy_device(device); 17553e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1756e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes#if DISPATCH_MAP_DEBUG 1757414e9a4117b500eac650d8b8f01a6e1b22d05aaeMark Mueller fprintf(stderr, "Device: 0x%p, key: 0x%p\n", device, key); 1758e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes#endif 1759ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1760491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator); 17613e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves pc_device_table_map.erase(key); 176254b6f13e4c26928fcca7b09fa81959a5a062ee96Tony Barbour layer_data_map.erase(key); 17633e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 1764ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1765ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1766491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex) { 1767b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 17680a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves assert(my_device_data != nullptr); 17690a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 1770fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves validate_queue_family_index(my_device_data, "vkGetDeviceQueue", "queueFamilyIndex", queueFamilyIndex); 17710a8fda57046dcafc120dcd2a1b6181c5e239efd2Dustin Graves 177247892024546c67e8db98b51b2ddb962c21088894Mark Lobodzinski const auto &queue_data = my_device_data->queueFamilyIndexMap.find(queueFamilyIndex); 17731595771772e0563fd9071b15e61e2825ab4754afMichael Lentine if (queue_data->second <= queueIndex) { 1774ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, INVALID_USAGE, 1775956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski LayerName, 1776491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "VkGetDeviceQueue parameter, uint32_t queueIndex %d, must be less than the number of queues given when the device " 1777491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "was created.", 1778491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn queueIndex); 17791595771772e0563fd9071b15e61e2825ab4754afMichael Lentine return false; 17801595771772e0563fd9071b15e61e2825ab4754afMichael Lentine } 17811595771772e0563fd9071b15e61e2825ab4754afMichael Lentine return true; 17821595771772e0563fd9071b15e61e2825ab4754afMichael Lentine} 17831595771772e0563fd9071b15e61e2825ab4754afMichael Lentine 1784956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) { 1785956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1786491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1787c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1788c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1789956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetDeviceQueue(my_data->report_data, queueFamilyIndex, queueIndex, pQueue); 1790c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1791956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1792c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreGetDeviceQueue(device, queueFamilyIndex, queueIndex); 17931595771772e0563fd9071b15e61e2825ab4754afMichael Lentine 1794c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue); 1795ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 1796ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1797ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1798956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo *pSubmits, VkFence fence) { 1799491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1800956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1801491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 1802c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1803c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1804956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkQueueSubmit(my_data->report_data, submitCount, pSubmits, fence); 1805c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1806956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1807c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence); 1808ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1809e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkQueueSubmit", result); 1810c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1811ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1812ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1813ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1814ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 18157b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL QueueWaitIdle(VkQueue queue) { 1816e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 1817e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 1818e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 1819b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue); 1820ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1821e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkQueueWaitIdle", result); 1822ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1823ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1824ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1825ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 18267b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL DeviceWaitIdle(VkDevice device) { 1827e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1828e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 1829e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 1830b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device); 1831ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1832e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkDeviceWaitIdle", result); 1833ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1834ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1835ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1836ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 18377b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL AllocateMemory(VkDevice device, const VkMemoryAllocateInfo *pAllocateInfo, 1838956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDeviceMemory *pMemory) { 1839491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1840956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1841491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1842c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1843c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1844956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkAllocateMemory(my_data->report_data, pAllocateInfo, pAllocator, pMemory); 1845c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1846956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1847c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory); 1848c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1849e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkAllocateMemory", result); 1850c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1851ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1852ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1853ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1854ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1855956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks *pAllocator) { 1856956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1857491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 18583e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 18593e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1860956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkFreeMemory(my_data->report_data, memory, pAllocator); 18613e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1862956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1863491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, memory, pAllocator); 18643e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 18653e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 18663e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 1867956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MapMemory(VkDevice device, VkDeviceMemory memory, VkDeviceSize offset, VkDeviceSize size, 1868956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkMemoryMapFlags flags, void **ppData) { 1869491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1870956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1871491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1872c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1873ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1874956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkMapMemory(my_data->report_data, memory, offset, size, flags, ppData); 1875c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1876956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1877c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, memory, offset, size, flags, ppData); 1878c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1879e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkMapMemory", result); 1880c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1881ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1882ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1883ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1884ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 18857b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL UnmapMemory(VkDevice device, VkDeviceMemory memory) { 1886956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1887cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1888cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 1889cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 1890956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkUnmapMemory(my_data->report_data, memory); 1891cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 1892956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1893cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, memory); 1894cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 1895cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves} 1896cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 1897956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 1898956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 1899491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1900956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1901491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1902c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1903c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1904956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkFlushMappedMemoryRanges(my_data->report_data, memoryRangeCount, pMemoryRanges); 1905c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 1906956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1907c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 1908ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1909e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkFlushMappedMemoryRanges", result); 1910c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1911ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1912ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1913ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1914ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1915956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL InvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, 1916956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkMappedMemoryRange *pMemoryRanges) { 1917491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1918956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1919491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1920c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1921c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1922956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkInvalidateMappedMemoryRanges(my_data->report_data, memoryRangeCount, pMemoryRanges); 1923c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1924956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1925491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 1926491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges); 1927ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1928e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkInvalidateMappedMemoryRanges", result); 1929c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1930ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1931ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1932ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1933ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1934956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, 1935956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDeviceSize *pCommittedMemoryInBytes) { 1936956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1937491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1938c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1939c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1940956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetDeviceMemoryCommitment(my_data->report_data, memory, pCommittedMemoryInBytes); 1941c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1942956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1943c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes); 1944c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1945d040c5c25acbea9cacfa90e346fe3a6095a15135Courtney Goeltzenleuchter} 1946d040c5c25acbea9cacfa90e346fe3a6095a15135Courtney Goeltzenleuchter 19477b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL BindBufferMemory(VkDevice device, VkBuffer buffer, VkDeviceMemory memory, 19487b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu VkDeviceSize memoryOffset) { 1949cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1950956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1951e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1952e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 1953e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 1954956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkBindBufferMemory(my_data->report_data, buffer, memory, memoryOffset); 1955ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1956956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1957cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, memory, memoryOffset); 1958cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 1959cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkBindBufferMemory", result); 1960cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 1961ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1962ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1963ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1964ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1965956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BindImageMemory(VkDevice device, VkImage image, VkDeviceMemory memory, VkDeviceSize memoryOffset) { 1966cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 1967956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1968e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1969e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 1970e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 1971956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkBindImageMemory(my_data->report_data, image, memory, memoryOffset); 1972ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1973956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1974cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, memory, memoryOffset); 1975cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 1976cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkBindImageMemory", result); 1977cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 1978ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1979ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 1980ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1981ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1982956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetBufferMemoryRequirements(VkDevice device, VkBuffer buffer, 1983956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkMemoryRequirements *pMemoryRequirements) { 1984956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1985491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1986c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1987c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 1988956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetBufferMemoryRequirements(my_data->report_data, buffer, pMemoryRequirements); 1989ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1990956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 1991c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements); 1992c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 1993ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 1994ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 1995956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageMemoryRequirements(VkDevice device, VkImage image, VkMemoryRequirements *pMemoryRequirements) { 1996956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 1997491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 1998c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 1999ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2000956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetImageMemoryRequirements(my_data->report_data, image, pMemoryRequirements); 2001c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2002956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2003c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements); 2004c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2005ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2006ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2007491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PostGetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pNumRequirements, 2008491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkSparseImageMemoryRequirements *pSparseMemoryRequirements) { 2009491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pSparseMemoryRequirements != nullptr) { 20104687f2601670ce1e77546d7f59f432f703503e83Dustin Graves if ((pSparseMemoryRequirements->formatProperties.aspectMask & 2011491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | 2012491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 2013ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2014825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 2015491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkGetImageSparseMemoryRequirements parameter, VkImageAspect " 2016491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator"); 20174687f2601670ce1e77546d7f59f432f703503e83Dustin Graves return false; 20184687f2601670ce1e77546d7f59f432f703503e83Dustin Graves } 2019ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 2020ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2021c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 2022ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2023ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2024956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSparseMemoryRequirements(VkDevice device, VkImage image, uint32_t *pSparseMemoryRequirementCount, 2025956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkSparseImageMemoryRequirements *pSparseMemoryRequirements) { 2026956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2027491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2028c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2029c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2030956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetImageSparseMemoryRequirements(my_data->report_data, image, pSparseMemoryRequirementCount, 2031956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pSparseMemoryRequirements); 2032ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2033956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2034491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device) 2035491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); 2036c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2037c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PostGetImageSparseMemoryRequirements(device, image, pSparseMemoryRequirementCount, pSparseMemoryRequirements); 2038c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2039ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2040ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2041491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PostGetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, 2042491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkSampleCountFlagBits samples, VkImageUsageFlags usage, VkImageTiling tiling, 2043491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn uint32_t *pNumProperties, VkSparseImageFormatProperties *pProperties) { 2044491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pProperties != nullptr) { 2045491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pProperties->aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | 2046491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 2047ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 1, 2048825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, 2049491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an " 2050491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "unrecognized enumerator"); 20514687f2601670ce1e77546d7f59f432f703503e83Dustin Graves return false; 20524687f2601670ce1e77546d7f59f432f703503e83Dustin Graves } 2053ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes } 2054ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2055c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 2056c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 2057c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2058956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetPhysicalDeviceSparseImageFormatProperties(VkPhysicalDevice physicalDevice, VkFormat format, 2059956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageType type, VkSampleCountFlagBits samples, 2060956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageUsageFlags usage, VkImageTiling tiling, 2061956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t *pPropertyCount, 2062956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkSparseImageFormatProperties *pProperties) { 2063956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2064491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 2065c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2066c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2067956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceSparseImageFormatProperties(my_data->report_data, format, type, samples, 2068956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski usage, tiling, pPropertyCount, pProperties); 2069c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2070956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2071491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_instance_table_map, physicalDevice) 2072491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, 2073491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn pProperties); 2074c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2075491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pPropertyCount, 2076491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn pProperties); 2077c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2078c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 2079c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2080956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo *pBindInfo, 2081956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkFence fence) { 2082491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2083956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2084491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 2085c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2086c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2087956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkQueueBindSparse(my_data->report_data, bindInfoCount, pBindInfo, fence); 2088c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2089956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2090c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence); 2091c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2092e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkQueueBindSparse", result); 2093c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2094c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2095c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return result; 2096c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 2097c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2098956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateFence(VkDevice device, const VkFenceCreateInfo *pCreateInfo, 2099956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFence *pFence) { 2100491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2101956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2102491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2103c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2104c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2105956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateFence(my_data->report_data, pCreateInfo, pAllocator, pFence); 2106ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2107956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2108c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence); 2109c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2110e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateFence", result); 2111c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2112ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2113ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2114ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2115ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 21167b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL DestroyFence(VkDevice device, VkFence fence, const VkAllocationCallbacks *pAllocator) { 2117956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2118491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 21193e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 21203e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2121956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyFence(my_data->report_data, fence, pAllocator); 21223e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2123956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2124491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence, pAllocator); 21253e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 21263e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 21273e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 21287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL ResetFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences) { 2129491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2130956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2131491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2132c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2133c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2134956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkResetFences(my_data->report_data, fenceCount, pFences); 2135c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2136956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2137c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences); 2138ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2139e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkResetFences", result); 2140c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2141ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2142ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2143ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2144ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 21457b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL GetFenceStatus(VkDevice device, VkFence fence) { 2146cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2147956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2148e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2149e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 2150e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 2151956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetFenceStatus(my_data->report_data, fence); 2152ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2153956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2154cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence); 2155cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 2156cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkGetFenceStatus", result); 2157cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 2158ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2159ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2160ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2161ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2162956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL WaitForFences(VkDevice device, uint32_t fenceCount, const VkFence *pFences, VkBool32 waitAll, 2163956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint64_t timeout) { 2164491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2165956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2166491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2167c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2168c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2169956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkWaitForFences(my_data->report_data, fenceCount, pFences, waitAll, timeout); 2170c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2171956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2172c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout); 2173ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2174e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkWaitForFences", result); 2175c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2176ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2177ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2178ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2179ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 21807b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo *pCreateInfo, 2181956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSemaphore *pSemaphore) { 2182491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2183956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2184491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2185c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2186c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2187956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateSemaphore(my_data->report_data, pCreateInfo, pAllocator, pSemaphore); 2188ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2189956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2190c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore); 2191c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2192e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateSemaphore", result); 2193c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2194ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2195ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2196ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2197ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2198956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySemaphore(VkDevice device, VkSemaphore semaphore, const VkAllocationCallbacks *pAllocator) { 2199956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2200491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 22013e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 22023e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2203956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroySemaphore(my_data->report_data, semaphore, pAllocator); 22043e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2205956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2206491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore, pAllocator); 22073e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 22083e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 22093e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2210956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateEvent(VkDevice device, const VkEventCreateInfo *pCreateInfo, 2211956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkEvent *pEvent) { 2212491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2213956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2214491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2215c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2216c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2217956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateEvent(my_data->report_data, pCreateInfo, pAllocator, pEvent); 2218c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2219956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2220c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent); 2221c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2222e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateEvent", result); 2223c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2224ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2225ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2226ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2227ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 22287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL DestroyEvent(VkDevice device, VkEvent event, const VkAllocationCallbacks *pAllocator) { 2229956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2230491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 22313e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 22323e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2233956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyEvent(my_data->report_data, event, pAllocator); 22343e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2235956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2236491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event, pAllocator); 22373e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 22383e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 22393e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 22407b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL GetEventStatus(VkDevice device, VkEvent event) { 2241cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2242956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2243e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2244e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 2245e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 2246956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetEventStatus(my_data->report_data, event); 2247cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 2248956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2249cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event); 2250ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2251cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkGetEventStatus", result); 2252cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 2253ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2254ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2255ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2256ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 22577b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL SetEvent(VkDevice device, VkEvent event) { 2258cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2259956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2260e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2261e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 2262e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 2263956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkSetEvent(my_data->report_data, event); 2264ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2265956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2266cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event); 2267cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 2268cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkSetEvent", result); 2269cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 2270ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2271ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2272ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2273ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 22747b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL ResetEvent(VkDevice device, VkEvent event) { 2275cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2276956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2277e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2278e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 2279e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 2280956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkResetEvent(my_data->report_data, event); 2281ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2282956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2283cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event); 2284cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 2285cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkResetEvent", result); 2286cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 2287ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2288ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2289ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2290ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 22917b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo *pCreateInfo, 2292956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkQueryPool *pQueryPool) { 2293491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2294ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 2295ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2296ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 2297ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 2298c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2299ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkCreateQueryPool(device_data->report_data, pCreateInfo, pAllocator, pQueryPool); 2300ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2301ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 2302ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo != nullptr) { 2303ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If queryType is VK_QUERY_TYPE_PIPELINE_STATISTICS, pipelineStatistics must be a valid combination of 2304ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // VkQueryPipelineStatisticFlagBits values 2305ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfo->queryType == VK_QUERY_TYPE_PIPELINE_STATISTICS) && (pCreateInfo->pipelineStatistics != 0) && 2306ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves ((pCreateInfo->pipelineStatistics & (~AllVkQueryPipelineStatisticFlagBits)) != 0)) { 2307ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 2308ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2309ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves UNRECOGNIZED_VALUE, LayerName, "vkCreateQueryPool: if pCreateInfo->queryType is " 2310ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_QUERY_TYPE_PIPELINE_STATISTICS, pCreateInfo->pipelineStatistics must be " 2311ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "a valid combination of VkQueryPipelineStatisticFlagBits values"); 2312ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2313ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2314ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2315ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 2316c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool); 2317c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2318ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkCreateQueryPool", result); 2319c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2320ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2321ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2322ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2323ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2324956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyQueryPool(VkDevice device, VkQueryPool queryPool, const VkAllocationCallbacks *pAllocator) { 2325956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2326491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 23273e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 23283e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2329956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyQueryPool(my_data->report_data, queryPool, pAllocator); 23303e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2331956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2332491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool, pAllocator); 2333491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2334491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn} 2335491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 2336956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t firstQuery, uint32_t queryCount, 2337956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski size_t dataSize, void *pData, VkDeviceSize stride, VkQueryResultFlags flags) { 2338491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2339956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2340491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2341c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2342c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2343956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetQueryPoolResults(my_data->report_data, queryPool, firstQuery, queryCount, dataSize, 2344956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pData, stride, flags); 2345ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2346956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2347491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_device_table_map, device) 2348491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags); 2349c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2350e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkGetQueryPoolResults", result); 2351c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2352ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2353ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2354ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2355ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2356956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateBuffer(VkDevice device, const VkBufferCreateInfo *pCreateInfo, 2357956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkBuffer *pBuffer) { 2358491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2359ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 2360ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2361ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 2362ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 2363c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 23644f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00660 23654f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00661 23664f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00662 23674f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00670 23684f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00671 23694f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00672 23704f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00673 23714f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00674 23724f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00675 23734f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Note that the above errors need to be generated from the next function, which is codegened. 23744f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz // TODO: Add check for VALIDATION_ERROR_00663 2375ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkCreateBuffer(report_data, pCreateInfo, pAllocator, pBuffer); 2376c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2377ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo != nullptr) { 2378ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 2379ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) { 2380ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1 2381ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->queueFamilyIndexCount <= 1) { 23824f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 23834f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz __LINE__, VALIDATION_ERROR_00665, LayerName, 23844f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz "vkCreateBuffer: if pCreateInfo->sharingMode is VK_SHARING_MODE_CONCURRENT, " 23854f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz "pCreateInfo->queueFamilyIndexCount must be greater than 1. %s", 23864f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz validation_error_map[VALIDATION_ERROR_00665]); 2387ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2388c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2389ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a pointer to an array of 2390ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // queueFamilyIndexCount uint32_t values 2391ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->pQueueFamilyIndices == nullptr) { 2392ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 23934f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz __LINE__, VALIDATION_ERROR_00664, LayerName, 2394ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateBuffer: if pCreateInfo->sharingMode is VK_SHARING_MODE_CONCURRENT, " 2395ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->pQueueFamilyIndices must be a pointer to an array of " 23964f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz "pCreateInfo->queueFamilyIndexCount uint32_t values. %s", 23974f38db6ace251a2f5302c9de6c5d7c791a610505Karl Schultz validation_error_map[VALIDATION_ERROR_00664]); 2398ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2399ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2400ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Ensure that the queue family indices were specified at device creation 2401ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_queue_family_indices(device_data, "vkCreateBuffer", "pCreateInfo->pQueueFamilyIndices", 2402ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pCreateInfo->queueFamilyIndexCount, pCreateInfo->pQueueFamilyIndices); 2403ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2404ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2405ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2406ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 2407c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer); 2408ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2409ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkCreateBuffer", result); 2410c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2411ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2412ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2413ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2414ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2415956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBuffer(VkDevice device, VkBuffer buffer, const VkAllocationCallbacks *pAllocator) { 2416956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2417491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 24183e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 24193e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2420956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyBuffer(my_data->report_data, buffer, pAllocator); 24213e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2422956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2423491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer, pAllocator); 24243e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 24253e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 24263e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 24277b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateBufferView(VkDevice device, const VkBufferViewCreateInfo *pCreateInfo, 24287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator, VkBufferView *pView) { 2429491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2430956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2431491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2432c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2433c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2434956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateBufferView(my_data->report_data, pCreateInfo, pAllocator, pView); 2435ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2436956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2437c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView); 2438c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2439e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateBufferView", result); 2440c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2441ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2442ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2443ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2444ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2445956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyBufferView(VkDevice device, VkBufferView bufferView, const VkAllocationCallbacks *pAllocator) { 2446956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2447491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 24483e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 24493e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2450956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyBufferView(my_data->report_data, bufferView, pAllocator); 24513e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2452956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2453491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView, pAllocator); 24543e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 24553e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 24563e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 24577b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateImage(VkDevice device, const VkImageCreateInfo *pCreateInfo, 24587b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator, VkImage *pImage) { 24599d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 24609d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves bool skip_call = false; 24619d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2462ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 24639d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves debug_report_data *report_data = device_data->report_data; 24649d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 24659d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves skip_call |= parameter_validation_vkCreateImage(report_data, pCreateInfo, pAllocator, pImage); 24669d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 2467491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfo != nullptr) { 2468ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 2469c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves if (pCreateInfo->sharingMode == VK_SHARING_MODE_CONCURRENT) { 2470ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If sharingMode is VK_SHARING_MODE_CONCURRENT, queueFamilyIndexCount must be greater than 1 2471ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->queueFamilyIndexCount <= 1) { 2472ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 2473ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2474ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves INVALID_USAGE, LayerName, "vkCreateImage: if pCreateInfo->sharingMode is VK_SHARING_MODE_CONCURRENT, " 2475ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->queueFamilyIndexCount must be greater than 1"); 2476ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 24779d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 2478ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If sharingMode is VK_SHARING_MODE_CONCURRENT, pQueueFamilyIndices must be a pointer to an array of 2479ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // queueFamilyIndexCount uint32_t values 2480ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->pQueueFamilyIndices == nullptr) { 2481ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2482ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 2483ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateImage: if pCreateInfo->sharingMode is VK_SHARING_MODE_CONCURRENT, " 2484ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->pQueueFamilyIndices must be a pointer to an array of " 2485ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->queueFamilyIndexCount uint32_t values"); 2486ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 24879d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 24889d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves skip_call |= validate_queue_family_indices(device_data, "vkCreateImage", "pCreateInfo->pQueueFamilyIndices", 24899d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves pCreateInfo->queueFamilyIndexCount, pCreateInfo->pQueueFamilyIndices); 2490491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2491c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 24929d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // width, height, and depth members of extent must be greater than 0 2493956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= ValidateGreaterThan(report_data, "vkCreateImage", "pCreateInfo->extent.width", pCreateInfo->extent.width, 0u); 2494956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 2495956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ValidateGreaterThan(report_data, "vkCreateImage", "pCreateInfo->extent.height", pCreateInfo->extent.height, 0u); 2496956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= ValidateGreaterThan(report_data, "vkCreateImage", "pCreateInfo->extent.depth", pCreateInfo->extent.depth, 0u); 2497ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 24989d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // mipLevels must be greater than 0 2499956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= ValidateGreaterThan(report_data, "vkCreateImage", "pCreateInfo->mipLevels", pCreateInfo->mipLevels, 0u); 2500c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 25019d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // arrayLayers must be greater than 0 2502956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= ValidateGreaterThan(report_data, "vkCreateImage", "pCreateInfo->arrayLayers", pCreateInfo->arrayLayers, 0u); 2503c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 25049d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // If imageType is VK_IMAGE_TYPE_1D, both extent.height and extent.depth must be 1 25059d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if ((pCreateInfo->imageType == VK_IMAGE_TYPE_1D) && (pCreateInfo->extent.height != 1) && (pCreateInfo->extent.depth != 1)) { 25069d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 25079d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves LayerName, "vkCreateImage: if pCreateInfo->imageType is VK_IMAGE_TYPE_1D, both " 2508825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "pCreateInfo->extent.height and pCreateInfo->extent.depth must be 1"); 25099d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25109d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 25119d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if (pCreateInfo->imageType == VK_IMAGE_TYPE_2D) { 25129d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // If imageType is VK_IMAGE_TYPE_2D and flags contains VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, extent.width and 25139d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // extent.height must be equal 25149d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if ((pCreateInfo->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) && 25159d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves (pCreateInfo->extent.width != pCreateInfo->extent.height)) { 2516825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 2517825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "vkCreateImage: if pCreateInfo->imageType is VK_IMAGE_TYPE_2D and " 2518825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "pCreateInfo->flags contains VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT, " 2519825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "pCreateInfo->extent.width and pCreateInfo->extent.height must be equal"); 25209d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25219d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 25229d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if (pCreateInfo->extent.depth != 1) { 25239d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves skip_call |= 2524825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, LayerName, 25259d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves "vkCreateImage: if pCreateInfo->imageType is VK_IMAGE_TYPE_2D, pCreateInfo->extent.depth must be 1"); 25269d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25279d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25289d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 25299d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // mipLevels must be less than or equal to floor(log2(max(extent.width,extent.height,extent.depth)))+1 25309d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves uint32_t maxDim = std::max(std::max(pCreateInfo->extent.width, pCreateInfo->extent.height), pCreateInfo->extent.depth); 25319d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if (pCreateInfo->mipLevels > (floor(log2(maxDim)) + 1)) { 2532956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 2533956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, LayerName, 2534956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski "vkCreateImage: pCreateInfo->mipLevels must be less than or equal to " 2535956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski "floor(log2(max(pCreateInfo->extent.width, pCreateInfo->extent.height, pCreateInfo->extent.depth)))+1"); 25369d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25379d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves 25389d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // If flags contains VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must also contain 25399d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves // VK_IMAGE_CREATE_SPARSE_BINDING_BIT 25409d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if (((pCreateInfo->flags & (VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT | VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)) != 0) && 25419d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves ((pCreateInfo->flags & VK_IMAGE_CREATE_SPARSE_BINDING_BIT) != VK_IMAGE_CREATE_SPARSE_BINDING_BIT)) { 2542956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 2543956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, LayerName, 2544956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski "vkCreateImage: pCreateInfo->flags contains VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT or " 2545956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski "VK_IMAGE_CREATE_SPARSE_ALIASED_BIT, it must also contain VK_IMAGE_CREATE_SPARSE_BINDING_BIT"); 25469d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 25479d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves } 2548ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 25499d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves if (!skip_call) { 2550c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage); 2551c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 25529d85d6665792995166b8ceae9bf1c08470c3c658Dustin Graves validate_result(report_data, "vkCreateImage", result); 2553c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2554ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2555ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2556ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2557ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 25587b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL DestroyImage(VkDevice device, VkImage image, const VkAllocationCallbacks *pAllocator) { 2559956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2560491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 25613e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 25623e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2563956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyImage(my_data->report_data, image, pAllocator); 25643e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2565956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2566491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image, pAllocator); 25673e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 25683e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 25693e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2570491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreGetImageSubresourceLayout(VkDevice device, const VkImageSubresource *pSubresource) { 2571491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pSubresource != nullptr) { 2572491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pSubresource->aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | 2573491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 2574ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2575825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 2576491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator"); 2577491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 2578491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2579e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 2580c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2581c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 2582ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2583ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2584956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetImageSubresourceLayout(VkDevice device, VkImage image, const VkImageSubresource *pSubresource, 2585956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkSubresourceLayout *pLayout) { 2586956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2587491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2588c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2589c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2590956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetImageSubresourceLayout(my_data->report_data, image, pSubresource, pLayout); 2591ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2592956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2593c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreGetImageSubresourceLayout(device, pSubresource); 2594c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2595c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout); 2596c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2597ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2598ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 25997b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateImageView(VkDevice device, const VkImageViewCreateInfo *pCreateInfo, 26007b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator, VkImageView *pView) { 2601491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 260215aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves bool skip_call = false; 2603491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2604c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 260515aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves debug_report_data *report_data = my_data->report_data; 2606c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 260715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= parameter_validation_vkCreateImageView(report_data, pCreateInfo, pAllocator, pView); 2608ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 260915aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves if (pCreateInfo != nullptr) { 261015aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves if ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D) || (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_2D)) { 2611e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves if ((pCreateInfo->subresourceRange.layerCount != 1) && 2612e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS)) { 261315aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 261415aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_%dD, " 261515aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.layerCount must be 1", 261615aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D) ? 1 : 2)); 261715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 261815aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } else if ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY) || 2619e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY)) { 2620e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves if ((pCreateInfo->subresourceRange.layerCount < 1) && 2621e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS)) { 262215aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 262315aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_%dD_ARRAY, " 262415aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.layerCount must be >= 1", 262515aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves ((pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_1D_ARRAY) ? 1 : 2)); 262615aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 262715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE) { 2628e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves if ((pCreateInfo->subresourceRange.layerCount != 6) && 2629e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS)) { 263015aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 263115aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_CUBE, " 263215aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.layerCount must be 6"); 263315aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 263415aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_CUBE_ARRAY) { 2635e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves if (((pCreateInfo->subresourceRange.layerCount == 0) || ((pCreateInfo->subresourceRange.layerCount % 6) != 0)) && 2636e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS)) { 263715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 263815aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_CUBE_ARRAY, " 263915aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.layerCount must be a multiple of 6"); 264015aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 264115aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } else if (pCreateInfo->viewType == VK_IMAGE_VIEW_TYPE_3D) { 264215aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves if (pCreateInfo->subresourceRange.baseArrayLayer != 0) { 264315aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 264415aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_3D, " 264515aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.baseArrayLayer must be 0"); 264615aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 264715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves 2648e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves if ((pCreateInfo->subresourceRange.layerCount != 1) && 2649e0027f9a72cdef4bbbc4be46af806d7f41349e5aDustin Graves (pCreateInfo->subresourceRange.layerCount != VK_REMAINING_ARRAY_LAYERS)) { 265015aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, 265115aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves LayerName, "vkCreateImageView: if pCreateInfo->viewType is VK_IMAGE_TYPE_3D, " 265215aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves "pCreateInfo->subresourceRange.layerCount must be 1"); 265315aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 265415aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 265515aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves } 265615aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves 265715aa1272689e3bb2a7388d4ccef186d3fa4b9338Dustin Graves if (!skip_call) { 2658c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView); 2659c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2660e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateImageView", result); 2661c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2662ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2663ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2664ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2665ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2666956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyImageView(VkDevice device, VkImageView imageView, const VkAllocationCallbacks *pAllocator) { 2667956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2668491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 26693e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 26703e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2671956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyImageView(my_data->report_data, imageView, pAllocator); 26723e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2673956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2674491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView, pAllocator); 26753e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 26763e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 26773e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 26787b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateShaderModule(VkDevice device, const VkShaderModuleCreateInfo *pCreateInfo, 2679956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkShaderModule *pShaderModule) { 2680491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2681956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2682491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2683c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2684c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2685956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateShaderModule(my_data->report_data, pCreateInfo, pAllocator, pShaderModule); 2686c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2687956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2688491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 2689491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule); 2690c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2691e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateShaderModule", result); 2692c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2693c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 26946715e52f24453b9b83fb464683cf2c42ee8e0649Michael Lentine return result; 26956715e52f24453b9b83fb464683cf2c42ee8e0649Michael Lentine} 26966715e52f24453b9b83fb464683cf2c42ee8e0649Michael Lentine 2697956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyShaderModule(VkDevice device, VkShaderModule shaderModule, 2698956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 2699956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2700491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 27013e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 27023e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2703956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyShaderModule(my_data->report_data, shaderModule, pAllocator); 27043e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2705956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2706491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule, pAllocator); 27073e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 27083e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 27093e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 27107b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineCache(VkDevice device, const VkPipelineCacheCreateInfo *pCreateInfo, 2711956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineCache *pPipelineCache) { 2712491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2713956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2714491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2715c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2716e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 2717956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreatePipelineCache(my_data->report_data, pCreateInfo, pAllocator, pPipelineCache); 2718e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 2719956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2720491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 2721491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache); 2722c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2723e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreatePipelineCache", result); 2724c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2725e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 2726e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 2727e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 2728e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 2729956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineCache(VkDevice device, VkPipelineCache pipelineCache, 2730956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 2731956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2732491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 27333e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 27343e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2735956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyPipelineCache(my_data->report_data, pipelineCache, pAllocator); 27363e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2737956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2738491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache, pAllocator); 27393e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 27403e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 27413e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 2742956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPipelineCacheData(VkDevice device, VkPipelineCache pipelineCache, size_t *pDataSize, 2743956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski void *pData) { 2744491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2745956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2746491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2747c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2748c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2749956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPipelineCacheData(my_data->report_data, pipelineCache, pDataSize, pData); 2750ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2751956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2752c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData); 2753c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2754e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkGetPipelineCacheData", result); 2755c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2756ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2757ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 2758ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 2759ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 2760956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL MergePipelineCaches(VkDevice device, VkPipelineCache dstCache, uint32_t srcCacheCount, 2761956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkPipelineCache *pSrcCaches) { 2762491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2763956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 2764491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2765c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 2766c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2767956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkMergePipelineCaches(my_data->report_data, dstCache, srcCacheCount, pSrcCaches); 2768c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2769956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 2770c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches); 2771c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2772e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkMergePipelineCaches", result); 2773c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 2774c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2775c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return result; 2776c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 2777c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 2778491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCreateGraphicsPipelines(VkDevice device, const VkGraphicsPipelineCreateInfo *pCreateInfos) { 2779b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2780b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 2781b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski // TODO: Handle count 2782491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos != nullptr) { 2783491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->flags | VK_PIPELINE_CREATE_DERIVATIVE_BIT) { 2784491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->basePipelineIndex != -1) { 2785491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->basePipelineHandle != VK_NULL_HANDLE) { 2786ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2787825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 2788491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCreateGraphicsPipelines parameter, pCreateInfos->basePipelineHandle, must be VK_NULL_HANDLE if " 2789491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "pCreateInfos->flags " 2790491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag and pCreateInfos->basePipelineIndex is not -1"); 2791491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 2792491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2793d47367b403918b6362fe0fc9aa13627d6336cd01Jeremy Hayes } 2794d47367b403918b6362fe0fc9aa13627d6336cd01Jeremy Hayes 2795491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->basePipelineHandle != VK_NULL_HANDLE) { 2796491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->basePipelineIndex != -1) { 2797491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn log_msg( 2798ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2799825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 2800491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCreateGraphicsPipelines parameter, pCreateInfos->basePipelineIndex, must be -1 if pCreateInfos->flags " 2801491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "contains the VK_PIPELINE_CREATE_DERIVATIVE_BIT flag and pCreateInfos->basePipelineHandle is not " 2802491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "VK_NULL_HANDLE"); 2803491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 2804491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2805491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2806491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2807491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 2808491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->pRasterizationState != nullptr) { 2809491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK) { 2810ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2811825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 2812491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an " 2813491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "unrecognized enumerator"); 2814491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 2815491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 281693a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski 281793a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski if ((pCreateInfos->pRasterizationState->polygonMode != VK_POLYGON_MODE_FILL) && 281893a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski (data->physical_device_features.fillModeNonSolid == false)) { 281993a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski log_msg( 282093a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 282193a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski DEVICE_FEATURE, LayerName, 282293a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode cannot be " 282393a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski "VK_POLYGON_MODE_POINT or VK_POLYGON_MODE_LINE if VkPhysicalDeviceFeatures->fillModeNonSolid is false."); 282493a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski return false; 282593a6d51ebe5141fd3468aedf34436f2fc8b0984bMark Lobodzinski } 2826491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2827b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 28283755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves size_t i = 0; 2829c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves for (size_t j = 0; j < pCreateInfos[i].stageCount; j++) { 28303755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_string(data->report_data, "vkCreateGraphicsPipelines", 28313755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pStages[%i].pName", ParameterName::IndexVector{i, j}), 2832491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn pCreateInfos[i].pStages[j].pName); 2833491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 2834e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour } 2835e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour 2836e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour return true; 2837e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour} 2838e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour 2839956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateGraphicsPipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 2840956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkGraphicsPipelineCreateInfo *pCreateInfos, 2841956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 2842491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 2843ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 2844ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 2845ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 2846ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 2847c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 2848ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkCreateGraphicsPipelines(report_data, pipelineCache, createInfoCount, pCreateInfos, 2849ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pAllocator, pPipelines); 2850e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour 2851ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos != nullptr) { 2852ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t i = 0; i < createInfoCount; ++i) { 2853ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 2854ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pTessellationState == nullptr) { 2855ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pStages != nullptr) { 2856ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If pStages includes a tessellation control shader stage and a tessellation evaluation shader stage, 2857ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // pTessellationState must not be NULL 2858ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool has_control = false; 2859ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool has_eval = false; 2860ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2861ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t stage_index = 0; stage_index < pCreateInfos[i].stageCount; ++stage_index) { 2862ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pStages[stage_index].stage == VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT) { 2863ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves has_control = true; 2864ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else if (pCreateInfos[i].pStages[stage_index].stage == VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT) { 2865ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves has_eval = true; 2866ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2867ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2868ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2869ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (has_control && has_eval) { 2870ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2871ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 2872ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateGraphicsPipelines: if pCreateInfos[%d].pStages includes a tessellation " 2873ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "control shader stage and a tessellation evaluation shader stage, " 2874ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfos[%d].pTessellationState must not be NULL", 2875ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2876ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2877ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2878dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } else { 28793755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_struct_pnext( 28803755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 28813755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pTessellationState->pNext", ParameterName::IndexVector{i}), NULL, 28823755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pTessellationState->pNext, 0, NULL, GeneratedHeaderVersion); 2883dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 28843755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_reserved_flags( 28853755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 28863755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pTessellationState->flags", ParameterName::IndexVector{i}), 28873755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pTessellationState->flags); 2888dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 2889dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves if (pCreateInfos[i].pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO) { 2890dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2891dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves __LINE__, INVALID_STRUCT_STYPE, LayerName, 2892dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "vkCreateGraphicsPipelines: parameter pCreateInfos[%d].pTessellationState->sType must be " 2893dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO", 2894dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves i); 2895dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 2896ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2897ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2898ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pViewportState == nullptr) { 2899ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If the rasterizerDiscardEnable member of pRasterizationState is VK_FALSE, pViewportState must be a pointer to a 2900ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // valid VkPipelineViewportStateCreateInfo structure 2901ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfos[i].pRasterizationState != nullptr) && 2902ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pCreateInfos[i].pRasterizationState->rasterizerDiscardEnable == VK_FALSE)) { 2903ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg( 2904ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2905ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves REQUIRED_PARAMETER, LayerName, 2906ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateGraphicsPipelines: if pCreateInfos[%d].pRasterizationState->rasterizerDiscardEnable is VK_FALSE, " 2907ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfos[%d].pViewportState must be a pointer to a valid VkPipelineViewportStateCreateInfo structure", 2908ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2909ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2910ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else { 2911dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= 29123755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", 29133755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pViewportState->pNext", ParameterName::IndexVector{i}), 29143755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves NULL, pCreateInfos[i].pViewportState->pNext, 0, NULL, GeneratedHeaderVersion); 2915dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 2916dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= 29173755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_reserved_flags(report_data, "vkCreateGraphicsPipelines", 29183755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pViewportState->flags", ParameterName::IndexVector{i}), 2919dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pViewportState->flags); 2920dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 2921ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO) { 2922ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2923ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, INVALID_STRUCT_STYPE, LayerName, 2924ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateGraphicsPipelines: parameter pCreateInfos[%d].pViewportState->sType must be " 2925ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO", 2926ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i); 2927ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2928ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2929ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pDynamicState != nullptr) { 2930ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool has_dynamic_viewport = false; 2931ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool has_dynamic_scissor = false; 2932ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2933ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t state_index = 0; state_index < pCreateInfos[i].pDynamicState->dynamicStateCount; ++state_index) { 2934ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pDynamicState->pDynamicStates[state_index] == VK_DYNAMIC_STATE_VIEWPORT) { 2935ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves has_dynamic_viewport = true; 2936ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else if (pCreateInfos[i].pDynamicState->pDynamicStates[state_index] == VK_DYNAMIC_STATE_SCISSOR) { 2937ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves has_dynamic_scissor = true; 2938ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2939ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2940ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2941ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // viewportCount must be greater than 0 2942ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: viewportCount must be 1 when multiple_viewport feature is not enabled 2943ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pViewportState->viewportCount == 0) { 2944ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2945ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 29463b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "vkCreateGraphicsPipelines: if pCreateInfos[%d].pDynamicState->pDynamicStates does " 29473b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "not contain VK_DYNAMIC_STATE_VIEWPORT, pCreateInfos[%d].pViewportState->viewportCount " 2948ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "must be greater than 0", 2949ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2950ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2951ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2952ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_VIEWPORT, the pViewports 2953ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // member of pViewportState must be a pointer to an array of pViewportState->viewportCount VkViewport structures 2954ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!has_dynamic_viewport && (pCreateInfos[i].pViewportState->pViewports == nullptr)) { 2955ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 2956ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2957ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 29583b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "vkCreateGraphicsPipelines: if pCreateInfos[%d].pDynamicState->pDynamicStates does not contain " 2959ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DYNAMIC_STATE_VIEWPORT, pCreateInfos[%d].pViewportState->pViewports must not be NULL", 2960ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2961ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2962ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2963ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // scissorCount must be greater than 0 2964ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: scissorCount must be 1 when multiple_viewport feature is not enabled 2965ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pViewportState->scissorCount == 0) { 2966ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2967ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 29683b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "vkCreateGraphicsPipelines: if pCreateInfos[%d].pDynamicState->pDynamicStates does " 29693b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "not contain VK_DYNAMIC_STATE_SCISSOR, pCreateInfos[%d].pViewportState->scissorCount " 2970ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "must be greater than 0", 2971ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2972ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2973ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2974ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If no element of the pDynamicStates member of pDynamicState is VK_DYNAMIC_STATE_SCISSOR, the pScissors member 2975ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // of pViewportState must be a pointer to an array of pViewportState->scissorCount VkRect2D structures 2976ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!has_dynamic_scissor && (pCreateInfos[i].pViewportState->pScissors == nullptr)) { 2977ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 2978ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 2979ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 29803b6703c5093699aecba42909e65ce00d3cbe1d5dTobin Ehlis "vkCreateGraphicsPipelines: if pCreateInfos[%d].pDynamicState->pDynamicStates does not contain " 2981ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DYNAMIC_STATE_SCISSOR, pCreateInfos[%d].pViewportState->pScissors must not be NULL", 2982ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2983ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2984ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2985ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2986ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 2987ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pMultisampleState == nullptr) { 2988ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If the rasterizerDiscardEnable member of pRasterizationState is VK_FALSE, pMultisampleState must be a pointer to 2989ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // a valid VkPipelineMultisampleStateCreateInfo structure 2990ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfos[i].pRasterizationState != nullptr) && 2991ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pCreateInfos[i].pRasterizationState->rasterizerDiscardEnable == VK_FALSE) { 2992ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 2993ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 2994ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves REQUIRED_PARAMETER, LayerName, "vkCreateGraphicsPipelines: if " 2995ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfos[%d].pRasterizationState->rasterizerDiscardEnable is " 2996ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_FALSE, pCreateInfos[%d].pMultisampleState must not be NULL", 2997ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 2998ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 2999dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } else { 3000dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= 30013755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", 30023755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->pNext", ParameterName::IndexVector{i}), 3003059e07e5fff8ea8b6108fe900e573d845fb98bf0Dustin Graves NULL, pCreateInfos[i].pMultisampleState->pNext, 0, NULL, GeneratedHeaderVersion); 3004dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 30053755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_reserved_flags( 30063755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30073755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->flags", ParameterName::IndexVector{i}), 30083755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pMultisampleState->flags); 3009dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 30103755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30113755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30123755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->sampleShadingEnable", ParameterName::IndexVector{i}), 30133755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pMultisampleState->sampleShadingEnable); 3014dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3015dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_array( 30163755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30173755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->rasterizationSamples", ParameterName::IndexVector{i}), 30183755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->pSampleMask", ParameterName::IndexVector{i}), 30193755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pMultisampleState->rasterizationSamples, pCreateInfos[i].pMultisampleState->pSampleMask, true, 30203755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves false); 30213755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 30223755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30233755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30243755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->alphaToCoverageEnable", ParameterName::IndexVector{i}), 30253755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pMultisampleState->alphaToCoverageEnable); 30263755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 30273755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30283755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30293755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pMultisampleState->alphaToOneEnable", ParameterName::IndexVector{i}), 30303755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pMultisampleState->alphaToOneEnable); 3031dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3032dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves if (pCreateInfos[i].pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO) { 3033dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3034dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves __LINE__, INVALID_STRUCT_STYPE, LayerName, 3035dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "vkCreateGraphicsPipelines: parameter pCreateInfos[%d].pMultisampleState->sType must be " 3036dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO", 3037dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves i); 3038dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 3039ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3040ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3041ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: Conditional NULL check based on rasterizerDiscardEnable and subpass 3042dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves if (pCreateInfos[i].pDepthStencilState != nullptr) { 30433755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_struct_pnext( 30443755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30453755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->pNext", ParameterName::IndexVector{i}), NULL, 30463755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->pNext, 0, NULL, GeneratedHeaderVersion); 30473755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 30483755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_reserved_flags( 30493755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30503755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->flags", ParameterName::IndexVector{i}), 30513755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->flags); 30523755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 30533755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30543755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30553755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->depthTestEnable", ParameterName::IndexVector{i}), 30563755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->depthTestEnable); 30573755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves 30583755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30593755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30603755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->depthWriteEnable", ParameterName::IndexVector{i}), 30613755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->depthWriteEnable); 3062dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3063dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 30643755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30653755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->depthCompareOp", ParameterName::IndexVector{i}), 30663755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkCompareOp", VK_COMPARE_OP_BEGIN_RANGE, VK_COMPARE_OP_END_RANGE, 30673755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->depthCompareOp); 3068dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 30693755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30703755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30713755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->depthBoundsTestEnable", ParameterName::IndexVector{i}), 30723755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->depthBoundsTestEnable); 3073dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 30743755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 30753755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30763755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->stencilTestEnable", ParameterName::IndexVector{i}), 30773755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->stencilTestEnable); 3078dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3079dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 30803755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30813755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->front.failOp", ParameterName::IndexVector{i}), 30823755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkStencilOp", VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, 30833755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->front.failOp); 3084dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3085dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 30863755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30873755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->front.passOp", ParameterName::IndexVector{i}), 30883755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkStencilOp", VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, 30893755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->front.passOp); 3090dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 30913755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_ranged_enum( 30923755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30933755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->front.depthFailOp", ParameterName::IndexVector{i}), 30943755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkStencilOp", VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, 30953755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->front.depthFailOp); 3096dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3097dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 30983755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 30993755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->front.compareOp", ParameterName::IndexVector{i}), 31003755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkCompareOp", VK_COMPARE_OP_BEGIN_RANGE, VK_COMPARE_OP_END_RANGE, 31013755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->front.compareOp); 3102dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3103dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 31043755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31053755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->back.failOp", ParameterName::IndexVector{i}), "VkStencilOp", 3106dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, pCreateInfos[i].pDepthStencilState->back.failOp); 3107dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3108dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 31093755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31103755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->back.passOp", ParameterName::IndexVector{i}), "VkStencilOp", 3111dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, pCreateInfos[i].pDepthStencilState->back.passOp); 3112dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3113dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 31143755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31153755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->back.depthFailOp", ParameterName::IndexVector{i}), 31163755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkStencilOp", VK_STENCIL_OP_BEGIN_RANGE, VK_STENCIL_OP_END_RANGE, 31173755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->back.depthFailOp); 3118dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3119dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 31203755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31213755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pDepthStencilState->back.compareOp", ParameterName::IndexVector{i}), 31223755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkCompareOp", VK_COMPARE_OP_BEGIN_RANGE, VK_COMPARE_OP_END_RANGE, 31233755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pDepthStencilState->back.compareOp); 3124dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3125dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves if (pCreateInfos[i].pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO) { 3126dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3127dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves __LINE__, INVALID_STRUCT_STYPE, LayerName, 3128dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "vkCreateGraphicsPipelines: parameter pCreateInfos[%d].pDepthStencilState->sType must be " 3129dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO", 3130dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves i); 3131dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 3132ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3133ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3134ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: Conditional NULL check based on rasterizerDiscardEnable and subpass 3135ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pColorBlendState != nullptr) { 3136dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= 31373755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_struct_pnext(report_data, "vkCreateGraphicsPipelines", 31383755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pNext", ParameterName::IndexVector{i}), 31393755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves NULL, pCreateInfos[i].pColorBlendState->pNext, 0, NULL, GeneratedHeaderVersion); 3140dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 31413755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_reserved_flags( 31423755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31433755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->flags", ParameterName::IndexVector{i}), 31443755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->flags); 3145dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 31463755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= validate_bool32( 31473755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31483755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->logicOpEnable", ParameterName::IndexVector{i}), 31493755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->logicOpEnable); 3150dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3151dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_array( 31523755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 31533755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->attachmentCount", ParameterName::IndexVector{i}), 31543755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments", ParameterName::IndexVector{i}), 31553755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->attachmentCount, pCreateInfos[i].pColorBlendState->pAttachments, false, true); 3156dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3157dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves if (pCreateInfos[i].pColorBlendState->pAttachments != NULL) { 3158dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves for (uint32_t attachmentIndex = 0; attachmentIndex < pCreateInfos[i].pColorBlendState->attachmentCount; 3159dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves ++attachmentIndex) { 31603755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= 31613755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_bool32(report_data, "vkCreateGraphicsPipelines", 31623755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].blendEnable", 31633755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31643755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].blendEnable); 3165dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3166dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 3167dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves report_data, "vkCreateGraphicsPipelines", 31683755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].srcColorBlendFactor", 31693755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31703755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendFactor", VK_BLEND_FACTOR_BEGIN_RANGE, VK_BLEND_FACTOR_END_RANGE, 3171dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].srcColorBlendFactor); 3172dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3173dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 3174dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves report_data, "vkCreateGraphicsPipelines", 31753755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].dstColorBlendFactor", 31763755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31773755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendFactor", VK_BLEND_FACTOR_BEGIN_RANGE, VK_BLEND_FACTOR_END_RANGE, 3178dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].dstColorBlendFactor); 3179dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 31803755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= 31813755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", 31823755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].colorBlendOp", 31833755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31843755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendOp", VK_BLEND_OP_BEGIN_RANGE, VK_BLEND_OP_END_RANGE, 31853755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].colorBlendOp); 3186dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3187dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 3188dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves report_data, "vkCreateGraphicsPipelines", 31893755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].srcAlphaBlendFactor", 31903755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31913755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendFactor", VK_BLEND_FACTOR_BEGIN_RANGE, VK_BLEND_FACTOR_END_RANGE, 3192dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].srcAlphaBlendFactor); 3193dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3194dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_ranged_enum( 3195dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves report_data, "vkCreateGraphicsPipelines", 31963755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].dstAlphaBlendFactor", 31973755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 31983755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendFactor", VK_BLEND_FACTOR_BEGIN_RANGE, VK_BLEND_FACTOR_END_RANGE, 3199dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].dstAlphaBlendFactor); 3200dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 32013755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves skip_call |= 32023755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_ranged_enum(report_data, "vkCreateGraphicsPipelines", 32033755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].alphaBlendOp", 32043755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 32053755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkBlendOp", VK_BLEND_OP_BEGIN_RANGE, VK_BLEND_OP_END_RANGE, 32063755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].alphaBlendOp); 3207dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3208dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= 3209dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves validate_flags(report_data, "vkCreateGraphicsPipelines", 32103755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->pAttachments[%i].colorWriteMask", 32113755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, attachmentIndex}), 3212dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves "VkColorComponentFlagBits", AllVkColorComponentFlagBits, 3213dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pCreateInfos[i].pColorBlendState->pAttachments[attachmentIndex].colorWriteMask, false); 3214dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 3215dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 3216dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3217ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO) { 3218ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3219ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, INVALID_STRUCT_STYPE, LayerName, 3220ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateGraphicsPipelines: parameter pCreateInfos[%d].pColorBlendState->sType must be " 3221ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO", 3222ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i); 3223ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3224ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3225ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If logicOpEnable is VK_TRUE, logicOp must be a valid VkLogicOp value 3226ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfos[i].pColorBlendState->logicOpEnable == VK_TRUE) { 3227ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_ranged_enum( 32283755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves report_data, "vkCreateGraphicsPipelines", 32293755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].pColorBlendState->logicOp", ParameterName::IndexVector{i}), "VkLogicOp", 3230ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves VK_LOGIC_OP_BEGIN_RANGE, VK_LOGIC_OP_END_RANGE, pCreateInfos[i].pColorBlendState->logicOp); 3231ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3232ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3233ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3234ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3235ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3236ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3237c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCreateGraphicsPipelines(device, pCreateInfos); 3238e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3239491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_device_table_map, device) 3240491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CreateGraphicsPipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 3241c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3242ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkCreateGraphicsPipelines", result); 3243c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3244e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3245e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3246e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour} 3247e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour 3248491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCreateComputePipelines(VkDevice device, const VkComputePipelineCreateInfo *pCreateInfos) { 3249b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3250b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 3251491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pCreateInfos != nullptr) { 3252491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn // TODO: Handle count! 32533755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves uint32_t i = 0; 32543755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves validate_string(data->report_data, "vkCreateComputePipelines", 32553755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pCreateInfos[%i].stage.pName", ParameterName::IndexVector{i}), pCreateInfos[i].stage.pName); 3256e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour } 3257e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3258e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return true; 3259e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 3260e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3261956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateComputePipelines(VkDevice device, VkPipelineCache pipelineCache, uint32_t createInfoCount, 3262956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkComputePipelineCreateInfo *pCreateInfos, 3263956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipeline *pPipelines) { 3264491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3265956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3266491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3267c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3268c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3269956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateComputePipelines(my_data->report_data, pipelineCache, createInfoCount, pCreateInfos, 3270956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pAllocator, pPipelines); 3271e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3272956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3273c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCreateComputePipelines(device, pCreateInfos); 3274e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3275491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_device_table_map, device) 3276491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CreateComputePipelines(device, pipelineCache, createInfoCount, pCreateInfos, pAllocator, pPipelines); 3277c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3278e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateComputePipelines", result); 3279c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3280e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3281e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3282e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 3283e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3284956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipeline(VkDevice device, VkPipeline pipeline, const VkAllocationCallbacks *pAllocator) { 3285956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3286491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 32873e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 32883e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3289956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyPipeline(my_data->report_data, pipeline, pAllocator); 32903e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3291956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3292491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline, pAllocator); 32933e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 32943e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 32953e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3296956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo *pCreateInfo, 3297956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkPipelineLayout *pPipelineLayout) { 3298491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3299956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3300491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3301c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3302e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3303956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreatePipelineLayout(my_data->report_data, pCreateInfo, pAllocator, pPipelineLayout); 3304e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3305956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3306491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 3307491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout); 3308c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3309e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreatePipelineLayout", result); 3310c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3311e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3312e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3313e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 3314e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3315956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyPipelineLayout(VkDevice device, VkPipelineLayout pipelineLayout, 3316956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 3317956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3318491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 33193e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 33203e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3321956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyPipelineLayout(my_data->report_data, pipelineLayout, pAllocator); 33223e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3323956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3324491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout, pAllocator); 33253e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 33263e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 33273e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 33287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateSampler(VkDevice device, const VkSamplerCreateInfo *pCreateInfo, 33297b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkAllocationCallbacks *pAllocator, VkSampler *pSampler) { 3330491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3331ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3332ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3333ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != NULL); 3334ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3335e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3336ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkCreateSampler(report_data, pCreateInfo, pAllocator, pSampler); 3337e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3338ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3339ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo != nullptr) { 3340ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If compareEnable is VK_TRUE, compareOp must be a valid VkCompareOp value 3341ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->compareEnable == VK_TRUE) { 3342ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->compareOp", "VkCompareOp", 3343ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves VK_COMPARE_OP_BEGIN_RANGE, VK_COMPARE_OP_END_RANGE, pCreateInfo->compareOp); 3344ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3345ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3346ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If any of addressModeU, addressModeV or addressModeW are VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER, borderColor must be a 3347ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // valid VkBorderColor value 3348ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfo->addressModeU == VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER) || 3349ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pCreateInfo->addressModeV == VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER) || 3350ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pCreateInfo->addressModeW == VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_BORDER)) { 3351ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_ranged_enum(report_data, "vkCreateSampler", "pCreateInfo->borderColor", "VkBorderColor", 3352ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves VK_BORDER_COLOR_BEGIN_RANGE, VK_BORDER_COLOR_END_RANGE, pCreateInfo->borderColor); 3353ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3354ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3355ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3356ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3357c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler); 3358c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3359ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkCreateSampler", result); 3360c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3361e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3362e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3363e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 3364e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3365956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroySampler(VkDevice device, VkSampler sampler, const VkAllocationCallbacks *pAllocator) { 3366956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3367491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 33683e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 33693e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3370956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroySampler(my_data->report_data, sampler, pAllocator); 33713e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3372956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3373491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler, pAllocator); 33743e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 33753e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 33763e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3377956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo *pCreateInfo, 3378956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 3379956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDescriptorSetLayout *pSetLayout) { 3380491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3381ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3382ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3383ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 3384ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3385c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3386ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkCreateDescriptorSetLayout(report_data, pCreateInfo, pAllocator, pSetLayout); 3387ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3388ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3389ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfo != nullptr) && (pCreateInfo->pBindings != nullptr)) { 3390ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t i = 0; i < pCreateInfo->bindingCount; ++i) { 3391ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->pBindings[i].descriptorCount != 0) { 3392ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER or VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, and descriptorCount 3393ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // is not 0 and pImmutableSamplers is not NULL, pImmutableSamplers must be a pointer to an array of descriptorCount 3394ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // valid VkSampler handles 3395ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (((pCreateInfo->pBindings[i].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER) || 3396ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pCreateInfo->pBindings[i].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER)) && 3397ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pCreateInfo->pBindings[i].pImmutableSamplers != nullptr)) { 3398ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t descriptor_index = 0; descriptor_index < pCreateInfo->pBindings[i].descriptorCount; 3399ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves ++descriptor_index) { 3400ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pCreateInfo->pBindings[i].pImmutableSamplers[descriptor_index] == VK_NULL_HANDLE) { 3401ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 3402ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3403ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, "vkCreateDescriptorSetLayout: required parameter " 3404ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->pBindings[%d].pImmutableSamplers[%d]" 3405ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves " specified as VK_NULL_HANDLE", 3406ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, descriptor_index); 3407ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3408ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3409ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3410e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3411ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorCount is not 0, stageFlags must be a valid combination of VkShaderStageFlagBits values 3412ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pCreateInfo->pBindings[i].stageFlags != 0) && 3413ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves ((pCreateInfo->pBindings[i].stageFlags & (~AllVkShaderStageFlagBits)) != 0)) { 3414ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 3415ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 3416ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves UNRECOGNIZED_VALUE, LayerName, 3417ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkCreateDescriptorSetLayout: if pCreateInfo->pBindings[%d].descriptorCount is not 0, " 3418ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pCreateInfo->pBindings[%d].stageFlags must be a valid combination of VkShaderStageFlagBits values", 3419ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 3420ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3421ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3422ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3423ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3424ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3425ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3426491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 3427491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout); 3428e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3429ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkCreateDescriptorSetLayout", result); 3430c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3431e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3432e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3433e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 3434e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3435956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorSetLayout(VkDevice device, VkDescriptorSetLayout descriptorSetLayout, 3436956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 3437956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3438491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34393e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 34403e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3441956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyDescriptorSetLayout(my_data->report_data, descriptorSetLayout, pAllocator); 34423e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3443956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3444491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout, pAllocator); 3445b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 3446491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn} 3447491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 3448956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateDescriptorPool(VkDevice device, const VkDescriptorPoolCreateInfo *pCreateInfo, 3449956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkDescriptorPool *pDescriptorPool) { 3450491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3451956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3452491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3453c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3454e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3455956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateDescriptorPool(my_data->report_data, pCreateInfo, pAllocator, pDescriptorPool); 3456c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3457e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */ 3458e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 3459956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3460491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = 3461491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool); 3462c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3463e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateDescriptorPool", result); 3464c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3465e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3466e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes return result; 3467e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour} 3468e307f588ada2a959cab1964216a66934e5f8ab9eTony Barbour 3469956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 3470956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 3471956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3472491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 34733e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 34743e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3475956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyDescriptorPool(my_data->report_data, descriptorPool, pAllocator); 34763e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3477956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3478491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool, pAllocator); 34793e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 34803e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 34813e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3482956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool, 3483956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDescriptorPoolResetFlags flags) { 3484cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3485956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3486e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3487e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 3488e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 3489956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkResetDescriptorPool(my_data->report_data, descriptorPool, flags); 3490cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 3491956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3492cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags); 3493ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3494cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkResetDescriptorPool", result); 3495cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 3496ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3497ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3498ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3499ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3500956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo *pAllocateInfo, 3501956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDescriptorSet *pDescriptorSets) { 3502491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3503956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3504491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3505c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3506c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3507956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkAllocateDescriptorSets(my_data->report_data, pAllocateInfo, pDescriptorSets); 3508ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3509956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3510c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets); 3511c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3512e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkAllocateDescriptorSets", result); 3513c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3514ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3515ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3516ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3517ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3518956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL FreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, 35197b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkDescriptorSet *pDescriptorSets) { 3520491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3521ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3522ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3523ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 3524ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3525c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3526ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkFreeDescriptorSets(report_data, descriptorPool, descriptorSetCount, pDescriptorSets); 3527c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3528ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3529ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // This is an array of handles, where the elements are allowed to be VK_NULL_HANDLE, and does not require any validation beyond 3530ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // validate_array() 3531ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_array(report_data, "vkFreeDescriptorSets", "descriptorSetCount", "pDescriptorSets", descriptorSetCount, 3532ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pDescriptorSets, true, true); 3533ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3534ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3535491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn result = get_dispatch_table(pc_device_table_map, device) 3536491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->FreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets); 3537c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3538ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkFreeDescriptorSets", result); 3539c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3540c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3541c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return result; 3542c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 3543c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3544956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL UpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, 3545956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkWriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, 3546956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkCopyDescriptorSet *pDescriptorCopies) { 3547ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3548ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3549ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != NULL); 3550ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3551c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3552ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkUpdateDescriptorSets(report_data, descriptorWriteCount, pDescriptorWrites, 3553ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves descriptorCopyCount, pDescriptorCopies); 3554c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3555ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3556ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pDescriptorWrites != NULL) { 3557ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t i = 0; i < descriptorWriteCount; ++i) { 3558ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // descriptorCount must be greater than 0 3559ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pDescriptorWrites[i].descriptorCount == 0) { 3560ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= 3561ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 3562ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves REQUIRED_PARAMETER, LayerName, 3563ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkUpdateDescriptorSets: parameter pDescriptorWrites[%d].descriptorCount must be greater than 0", i); 3564ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3565ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3566ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLER) || 3567ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER) || 3568ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE) || 3569ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_IMAGE) || 3570ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT)) { 3571ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorType is VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 3572ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, 3573ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // pImageInfo must be a pointer to an array of descriptorCount valid VkDescriptorImageInfo structures 3574ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pDescriptorWrites[i].pImageInfo == nullptr) { 3575ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3576ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 3577ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkUpdateDescriptorSets: if pDescriptorWrites[%d].descriptorType is " 3578ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_SAMPLER, VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, " 3579ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or " 3580ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, pDescriptorWrites[%d].pImageInfo must not be NULL", 3581ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 3582ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else if (pDescriptorWrites[i].descriptorType != VK_DESCRIPTOR_TYPE_SAMPLER) { 3583ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorType is VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, 3584ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // VK_DESCRIPTOR_TYPE_STORAGE_IMAGE or VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT, the imageView and imageLayout 3585ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // members of any given element of pImageInfo must be a valid VkImageView and VkImageLayout, respectively 3586ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t descriptor_index = 0; descriptor_index < pDescriptorWrites[i].descriptorCount; 3587ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves ++descriptor_index) { 3588ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_required_handle(report_data, "vkUpdateDescriptorSets", 35893755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pDescriptorWrites[%i].pImageInfo[%i].imageView", 35903755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, descriptor_index}), 3591ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pDescriptorWrites[i].pImageInfo[descriptor_index].imageView); 3592ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_ranged_enum(report_data, "vkUpdateDescriptorSets", 35933755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pDescriptorWrites[%i].pImageInfo[%i].imageLayout", 35943755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, descriptor_index}), 35953755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves "VkImageLayout", VK_IMAGE_LAYOUT_BEGIN_RANGE, VK_IMAGE_LAYOUT_END_RANGE, 3596ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pDescriptorWrites[i].pImageInfo[descriptor_index].imageLayout); 3597ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3598ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3599ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) || 3600ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) || 3601ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC) || 3602ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)) { 3603ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, 3604ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, pBufferInfo must be a 3605ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // pointer to an array of descriptorCount valid VkDescriptorBufferInfo structures 3606ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pDescriptorWrites[i].pBufferInfo == nullptr) { 3607ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3608ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 3609ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkUpdateDescriptorSets: if pDescriptorWrites[%d].descriptorType is " 3610ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, " 3611ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC or VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC, " 3612ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pDescriptorWrites[%d].pBufferInfo must not be NULL", 3613ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 3614dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } else { 3615dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves for (uint32_t descriptorIndex = 0; descriptorIndex < pDescriptorWrites[i].descriptorCount; ++descriptorIndex) { 3616dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_required_handle(report_data, "vkUpdateDescriptorSets", 36173755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pDescriptorWrites[%i].pBufferInfo[%i].buffer", 36183755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, descriptorIndex}), 3619dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pDescriptorWrites[i].pBufferInfo[descriptorIndex].buffer); 3620dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves } 3621ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3622ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER) || 3623ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER)) { 3624ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // If descriptorType is VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, 3625ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // pTexelBufferView must be a pointer to an array of descriptorCount valid VkBufferView handles 3626ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pDescriptorWrites[i].pTexelBufferView == nullptr) { 3627ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= log_msg(report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3628ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves __LINE__, REQUIRED_PARAMETER, LayerName, 3629ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "vkUpdateDescriptorSets: if pDescriptorWrites[%d].descriptorType is " 3630ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER or VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER, " 3631ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "pDescriptorWrites[%d].pTexelBufferView must not be NULL", 3632ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves i, i); 3633ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } else { 3634ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves for (uint32_t descriptor_index = 0; descriptor_index < pDescriptorWrites[i].descriptorCount; 3635ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves ++descriptor_index) { 3636ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_required_handle(report_data, "vkUpdateDescriptorSets", 36373755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName("pDescriptorWrites[%i].pTexelBufferView[%i]", 36383755690f21851fc9a325acf2f6a68c680e40fe0dDustin Graves ParameterName::IndexVector{i, descriptor_index}), 3639ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pDescriptorWrites[i].pTexelBufferView[descriptor_index]); 3640ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3641ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3642ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 36430fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski 36440fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER) || 36450fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC)) { 36460fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski VkDeviceSize uniformAlignment = device_data->device_limits.minUniformBufferOffsetAlignment; 36470fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski for (uint32_t j = 0; j < pDescriptorWrites[i].descriptorCount; j++) { 36480fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski if (pDescriptorWrites[i].pBufferInfo != NULL) { 36490fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski if (vk_safe_modulo(pDescriptorWrites[i].pBufferInfo[j].offset, uniformAlignment) != 0) { 36500fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski skip_call |= 36510fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, 3652825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, 0, __LINE__, DEVICE_LIMIT, LayerName, 36530fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski "vkUpdateDescriptorSets(): pDescriptorWrites[%d].pBufferInfo[%d].offset (0x%" PRIxLEAST64 36540fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski ") must be a multiple of device limit minUniformBufferOffsetAlignment 0x%" PRIxLEAST64, 36550fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski i, j, pDescriptorWrites[i].pBufferInfo[j].offset, uniformAlignment); 36560fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36570fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36580fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36590fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } else if ((pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER) || 36600fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski (pDescriptorWrites[i].descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC)) { 36610fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski VkDeviceSize storageAlignment = device_data->device_limits.minStorageBufferOffsetAlignment; 36620fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski for (uint32_t j = 0; j < pDescriptorWrites[i].descriptorCount; j++) { 36630fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski if (pDescriptorWrites[i].pBufferInfo != NULL) { 36640fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski if (vk_safe_modulo(pDescriptorWrites[i].pBufferInfo[j].offset, storageAlignment) != 0) { 36650fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski skip_call |= 36660fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski log_msg(device_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, 3667825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT, 0, __LINE__, DEVICE_LIMIT, LayerName, 36680fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski "vkUpdateDescriptorSets(): pDescriptorWrites[%d].pBufferInfo[%d].offset (0x%" PRIxLEAST64 36690fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski ") must be a multiple of device limit minStorageBufferOffsetAlignment 0x%" PRIxLEAST64, 36700fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski i, j, pDescriptorWrites[i].pBufferInfo[j].offset, storageAlignment); 36710fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36720fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36730fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 36740fbb9a38d2fd4823ec845bb08e42658bcf1e41a8Mark Lobodzinski } 3675ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3676ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3677ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3678ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3679491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device) 3680491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies); 3681c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3682c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 3683c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 36847b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo *pCreateInfo, 3685956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkFramebuffer *pFramebuffer) { 3686491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3687956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3688491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3689c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3690c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3691956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateFramebuffer(my_data->report_data, pCreateInfo, pAllocator, pFramebuffer); 3692c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3693956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3694c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); 3695c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3696e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateFramebuffer", result); 3697c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3698ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3699ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3700ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3701ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3702956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks *pAllocator) { 3703956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3704491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 37053e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 37063e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3707956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyFramebuffer(my_data->report_data, framebuffer, pAllocator); 37083e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3709956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3710491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer, pAllocator); 37113e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 37123e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 37133e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 37149a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinskibool PreCreateRenderPass(layer_data *dev_data, const VkRenderPassCreateInfo *pCreateInfo) { 37159a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski bool skip_call = false; 37169a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski uint32_t max_color_attachments = dev_data->device_limits.maxColorAttachments; 37179a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 37189a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski for (uint32_t i = 0; i < pCreateInfo->subpassCount; ++i) { 37199a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski if (pCreateInfo->pSubpasses[i].colorAttachmentCount > max_color_attachments) { 37209a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski skip_call |= log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, 3721956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski __LINE__, DEVICE_LIMIT, "DL", "Cannot create a render pass with %d color attachments. Max is %d.", 37229a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski pCreateInfo->pSubpasses[i].colorAttachmentCount, max_color_attachments); 37239a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 37249a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 37259a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski return skip_call; 37269a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski} 37279a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 37287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateRenderPass(VkDevice device, const VkRenderPassCreateInfo *pCreateInfo, 3729956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkRenderPass *pRenderPass) { 3730491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3731956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3732491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3733c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3734c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3735956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateRenderPass(my_data->report_data, pCreateInfo, pAllocator, pRenderPass); 3736956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= PreCreateRenderPass(my_data, pCreateInfo); 3737ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3738956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3739c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass); 3740c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3741e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateRenderPass", result); 3742c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3743ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3744ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3745ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3746ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3747956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyRenderPass(VkDevice device, VkRenderPass renderPass, const VkAllocationCallbacks *pAllocator) { 3748956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3749491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 37503e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 37513e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3752956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyRenderPass(my_data->report_data, renderPass, pAllocator); 37533e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3754956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3755491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass, pAllocator); 37563e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 37573e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 37583e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3759956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL GetRenderAreaGranularity(VkDevice device, VkRenderPass renderPass, VkExtent2D *pGranularity) { 3760956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3761491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3762c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3763c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3764956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetRenderAreaGranularity(my_data->report_data, renderPass, pGranularity); 3765e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3766956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3767c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity); 3768b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski } 3769ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3770ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 37717b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL CreateCommandPool(VkDevice device, const VkCommandPoolCreateInfo *pCreateInfo, 3772956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkCommandPool *pCommandPool) { 3773491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3774956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3775491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3776c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3777c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3778956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 3779fc6407d1fdf5ad60b1ca0a1bce6b52fbd81a4329Dustin Graves validate_queue_family_index(my_data, "vkCreateCommandPool", "pCreateInfo->queueFamilyIndex", pCreateInfo->queueFamilyIndex); 378047892024546c67e8db98b51b2ddb962c21088894Mark Lobodzinski 3781956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateCommandPool(my_data->report_data, pCreateInfo, pAllocator, pCommandPool); 3782ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3783956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3784c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool); 3785c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3786e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkCreateCommandPool", result); 3787c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3788ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3789ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3790ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3791ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3792956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL DestroyCommandPool(VkDevice device, VkCommandPool commandPool, const VkAllocationCallbacks *pAllocator) { 3793956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3794491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 37953e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves assert(my_data != NULL); 37963e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3797956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkDestroyCommandPool(my_data->report_data, commandPool, pAllocator); 37983e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3799956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3800491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, commandPool, pAllocator); 38013e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves } 38023e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves} 38033e646e3de6f4fe0bfb0f0bf3a4633f3ead86dc66Dustin Graves 3804956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandPool(VkDevice device, VkCommandPool commandPool, VkCommandPoolResetFlags flags) { 3805cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3806956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3807e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3808e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 3809e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 3810956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkResetCommandPool(my_data->report_data, commandPool, flags); 3811e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 3812956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3813cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags); 3814cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 3815cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves validate_result(my_data->report_data, "vkResetCommandPool", result); 3816cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 3817c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3818c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return result; 3819c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 3820c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3821956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AllocateCommandBuffers(VkDevice device, const VkCommandBufferAllocateInfo *pAllocateInfo, 3822956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkCommandBuffer *pCommandBuffers) { 3823491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3824956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3825491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3826c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3827c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 3828956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkAllocateCommandBuffers(my_data->report_data, pAllocateInfo, pCommandBuffers); 3829c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3830956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3831c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pAllocateInfo, pCommandBuffers); 3832c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3833e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkAllocateCommandBuffers", result); 3834c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3835ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3836ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3837ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3838ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3839956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL FreeCommandBuffers(VkDevice device, VkCommandPool commandPool, uint32_t commandBufferCount, 38407b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkCommandBuffer *pCommandBuffers) { 3841ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3842ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 3843ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 3844ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3845cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves 3846ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkFreeCommandBuffers(report_data, commandPool, commandBufferCount, pCommandBuffers); 3847cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves 3848ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3849ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // This is an array of handles, where the elements are allowed to be VK_NULL_HANDLE, and does not require any validation beyond 3850ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // validate_array() 3851ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_array(report_data, "vkFreeCommandBuffers", "commandBufferCount", "pCommandBuffers", commandBufferCount, 3852ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pCommandBuffers, true, true); 3853ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3854ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3855cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves get_dispatch_table(pc_device_table_map, device) 3856491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->FreeCommandBuffers(device, commandPool, commandBufferCount, pCommandBuffers); 3857cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves } 3858cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves} 3859cfdbfae2240e494dc2a9ee4953beaa508d66c6c0Dustin Graves 38609a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinskibool PreBeginCommandBuffer(layer_data *dev_data, VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo) { 38619a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski bool skip_call = false; 38629a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski layer_data *phy_dev_data = get_my_data_ptr(get_dispatch_key(dev_data->physical_device), layer_data_map); 38639a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski const VkCommandBufferInheritanceInfo *pInfo = pBeginInfo->pInheritanceInfo; 38649a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 38659a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski if (pInfo != NULL) { 38669a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski if ((phy_dev_data->physical_device_features.inheritedQueries == VK_FALSE) && (pInfo->occlusionQueryEnable != VK_FALSE)) { 38679a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski skip_call |= 38689a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, 3869825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski reinterpret_cast<uint64_t>(commandBuffer), __LINE__, DEVICE_FEATURE, LayerName, 38709a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski "Cannot set inherited occlusionQueryEnable in vkBeginCommandBuffer() when device does not support " 38719a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski "inheritedQueries."); 38729a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 38739a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 38749a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski if ((phy_dev_data->physical_device_features.inheritedQueries != VK_FALSE) && (pInfo->occlusionQueryEnable != VK_FALSE) && 38759a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski (!validate_VkQueryControlFlagBits(VkQueryControlFlagBits(pInfo->queryFlags)))) { 38769a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski skip_call |= 38779a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski log_msg(dev_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT, 3878825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski reinterpret_cast<uint64_t>(commandBuffer), __LINE__, DEVICE_FEATURE, LayerName, 38799a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski "Cannot enable in occlusion queries in vkBeginCommandBuffer() and set queryFlags to %d which is not a " 38809a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski "valid combination of VkQueryControlFlagBits.", 38819a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski pInfo->queryFlags); 38829a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 38839a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski } 38849a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski return skip_call; 38859a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski} 38869a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 38879a5429d278c2afe9fb382d52fb4f325975d82b18Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL BeginCommandBuffer(VkCommandBuffer commandBuffer, const VkCommandBufferBeginInfo *pBeginInfo) { 3888491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3889ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves bool skip_call = false; 3890ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves layer_data *device_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3891ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves assert(device_data != nullptr); 3892ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves debug_report_data *report_data = device_data->report_data; 3893c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3894ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= parameter_validation_vkBeginCommandBuffer(report_data, pBeginInfo); 3895c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3896ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // Validation for parameters excluded from the generated validation code due to a 'noautovalidity' tag in vk.xml 3897ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: pBeginInfo->pInheritanceInfo must not be NULL if commandBuffer is a secondary command buffer 3898ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_struct_type(report_data, "vkBeginCommandBuffer", "pBeginInfo->pInheritanceInfo", 3899ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO", pBeginInfo->pInheritanceInfo, 3900ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO, false); 3901ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3902ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (pBeginInfo->pInheritanceInfo != NULL) { 3903dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_struct_pnext(report_data, "vkBeginCommandBuffer", "pBeginInfo->pInheritanceInfo->pNext", NULL, 3904059e07e5fff8ea8b6108fe900e573d845fb98bf0Dustin Graves pBeginInfo->pInheritanceInfo->pNext, 0, NULL, GeneratedHeaderVersion); 3905dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3906dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves skip_call |= validate_bool32(report_data, "vkBeginCommandBuffer", "pBeginInfo->pInheritanceInfo->occlusionQueryEnable", 3907dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves pBeginInfo->pInheritanceInfo->occlusionQueryEnable); 3908dc2176da60be5727b891a93f527f57c1c1804b7fDustin Graves 3909ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: This only needs to be validated when the inherited queries feature is enabled 3910ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // skip_call |= validate_flags(report_data, "vkBeginCommandBuffer", "pBeginInfo->pInheritanceInfo->queryFlags", 3911ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // "VkQueryControlFlagBits", AllVkQueryControlFlagBits, pBeginInfo->pInheritanceInfo->queryFlags, false); 3912ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 3913ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves // TODO: This must be 0 if the pipeline statistics queries feature is not enabled 3914ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves skip_call |= validate_flags(report_data, "vkBeginCommandBuffer", "pBeginInfo->pInheritanceInfo->pipelineStatistics", 3915ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves "VkQueryPipelineStatisticFlagBits", AllVkQueryPipelineStatisticFlagBits, 3916ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves pBeginInfo->pInheritanceInfo->pipelineStatistics, false); 3917ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves } 3918ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves 39199a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski skip_call |= PreBeginCommandBuffer(device_data, commandBuffer, pBeginInfo); 39209a5429d278c2afe9fb382d52fb4f325975d82b18Mark Lobodzinski 3921ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves if (!skip_call) { 3922c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo); 3923ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3924ccf92a97687d7a802b229bcfa4c92a9f33d98156Dustin Graves validate_result(report_data, "vkBeginCommandBuffer", result); 3925c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3926c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 3927ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3928ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3929c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 39307b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR VkResult VKAPI_CALL EndCommandBuffer(VkCommandBuffer commandBuffer) { 3931e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3932e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 3933e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 3934b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer); 3935ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3936e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves validate_result(my_data->report_data, "vkEndCommandBuffer", result); 3937c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 3938ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes return result; 3939ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3940ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3941956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL ResetCommandBuffer(VkCommandBuffer commandBuffer, VkCommandBufferResetFlags flags) { 3942aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 3943e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3944e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves assert(my_data != NULL); 3945e78276be1425aa8b1ca4d529db7a54a60dff9ec2Dustin Graves 3946aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves bool skip_call = parameter_validation_vkResetCommandBuffer(my_data->report_data, flags); 3947aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves 3948aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves if (!skip_call) { 3949aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags); 3950ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3951aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves validate_result(my_data->report_data, "vkResetCommandBuffer", result); 3952aca93abb797e61876d3206510e3d20d6d9b4384eDustin Graves } 395323b5f8d7681a19a940ea940381557852c4c27ecdCourtney Goeltzenleuchter 3954c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes return result; 3955c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 3956c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 3957956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindPipeline(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 3958956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkPipeline pipeline) { 3959956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3960c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3961c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves assert(my_data != NULL); 3962ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3963956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBindPipeline(my_data->report_data, pipelineBindPoint, pipeline); 3964c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves 3965956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3966c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline); 3967c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves } 3968ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3969ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 3970956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, 3971956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkViewport *pViewports) { 3972956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3973491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3974c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3975c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3976956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetViewport(my_data->report_data, firstViewport, viewportCount, pViewports); 3977c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3978956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3979491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 3980491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports); 3981c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3982932cdb54a622f4ca69a25071eecbac235b4dc16fCourtney Goeltzenleuchter} 3983932cdb54a622f4ca69a25071eecbac235b4dc16fCourtney Goeltzenleuchter 3984956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, 3985956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkRect2D *pScissors) { 3986956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 3987491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 3988c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 3989c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3990956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetScissor(my_data->report_data, firstScissor, scissorCount, pScissors); 3991c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 3992956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 3993c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors); 3994c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 3995ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 3996ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 39977b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth) { 3998b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth); 3999c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 4000ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4001956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, 4002956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski float depthBiasSlopeFactor) { 4003491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4004491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor); 4005f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northrop} 4006f5bd2253ff4114ac446f8eb820e78d56f711020fCody Northrop 40077b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4]) { 4008956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4009491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4010c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4011c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4012956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetBlendConstants(my_data->report_data, blendConstants); 4013c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4014956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4015c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants); 4016c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4017c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 4018c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4019956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds) { 4020b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds); 4021c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 4022c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4023956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, 4024956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t compareMask) { 4025956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 402687bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 402787bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves assert(my_data != NULL); 402887bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4029956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetStencilCompareMask(my_data->report_data, faceMask, compareMask); 403087bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4031956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 403287bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask); 403387bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves } 40342605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop} 40352605cb05ec149b2e2668540501dc79c71b6a67e9Cody Northrop 4036956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask) { 4037956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 403887bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 403987bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves assert(my_data != NULL); 404087bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4041956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetStencilWriteMask(my_data->report_data, faceMask, writeMask); 404287bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4043956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 404487bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask); 404587bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves } 4046c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 4047c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4048956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference) { 4049956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 405087bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 405187bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves assert(my_data != NULL); 405287bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4053956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetStencilReference(my_data->report_data, faceMask, reference); 405487bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves 4055956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 405687bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference); 405787bc9291208dc09b52ff11d98e726f4c6972deb0Dustin Graves } 4058c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes} 4059c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4060956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindDescriptorSets(VkCommandBuffer commandBuffer, VkPipelineBindPoint pipelineBindPoint, 4061956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkPipelineLayout layout, uint32_t firstSet, uint32_t descriptorSetCount, 4062956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkDescriptorSet *pDescriptorSets, uint32_t dynamicOffsetCount, 4063956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const uint32_t *pDynamicOffsets) { 4064956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4065491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4066c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4067c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4068956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 4069956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski parameter_validation_vkCmdBindDescriptorSets(my_data->report_data, pipelineBindPoint, layout, firstSet, descriptorSetCount, 4070956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pDescriptorSets, dynamicOffsetCount, pDynamicOffsets); 4071c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4072956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4073491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4074491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, descriptorSetCount, pDescriptorSets, 4075491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn dynamicOffsetCount, pDynamicOffsets); 4076c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4077ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4078ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4079956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindIndexBuffer(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 4080956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkIndexType indexType) { 4081956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4082c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4083c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves assert(my_data != NULL); 4084c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves 4085956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBindIndexBuffer(my_data->report_data, buffer, offset, indexType); 4086ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4087956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4088c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType); 4089c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves } 4090ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4091ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4092956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBindVertexBuffers(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, 4093956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkBuffer *pBuffers, const VkDeviceSize *pOffsets) { 4094956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4095491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4096c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4097c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4098956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBindVertexBuffers(my_data->report_data, firstBinding, bindingCount, pBuffers, pOffsets); 4099ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4100956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4101491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4102491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets); 4103c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4104ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4105ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4106491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, 4107491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn uint32_t firstInstance) { 41080f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine if (vertexCount == 0) { 4109b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make 4110acb1359c8e1528e5d67bb0101c94c48a07785098Courtney Goeltzenleuchter // this an error or leave as is. 4111ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4112825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski REQUIRED_PARAMETER, LayerName, "vkCmdDraw parameter, uint32_t vertexCount, is 0"); 41130f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine return false; 41140f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine } 41150f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine 41160f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine if (instanceCount == 0) { 4117b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make 4118acb1359c8e1528e5d67bb0101c94c48a07785098Courtney Goeltzenleuchter // this an error or leave as is. 4119ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARNING_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4120825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski REQUIRED_PARAMETER, LayerName, "vkCmdDraw parameter, uint32_t instanceCount, is 0"); 41210f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine return false; 41220f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine } 41230f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine 41240f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine return true; 41250f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine} 41260f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine 41277b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdDraw(VkCommandBuffer commandBuffer, uint32_t vertexCount, uint32_t instanceCount, 41287b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu uint32_t firstVertex, uint32_t firstInstance) { 4129b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); 41300f480e67d70c784ffe26e8d6c902048138d39980Michael Lentine 4131491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4132491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance); 4133ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4134ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4135956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexed(VkCommandBuffer commandBuffer, uint32_t indexCount, uint32_t instanceCount, 4136956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t firstIndex, int32_t vertexOffset, uint32_t firstInstance) { 4137491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4138491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance); 4139ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4140ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4141956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, 4142956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t stride) { 4143956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4144cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4145cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4146cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4147956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdDrawIndirect(my_data->report_data, buffer, offset, count, stride); 4148cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4149956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4150cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride); 4151cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4152c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4153c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4154956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDrawIndexedIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset, 4155956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t count, uint32_t stride) { 4156956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4157cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4158cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4159cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4160956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdDrawIndexedIndirect(my_data->report_data, buffer, offset, count, stride); 4161cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4162956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4163cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer) 4164cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves ->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride); 4165cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 41664687f2601670ce1e77546d7f59f432f703503e83Dustin Graves} 41676f8cd63d0cb4211dd18dd4cee1634d4cf8e403e8Jon Ashburn 41687b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdDispatch(VkCommandBuffer commandBuffer, uint32_t x, uint32_t y, uint32_t z) { 41694687f2601670ce1e77546d7f59f432f703503e83Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z); 4170ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4171f0615e2d3a6b0b1b633f777cdb2bd03b2c20eb57Jon Ashburn 4172956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDispatchIndirect(VkCommandBuffer commandBuffer, VkBuffer buffer, VkDeviceSize offset) { 4173956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4174cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4175cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4176cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4177956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdDispatchIndirect(my_data->report_data, buffer, offset); 4178cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4179956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4180cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset); 4181cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4182c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4183c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 41847b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdCopyBuffer(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkBuffer dstBuffer, 41857b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu uint32_t regionCount, const VkBufferCopy *pRegions) { 4186956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4187491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4188c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4189c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4190956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdCopyBuffer(my_data->report_data, srcBuffer, dstBuffer, regionCount, pRegions); 4191c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4192956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4193491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4194491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions); 4195c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4196c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4197c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4198491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdCopyImage(VkCommandBuffer commandBuffer, const VkImageCopy *pRegions) { 4199491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pRegions != nullptr) { 4200491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->srcSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4201491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4202ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4203825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4204491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator"); 4205491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4206491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4207491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->dstSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4208491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4209ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4210825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4211491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator"); 4212491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4213491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4214e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 4215c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4216c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4217c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4218c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4219956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 4220956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 4221956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkImageCopy *pRegions) { 4222956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4223491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4224c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4225c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4226956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdCopyImage(my_data->report_data, srcImage, srcImageLayout, dstImage, dstImageLayout, 4227956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski regionCount, pRegions); 4228c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4229956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4230c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCmdCopyImage(commandBuffer, pRegions); 4231c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4232491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4233491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 4234c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4235b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski} 4236b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski 4237491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdBlitImage(VkCommandBuffer commandBuffer, const VkImageBlit *pRegions) { 4238491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pRegions != nullptr) { 4239491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->srcSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4240491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4241ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4242825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4243491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator"); 4244491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4245491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4246491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->dstSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4247491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4248ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4249825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4250491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator"); 4251491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4252491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4253e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 4254c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4255c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4256c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4257c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4258956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBlitImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 4259956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 4260956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkImageBlit *pRegions, VkFilter filter) { 4261956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4262491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4263c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4264c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4265956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBlitImage(my_data->report_data, srcImage, srcImageLayout, dstImage, dstImageLayout, 4266956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski regionCount, pRegions, filter); 4267c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4268956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4269c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCmdBlitImage(commandBuffer, pRegions); 4270c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4271491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4272491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter); 4273c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4274b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski} 4275b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski 4276491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdCopyBufferToImage(VkCommandBuffer commandBuffer, const VkBufferImageCopy *pRegions) { 4277491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pRegions != nullptr) { 4278491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->imageSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4279491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4280ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4281825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4282491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized " 4283491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "enumerator"); 4284491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4285491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4286e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 4287c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4288c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4289c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4290c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4291956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyBufferToImage(VkCommandBuffer commandBuffer, VkBuffer srcBuffer, VkImage dstImage, 4292956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImageLayout dstImageLayout, uint32_t regionCount, 4293956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkBufferImageCopy *pRegions) { 4294956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4295491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4296c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4297c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4298956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdCopyBufferToImage(my_data->report_data, srcBuffer, dstImage, dstImageLayout, regionCount, 4299956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pRegions); 4300c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4301956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4302c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCmdCopyBufferToImage(commandBuffer, pRegions); 4303c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4304491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4305491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions); 4306c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4307b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski} 4308b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski 4309491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdCopyImageToBuffer(VkCommandBuffer commandBuffer, const VkBufferImageCopy *pRegions) { 4310491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pRegions != nullptr) { 4311491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->imageSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4312491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4313ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4314825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4315491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized " 4316491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "enumerator"); 4317491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4318491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4319e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 4320c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4321c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4322c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4323c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4324956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyImageToBuffer(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 4325956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkBuffer dstBuffer, uint32_t regionCount, const VkBufferImageCopy *pRegions) { 4326956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4327491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4328c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4329c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4330956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdCopyImageToBuffer(my_data->report_data, srcImage, srcImageLayout, dstBuffer, regionCount, 4331956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pRegions); 4332c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4333956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4334c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCmdCopyImageToBuffer(commandBuffer, pRegions); 4335c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4336491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4337491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions); 4338c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4339c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4340c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4341e43d3cee564a734d8f2333346f618004357d6e0cMark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdUpdateBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 4342e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski VkDeviceSize dataSize, const uint32_t *pData) { 4343e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski bool skip_call = false; 4344491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4345c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4346c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4347e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski skip_call |= parameter_validation_vkCmdUpdateBuffer(my_data->report_data, dstBuffer, dstOffset, dataSize, pData); 4348c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4349e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (dstOffset & 3) { 4350825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg( 4351825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, INVALID_USAGE, 4352825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "CmdUpdateBuffer parameter, VkDeviceSize dstOffset (0x%" PRIxLEAST64 "), is not a multiple of 4", dstOffset); 4353e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } 4354e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski 4355e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if ((dataSize <= 0) || (dataSize > 65536)) { 4356e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, 4357825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, "CmdUpdateBuffer parameter, VkDeviceSize dataSize (0x%" PRIxLEAST64 4358825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski "), must be greater than zero and less than or equal to 65536", 4359e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski dataSize); 4360e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } else if (dataSize & 3) { 4361825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg( 4362825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, INVALID_USAGE, 4363825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "CmdUpdateBuffer parameter, VkDeviceSize dataSize (0x%" PRIxLEAST64 "), is not a multiple of 4", dataSize); 4364e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } 4365e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski 4366e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (!skip_call) { 4367491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4368491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData); 4369c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4370c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4371c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4372e43d3cee564a734d8f2333346f618004357d6e0cMark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdFillBuffer(VkCommandBuffer commandBuffer, VkBuffer dstBuffer, VkDeviceSize dstOffset, 4373e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski VkDeviceSize size, uint32_t data) { 4374e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski bool skip_call = false; 4375cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4376cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4377cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4378e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski skip_call |= parameter_validation_vkCmdFillBuffer(my_data->report_data, dstBuffer, dstOffset, size, data); 4379cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4380e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (dstOffset & 3) { 4381825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski skip_call |= log_msg( 4382825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, INVALID_USAGE, 4383825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "vkCmdFillBuffer parameter, VkDeviceSize dstOffset (0x%" PRIxLEAST64 "), is not a multiple of 4", dstOffset); 4384e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } 4385e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski 4386e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (size != VK_WHOLE_SIZE) { 4387e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (size <= 0) { 4388e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski skip_call |= log_msg( 4389e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, INVALID_USAGE, 4390825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski LayerName, "vkCmdFillBuffer parameter, VkDeviceSize size (0x%" PRIxLEAST64 "), must be greater than zero", size); 4391e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } else if (size & 3) { 4392e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski skip_call |= log_msg(my_data->report_data, VK_DEBUG_REPORT_ERROR_BIT_EXT, VkDebugReportObjectTypeEXT(0), 0, __LINE__, 4393825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski INVALID_USAGE, LayerName, 4394e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski "vkCmdFillBuffer parameter, VkDeviceSize size (0x%" PRIxLEAST64 "), is not a multiple of 4", size); 4395e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } 4396e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski } 4397e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski 4398e43d3cee564a734d8f2333346f618004357d6e0cMark Lobodzinski if (!skip_call) { 4399cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data); 4400cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4401ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4402c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4403956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 4404956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkClearColorValue *pColor, uint32_t rangeCount, 4405956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 4406956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4407491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4408c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4409c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4410956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdClearColorImage(my_data->report_data, image, imageLayout, pColor, rangeCount, pRanges); 4411ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4412956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4413491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4414491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges); 4415c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4416ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes} 4417ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4418956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image, VkImageLayout imageLayout, 4419956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkClearDepthStencilValue *pDepthStencil, uint32_t rangeCount, 4420956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkImageSubresourceRange *pRanges) { 4421956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4422491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4423c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4424c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4425956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdClearDepthStencilImage(my_data->report_data, image, imageLayout, pDepthStencil, 4426956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski rangeCount, pRanges); 4427c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4428956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4429491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4430491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges); 4431c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4432c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4433c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 44347b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdClearAttachments(VkCommandBuffer commandBuffer, uint32_t attachmentCount, 44357b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkClearAttachment *pAttachments, uint32_t rectCount, 44367b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu const VkClearRect *pRects) { 4437956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4438491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4439c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4440c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4441956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdClearAttachments(my_data->report_data, attachmentCount, pAttachments, rectCount, pRects); 4442b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski 4443956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4444491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4445491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects); 4446c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4447b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski} 4448b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski 4449491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PreCmdResolveImage(VkCommandBuffer commandBuffer, const VkImageResolve *pRegions) { 4450491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if (pRegions != nullptr) { 4451491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->srcSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4452491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4453491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn log_msg( 4454ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4455825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4456491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator"); 4457491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4458491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4459491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn if ((pRegions->dstSubresource.aspectMask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | 4460491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0) { 4461491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn log_msg( 4462ce31fbafc11ffa7749cf95c7ff16a96507a28225Dustin Graves mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT, 0, __LINE__, 4463825ac70f99460ccb9494d34f93d8ee7ec303e5deMark Lobodzinski UNRECOGNIZED_VALUE, LayerName, 4464491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator"); 4465491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn return false; 4466491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4467e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes } 4468c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4469c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4470c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4471c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4472956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResolveImage(VkCommandBuffer commandBuffer, VkImage srcImage, VkImageLayout srcImageLayout, 4473956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImage dstImage, VkImageLayout dstImageLayout, uint32_t regionCount, 4474956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkImageResolve *pRegions) { 4475956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4476491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4477c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4478c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4479956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdResolveImage(my_data->report_data, srcImage, srcImageLayout, dstImage, dstImageLayout, 4480956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski regionCount, pRegions); 4481c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4482956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4483c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves PreCmdResolveImage(commandBuffer, pRegions); 4484c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4485491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4486491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions); 4487c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4488c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4489c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4490956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdSetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 4491956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4492cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4493cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4494cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4495956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdSetEvent(my_data->report_data, event, stageMask); 4496cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4497956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4498cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask); 4499cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4500c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4501c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4502956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetEvent(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags stageMask) { 4503956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4504cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4505cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4506cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4507956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdResetEvent(my_data->report_data, event, stageMask); 4508cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4509956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4510cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask); 4511cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4512c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4513c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4514956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdWaitEvents(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent *pEvents, 4515956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, 4516956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 4517956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 4518956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 4519956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4520491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4521c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4522c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4523956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdWaitEvents(my_data->report_data, eventCount, pEvents, srcStageMask, dstStageMask, 4524956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, 4525956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 4526a4ae48bfd6f2e2a80e1f92e054a007cf90a4e218Jon Ashburn 4527956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4528491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4529491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, 4530491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 4531491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn } 4532491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn} 4533491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 4534956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPipelineBarrier(VkCommandBuffer commandBuffer, VkPipelineStageFlags srcStageMask, 4535956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkPipelineStageFlags dstStageMask, VkDependencyFlags dependencyFlags, 4536956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t memoryBarrierCount, const VkMemoryBarrier *pMemoryBarriers, 4537956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t bufferMemoryBarrierCount, const VkBufferMemoryBarrier *pBufferMemoryBarriers, 4538956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t imageMemoryBarrierCount, const VkImageMemoryBarrier *pImageMemoryBarriers) { 4539956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4540491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4541c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4542c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves 4543956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdPipelineBarrier(my_data->report_data, srcStageMask, dstStageMask, dependencyFlags, 4544956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, 4545956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 4546a4ae48bfd6f2e2a80e1f92e054a007cf90a4e218Jon Ashburn 4547956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4548491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4549491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, 4550491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers); 4551c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4552c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4553c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4554956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot, 4555956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkQueryControlFlags flags) { 4556956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4557cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4558cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4559cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4560956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBeginQuery(my_data->report_data, queryPool, slot, flags); 4561cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4562956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4563cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags); 4564cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4565c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4566c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 45677b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdEndQuery(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t slot) { 4568956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4569cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4570cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4571cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4572956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdEndQuery(my_data->report_data, queryPool, slot); 4573cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4574956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4575cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot); 4576cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4577c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4578c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4579956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdResetQueryPool(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 4580956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queryCount) { 4581956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4582cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4583cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4584cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4585956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdResetQueryPool(my_data->report_data, queryPool, firstQuery, queryCount); 4586cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4587956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4588cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount); 4589cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4590c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4591c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4592491a3cd11793892b996a8b5771479cc539198f99Jon Ashburnbool PostCmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, VkQueryPool queryPool, 4593491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn uint32_t slot) { 4594ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 459559c215d5fe27c1fd8da2a14be6e144d40f2cd6b4Chia-I Wu ValidateEnumerator(pipelineStage); 4596c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4597c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes return true; 4598c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4599c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 46007b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdWriteTimestamp(VkCommandBuffer commandBuffer, VkPipelineStageFlagBits pipelineStage, 46017b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu VkQueryPool queryPool, uint32_t query) { 4602956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4603cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4604cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4605cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4606956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdWriteTimestamp(my_data->report_data, pipelineStage, queryPool, query); 460720f68594175ea65bde6294bb2c0959024a3df155Mark Lobodzinski 4608956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4609cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); 4610cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4611cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, query); 4612cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4613c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4614c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4615956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdCopyQueryPoolResults(VkCommandBuffer commandBuffer, VkQueryPool queryPool, uint32_t firstQuery, 4616956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queryCount, VkBuffer dstBuffer, VkDeviceSize dstOffset, 4617956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDeviceSize stride, VkQueryResultFlags flags) { 4618956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4619cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4620cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves assert(my_data != NULL); 4621cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4622956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdCopyQueryPoolResults(my_data->report_data, queryPool, firstQuery, queryCount, dstBuffer, 4623956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski dstOffset, stride, flags); 4624cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves 4625956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4626cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer) 4627cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves ->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags); 4628cba0861249f2112e41cd00600a832d7fb605c7b8Dustin Graves } 4629491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn} 4630491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn 4631956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdPushConstants(VkCommandBuffer commandBuffer, VkPipelineLayout layout, VkShaderStageFlags stageFlags, 4632956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t offset, uint32_t size, const void *pValues) { 4633956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4634491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4635c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4636c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4637956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdPushConstants(my_data->report_data, layout, stageFlags, offset, size, pValues); 4638c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4639956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4640491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4641491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues); 4642c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes } 4643c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 4644c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4645956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdBeginRenderPass(VkCommandBuffer commandBuffer, const VkRenderPassBeginInfo *pRenderPassBegin, 4646956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkSubpassContents contents) { 4647956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4648491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4649c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4650e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 4651956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdBeginRenderPass(my_data->report_data, pRenderPassBegin, contents); 4652ea53d6fffd5bf5861ebaa462fae5365dd77c2a46Jeremy Hayes 4653956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4654c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents); 4655c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 4656f0615e2d3a6b0b1b633f777cdb2bd03b2c20eb57Jon Ashburn} 4657f0615e2d3a6b0b1b633f777cdb2bd03b2c20eb57Jon Ashburn 46587b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdNextSubpass(VkCommandBuffer commandBuffer, VkSubpassContents contents) { 4659956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4660c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4661c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves assert(my_data != NULL); 4662c278df83ca4958fda8efcf3b52e2f89c8ccd8991Chia-I Wu 4663956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdNextSubpass(my_data->report_data, contents); 4664c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves 4665956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4666c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents); 4667c3fc3d8e91f24136f4e2cc036e92033b826a96e7Dustin Graves } 4668e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes} 4669e841fdc68f9d44b26b2b4542c02a3f23bb6c1752Jeremy Hayes 46707b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR void VKAPI_CALL CmdEndRenderPass(VkCommandBuffer commandBuffer) { 4671b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer); 467288eaa3bf0c7874f8b62cf35e3b649201ecc47c36Chia-I Wu} 4673c278df83ca4958fda8efcf3b52e2f89c8ccd8991Chia-I Wu 4674956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdExecuteCommands(VkCommandBuffer commandBuffer, uint32_t commandBufferCount, 4675956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkCommandBuffer *pCommandBuffers) { 4676956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 4677491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 4678c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves assert(my_data != NULL); 4679c27938e86dbf318ea4d7dd411f4ebbe42bea19c9Jeremy Hayes 4680956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCmdExecuteCommands(my_data->report_data, commandBufferCount, pCommandBuffers); 4681c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4682956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4683491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn get_dispatch_table(pc_device_table_map, commandBuffer) 4684491a3cd11793892b996a8b5771479cc539198f99Jon Ashburn ->CmdExecuteCommands(commandBuffer, commandBufferCount, pCommandBuffers); 4685c87f31ee35ccc0cd9fd637b6f1b7e3c8dae51c2dDustin Graves } 46865b66aa51f060c804e1804cf45909ed6489552c62Chia-I Wu} 4687c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 4688956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceLayerProperties(uint32_t *pCount, VkLayerProperties *pProperties) { 4689a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return util_GetLayerProperties(1, &global_layer, pCount, pProperties); 4690a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu} 4691a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu 4692956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 4693956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkLayerProperties *pProperties) { 4694a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return util_GetLayerProperties(1, &global_layer, pCount, pProperties); 4695a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu} 4696a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu 4697956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 4698956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkExtensionProperties *pProperties) { 4699a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) 4700a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties); 4701a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu 4702a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return VK_ERROR_LAYER_NOT_PRESENT; 4703a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu} 4704a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu 4705956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL EnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, const char *pLayerName, 4706956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t *pCount, VkExtensionProperties *pProperties) { 470710e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu /* parameter_validation does not have any physical device extensions */ 4708381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu if (pLayerName && !strcmp(pLayerName, global_layer.layerName)) 470910e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu return util_GetExtensionProperties(0, NULL, pCount, pProperties); 4710381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu 4711381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu assert(physicalDevice); 4712381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu 4713381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu return get_dispatch_table(pc_instance_table_map, physicalDevice) 4714381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu ->EnumerateDeviceExtensionProperties(physicalDevice, NULL, pCount, pProperties); 471510e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu} 471610e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu 47178c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski// WSI Extension Functions 47188c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47198c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateSwapchainKHR(VkDevice device, const VkSwapchainCreateInfoKHR *pCreateInfo, 4720956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchain) { 47218c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4722956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 47238c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 47248c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 47258c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4726956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkCreateSwapchainKHR(my_data->report_data, pCreateInfo, pAllocator, pSwapchain); 47278c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4728956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 47298c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_device_table_map, device)->CreateSwapchainKHR(device, pCreateInfo, pAllocator, pSwapchain); 47308c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateSwapchainKHR", result); 47328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 47338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47348c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 47358c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 47368c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47378c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetSwapchainImagesKHR(VkDevice device, VkSwapchainKHR swapchain, uint32_t *pSwapchainImageCount, 4738956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkImage *pSwapchainImages) { 47398c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4740956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 47418c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 47428c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 47438c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4744956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 47458c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski parameter_validation_vkGetSwapchainImagesKHR(my_data->report_data, swapchain, pSwapchainImageCount, pSwapchainImages); 47468c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4747956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 47488c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_device_table_map, device) 47498c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski ->GetSwapchainImagesKHR(device, swapchain, pSwapchainImageCount, pSwapchainImages); 47508c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47518c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkGetSwapchainImagesKHR", result); 47528c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 47538c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47548c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 47558c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 47568c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47578c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL AcquireNextImageKHR(VkDevice device, VkSwapchainKHR swapchain, uint64_t timeout, 4758956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkSemaphore semaphore, VkFence fence, uint32_t *pImageIndex) { 47598c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4760956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 47618c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 47628c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 47638c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4764956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 47658c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski parameter_validation_vkAcquireNextImageKHR(my_data->report_data, swapchain, timeout, semaphore, fence, pImageIndex); 47668c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4767956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 47688c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_device_table_map, device) 4769956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->AcquireNextImageKHR(device, swapchain, timeout, semaphore, fence, pImageIndex); 47708c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47718c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkAcquireNextImageKHR", result); 47728c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 47738c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47748c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 47758c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 47768c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47778c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL QueuePresentKHR(VkQueue queue, const VkPresentInfoKHR *pPresentInfo) { 47788c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4779956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 47808c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(queue), layer_data_map); 47818c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 47828c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4783956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkQueuePresentKHR(my_data->report_data, pPresentInfo); 47848c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4785956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 47868c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_device_table_map, queue)->QueuePresentKHR(queue, pPresentInfo); 47878c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47888c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkQueuePresentKHR", result); 47898c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 47908c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47918c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 47928c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 47938c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 47948c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceSupportKHR(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex, 47958c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkSurfaceKHR surface, VkBool32 *pSupported) { 47968c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4797956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 47988c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 47998c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 48008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4801956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 48028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski parameter_validation_vkGetPhysicalDeviceSurfaceSupportKHR(my_data->report_data, queueFamilyIndex, surface, pSupported); 48038c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4804956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 48058c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 48068c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski ->GetPhysicalDeviceSurfaceSupportKHR(physicalDevice, queueFamilyIndex, surface, pSupported); 48078c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48088c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkGetPhysicalDeviceSurfaceSupportKHR", result); 48098c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 48108c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48118c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 48128c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 48138c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48148c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceCapabilitiesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 48158c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkSurfaceCapabilitiesKHR *pSurfaceCapabilities) { 48168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4817956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 48188c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 48198c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 48208c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4821956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= 4822956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski parameter_validation_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(my_data->report_data, surface, pSurfaceCapabilities); 48238c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4824956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 48258c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 48268c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski ->GetPhysicalDeviceSurfaceCapabilitiesKHR(physicalDevice, surface, pSurfaceCapabilities); 48278c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48288c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkGetPhysicalDeviceSurfaceCapabilitiesKHR", result); 48298c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 48308c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 48328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 48338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48348c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfaceFormatsKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 48358c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski uint32_t *pSurfaceFormatCount, 48368c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkSurfaceFormatKHR *pSurfaceFormats) { 48378c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4838956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 48398c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 48408c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 48418c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4842956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceSurfaceFormatsKHR(my_data->report_data, surface, pSurfaceFormatCount, 4843956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pSurfaceFormats); 48448c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4845956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 48468c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 48478c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski ->GetPhysicalDeviceSurfaceFormatsKHR(physicalDevice, surface, pSurfaceFormatCount, pSurfaceFormats); 48488c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48498c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkGetPhysicalDeviceSurfaceFormatsKHR", result); 48508c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 48518c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48528c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 48538c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 48548c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48558c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceSurfacePresentModesKHR(VkPhysicalDevice physicalDevice, VkSurfaceKHR surface, 48568c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski uint32_t *pPresentModeCount, 48578c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkPresentModeKHR *pPresentModes) { 48588c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 4859956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = false; 48608c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 48618c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 48628c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4863956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceSurfacePresentModesKHR(my_data->report_data, surface, pPresentModeCount, 4864956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski pPresentModes); 48658c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4866956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 48678c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 48688c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski ->GetPhysicalDeviceSurfacePresentModesKHR(physicalDevice, surface, pPresentModeCount, pPresentModes); 48698c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48708c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkGetPhysicalDeviceSurfacePresentModesKHR", result); 48718c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 48728c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48738c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 48748c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 48758c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48768c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 48778c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWin32SurfaceKHR(VkInstance instance, const VkWin32SurfaceCreateInfoKHR *pCreateInfo, 48788c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 48798c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 48808c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48818c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 48828c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 48838c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4884956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateWin32SurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 48858c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4886956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 48878c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = 48888c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski get_dispatch_table(pc_instance_table_map, instance)->CreateWin32SurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 48898c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 48908c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48918c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateWin32SurfaceKHR", result); 48928c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48938c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 48948c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 48958c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 48968c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 48978c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 48988c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXcbSurfaceKHR(VkInstance instance, const VkXcbSurfaceCreateInfoKHR *pCreateInfo, 48998c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 49008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 49018c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 49038c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 49048c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4905956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateXcbSurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 49068c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4907956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 49088c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = 49098c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski get_dispatch_table(pc_instance_table_map, instance)->CreateXcbSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 49108c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 49118c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49128c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateXcbSurfaceKHR", result); 49138c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49148c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 49158c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 49168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4917956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXcbPresentationSupportKHR(VkPhysicalDevice physicalDevice, 4918956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queueFamilyIndex, xcb_connection_t *connection, 4919956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski xcb_visualid_t visual_id) { 49208c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkBool32 result = false; 49218c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49228c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 49238c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 49248c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4925956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkGetPhysicalDeviceXcbPresentationSupportKHR(my_data->report_data, queueFamilyIndex, 4926956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski connection, visual_id); 49278c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4928956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4929956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 4930956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->GetPhysicalDeviceXcbPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection, visual_id); 49318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 49328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 49348c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 49358c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 49368c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49378c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 49388c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateXlibSurfaceKHR(VkInstance instance, const VkXlibSurfaceCreateInfoKHR *pCreateInfo, 4939956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 49408c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 49418c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49428c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 49438c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 49448c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4945956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateXlibSurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 49468c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4947956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 49488c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = 49498c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski get_dispatch_table(pc_instance_table_map, instance)->CreateXlibSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 49508c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 49518c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49528c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateXlibSurfaceKHR", result); 49538c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49548c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 49558c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 49568c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4957956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceXlibPresentationSupportKHR(VkPhysicalDevice physicalDevice, 4958956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queueFamilyIndex, Display *dpy, 4959956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VisualID visualID) { 49608c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkBool32 result = false; 49618c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49628c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 49638c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 49648c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4965956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = 4966956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski parameter_validation_vkGetPhysicalDeviceXlibPresentationSupportKHR(my_data->report_data, queueFamilyIndex, dpy, visualID); 49678c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4968956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 4969956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 4970956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->GetPhysicalDeviceXlibPresentationSupportKHR(physicalDevice, queueFamilyIndex, dpy, visualID); 49718c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 4972e8a100f135c260ad3021b630d7715dc14e09d6a6Karl Schultz return result; 49738c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 49748c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 49758c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49768c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 49778c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateMirSurfaceKHR(VkInstance instance, const VkMirSurfaceCreateInfoKHR *pCreateInfo, 4978956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 49798c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 49808c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49818c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 49828c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 49838c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4984956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateMirSurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 49858c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4986956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 49878c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski result = 49888c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski get_dispatch_table(pc_instance_table_map, instance)->CreateMirSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 49898c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 49908c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49918c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateMirSurfaceKHR", result); 49928c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 49938c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 49948c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 49958c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 4996956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceMirPresentationSupportKHR(VkPhysicalDevice physicalDevice, 4997956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queueFamilyIndex, MirConnection *connection) { 49988c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkBool32 result = false; 49998c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 50018c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 50028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5003956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = 5004956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski parameter_validation_vkGetPhysicalDeviceMirPresentationSupportKHR(my_data->report_data, queueFamilyIndex, connection); 50058c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5006956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 5007956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 5008956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->GetPhysicalDeviceMirPresentationSupportKHR(physicalDevice, queueFamilyIndex, connection); 50098c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 50108c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 50118c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 50128c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50138c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 50148c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateWaylandSurfaceKHR(VkInstance instance, const VkWaylandSurfaceCreateInfoKHR *pCreateInfo, 5015956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 50168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 50178c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50188c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 50198c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 50208c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5021956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateWaylandSurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 50228c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5023956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 5024956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, instance) 5025956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->CreateWaylandSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 50268c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 50278c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50288c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateWaylandSurfaceKHR", result); 50298c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50308c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 50318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 50328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5033956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkBool32 VKAPI_CALL GetPhysicalDeviceWaylandPresentationSupportKHR(VkPhysicalDevice physicalDevice, 5034956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski uint32_t queueFamilyIndex, 5035956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski struct wl_display *display) { 50368c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkBool32 result = false; 50378c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50388c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 50398c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 50408c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5041956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = 5042956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski parameter_validation_vkGetPhysicalDeviceWaylandPresentationSupportKHR(my_data->report_data, queueFamilyIndex, display); 50438c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5044956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 5045956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 5046956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->GetPhysicalDeviceWaylandPresentationSupportKHR(physicalDevice, queueFamilyIndex, display); 50478c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 50488c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 50498c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 50508c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50518c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 50528c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL CreateAndroidSurfaceKHR(VkInstance instance, const VkAndroidSurfaceCreateInfoKHR *pCreateInfo, 5053956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, VkSurfaceKHR *pSurface) { 50548c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 50558c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50568c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 50578c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski assert(my_data != NULL); 50588c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5059956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski bool skip_call = parameter_validation_vkCreateAndroidSurfaceKHR(my_data->report_data, pCreateInfo, pAllocator, pSurface); 50608c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5061956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (!skip_call) { 5062956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, instance) 5063956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski ->CreateAndroidSurfaceKHR(instance, pCreateInfo, pAllocator, pSurface); 50648c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 50658c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50668c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski validate_result(my_data->report_data, "vkCreateAndroidSurfaceKHR", result); 50678c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 50688c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return result; 50698c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 50708c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 50718c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 507219ab93c7fb4fb9ae62679852783a97f599d1b367Mark YoungVKAPI_ATTR VkResult VKAPI_CALL CreateSharedSwapchainsKHR(VkDevice device, uint32_t swapchainCount, 507319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkSwapchainCreateInfoKHR *pCreateInfos, 507419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young const VkAllocationCallbacks *pAllocator, VkSwapchainKHR *pSwapchains) { 507519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 507619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young bool skip_call = false; 507719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 507819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young assert(my_data != NULL); 507919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 508019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young skip_call |= parameter_validation_vkCreateSharedSwapchainsKHR(my_data->report_data, swapchainCount, pCreateInfos, pAllocator, 508119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young pSwapchains); 508219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 508319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!skip_call) { 508419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young result = get_dispatch_table(pc_device_table_map, device) 508519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young ->CreateSharedSwapchainsKHR(device, swapchainCount, pCreateInfos, pAllocator, pSwapchains); 508619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 508719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young validate_result(my_data->report_data, "vkCreateSharedSwapchainsKHR", result); 508819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 508919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 509019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return result; 509119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young} 509219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 5093fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski// VK_EXT_debug_marker Extension 5094fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectTagEXT(VkDevice device, VkDebugMarkerObjectTagInfoEXT *pTagInfo) { 5095fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 5096fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski bool skip_call = false; 5097fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 5098fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski assert(my_data != NULL); 5099fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5100fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski skip_call |= parameter_validation_vkDebugMarkerSetObjectTagEXT(my_data->report_data, pTagInfo); 5101fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5102fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski if (!skip_call) { 5103fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski result = get_dispatch_table(pc_device_table_map, device)->DebugMarkerSetObjectTagEXT(device, pTagInfo); 5104fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5105fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski validate_result(my_data->report_data, "vkDebugMarkerSetObjectTagEXT", result); 5106fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski } 5107fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5108fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski return result; 5109fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski} 5110fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5111fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL DebugMarkerSetObjectNameEXT(VkDevice device, VkDebugMarkerObjectNameInfoEXT *pNameInfo) { 5112fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 5113fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski bool skip_call = false; 5114fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 5115fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski assert(my_data != NULL); 5116fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5117fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski skip_call |= parameter_validation_vkDebugMarkerSetObjectNameEXT(my_data->report_data, pNameInfo); 5118fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5119fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski if (!skip_call) { 5120fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski VkResult result = get_dispatch_table(pc_device_table_map, device)->DebugMarkerSetObjectNameEXT(device, pNameInfo); 5121fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5122fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski validate_result(my_data->report_data, "vkDebugMarkerSetObjectNameEXT", result); 5123fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski } 5124fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5125fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski return result; 5126fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski} 5127fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5128fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDebugMarkerBeginEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { 5129fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski bool skip_call = false; 5130fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 5131fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski assert(my_data != NULL); 5132fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5133fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski skip_call |= parameter_validation_vkCmdDebugMarkerBeginEXT(my_data->report_data, pMarkerInfo); 5134fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5135fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski if (!skip_call) { 5136fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDebugMarkerBeginEXT(commandBuffer, pMarkerInfo); 5137fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski } 5138fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski} 5139fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5140fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark LobodzinskiVKAPI_ATTR void VKAPI_CALL CmdDebugMarkerInsertEXT(VkCommandBuffer commandBuffer, VkDebugMarkerMarkerInfoEXT *pMarkerInfo) { 5141fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski bool skip_call = false; 5142fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(commandBuffer), layer_data_map); 5143fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski assert(my_data != NULL); 5144fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5145fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski skip_call |= parameter_validation_vkCmdDebugMarkerInsertEXT(my_data->report_data, pMarkerInfo); 5146fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5147fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski if (!skip_call) { 5148fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDebugMarkerInsertEXT(commandBuffer, pMarkerInfo); 5149fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski } 5150fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski} 5151fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5152c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski// VK_NV_external_memory_capabilities Extension 5153c92401037746bfd57b3872434008dc2301c89338Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetPhysicalDeviceExternalImageFormatPropertiesNV( 5154c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski VkPhysicalDevice physicalDevice, VkFormat format, VkImageType type, VkImageTiling tiling, VkImageUsageFlags usage, 5155c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski VkImageCreateFlags flags, VkExternalMemoryHandleTypeFlagsNV externalHandleType, 5156c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski VkExternalImageFormatPropertiesNV *pExternalImageFormatProperties) { 5157c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5158c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 5159c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski bool skip_call = false; 5160c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map); 5161c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski assert(my_data != NULL); 5162c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5163c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski skip_call |= parameter_validation_vkGetPhysicalDeviceExternalImageFormatPropertiesNV( 5164c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski my_data->report_data, format, type, tiling, usage, flags, externalHandleType, pExternalImageFormatProperties); 5165c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5166c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski if (!skip_call) { 5167c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski result = get_dispatch_table(pc_instance_table_map, physicalDevice) 5168c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski ->GetPhysicalDeviceExternalImageFormatPropertiesNV(physicalDevice, format, type, tiling, usage, flags, 5169c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski externalHandleType, pExternalImageFormatProperties); 5170c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5171c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski validate_result(my_data->report_data, "vkGetPhysicalDeviceExternalImageFormatPropertiesNV", result); 5172c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski } 5173c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5174c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski return result; 5175c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski} 5176c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5177b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 5178b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski// VK_NV_external_memory_win32 Extension 5179b026ed12073ccca12f7c333474076f369eaef08dMark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL GetMemoryWin32HandleNV(VkDevice device, VkDeviceMemory memory, 5180b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski VkExternalMemoryHandleTypeFlagsNV handleType, HANDLE *pHandle) { 5181b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski 5182b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski VkResult result = VK_ERROR_VALIDATION_FAILED_EXT; 5183b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski bool skip_call = false; 5184b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski layer_data *my_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 5185b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski assert(my_data != NULL); 5186b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski 5187b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski skip_call |= parameter_validation_vkGetMemoryWin32HandleNV(my_data->report_data, memory, handleType, pHandle); 5188b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski 5189b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski if (!skip_call) { 5190b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski result = get_dispatch_table(pc_device_table_map, device)->GetMemoryWin32HandleNV(device, memory, handleType, pHandle); 5191b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski } 5192b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski 5193b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski return result; 5194b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski} 5195b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 5196c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5197c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski 5198fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5199956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction intercept_core_instance_command(const char *name); 52008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5201956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction intercept_core_device_command(const char *name); 52028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5203956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkDevice device); 52048c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5205956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstance instance); 52068c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 52077b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetDeviceProcAddr(VkDevice device, const char *funcName) { 5208bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu assert(device); 5209bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu 5210b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 5211b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 5212bb84994a71bd9b17b407ac33eb82020014b8126aDustin Graves if (validate_string(data->report_data, "vkGetDeviceProcAddr", "funcName", funcName)) { 5213b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski return NULL; 5214b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski } 5215b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 5216bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu PFN_vkVoidFunction proc = intercept_core_device_command(funcName); 5217bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu if (proc) 5218bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu return proc; 52192bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 52208c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski proc = InterceptWsiEnabledCommand(funcName, device); 52218c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (proc) 52228c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return proc; 52238c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5224b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL) 52252bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter return NULL; 5226b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName); 5227c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes} 5228c6cfa5772820b7d75469f113266187bda00e2c76Jeremy Hayes 52297b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I WuVKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL GetInstanceProcAddr(VkInstance instance, const char *funcName) { 5230fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu PFN_vkVoidFunction proc = intercept_core_instance_command(funcName); 52315a5da26ab8e94ac12324dcc4b970e48f38faa234Chia-I Wu if (!proc) 52325a5da26ab8e94ac12324dcc4b970e48f38faa234Chia-I Wu proc = intercept_core_device_command(funcName); 52338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 52348c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (!proc) 52358c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski proc = InterceptWsiEnabledCommand(funcName, VkDevice(VK_NULL_HANDLE)); 5236956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski 5237fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu if (proc) 5238fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu return proc; 5239fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu 5240fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu assert(instance); 52412bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter 5242b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map); 5243b2c8e0814487a459507ac51e8856d90a845e101aMark Lobodzinski 5244fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu proc = debug_report_get_instance_proc_addr(data->report_data, funcName); 52458c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (!proc) 52468c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski proc = InterceptWsiEnabledCommand(funcName, instance); 52478c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5248fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu if (proc) 5249fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu return proc; 525009f8504df85293a4ca7a9eb234f42e7949f7a049Courtney Goeltzenleuchter 5251b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL) 52522bdf6da2d55b916479f90c87797ff20ddbb14fd9Courtney Goeltzenleuchter return NULL; 5253b838dc009d9e603ef13bdac2d1f960da78bebd2dMark Lobodzinski return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName); 525479b78ace8a69e7e9ef067d3575aee09c5a05a50fJon Ashburn} 525510e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu 5256956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction intercept_core_instance_command(const char *name) { 5257fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu static const struct { 5258fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu const char *name; 5259fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu PFN_vkVoidFunction proc; 5260fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu } core_instance_commands[] = { 5261956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetInstanceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(GetInstanceProcAddr)}, 5262956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateInstance", reinterpret_cast<PFN_vkVoidFunction>(CreateInstance)}, 5263956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyInstance", reinterpret_cast<PFN_vkVoidFunction>(DestroyInstance)}, 5264956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateDevice", reinterpret_cast<PFN_vkVoidFunction>(CreateDevice)}, 5265956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEnumeratePhysicalDevices", reinterpret_cast<PFN_vkVoidFunction>(EnumeratePhysicalDevices)}, 5266956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceProperties)}, 5267956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceFeatures", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFeatures)}, 5268956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceFormatProperties)}, 5269956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceImageFormatProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceImageFormatProperties)}, 5270956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceSparseImageFormatProperties", 5271956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSparseImageFormatProperties)}, 5272956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceQueueFamilyProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceQueueFamilyProperties)}, 5273956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceMemoryProperties", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMemoryProperties)}, 5274956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEnumerateInstanceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceLayerProperties)}, 5275956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEnumerateDeviceLayerProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceLayerProperties)}, 5276956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEnumerateInstanceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateInstanceExtensionProperties)}, 5277956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEnumerateDeviceExtensionProperties", reinterpret_cast<PFN_vkVoidFunction>(EnumerateDeviceExtensionProperties)}, 5278c92401037746bfd57b3872434008dc2301c89338Mark Lobodzinski {"vkGetPhysicalDeviceExternalImageFormatPropertiesNV", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceExternalImageFormatPropertiesNV) }, 5279fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu }; 5280fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu 5281fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu for (size_t i = 0; i < ARRAY_SIZE(core_instance_commands); i++) { 5282fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu if (!strcmp(core_instance_commands[i].name, name)) 5283fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu return core_instance_commands[i].proc; 5284fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu } 5285fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu 5286fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu return nullptr; 5287fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu} 5288fc4ebd6db76615ac51ff732627222f0b830949f1Chia-I Wu 5289956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction intercept_core_device_command(const char *name) { 5290bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu static const struct { 5291bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu const char *name; 5292bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu PFN_vkVoidFunction proc; 5293bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu } core_device_commands[] = { 5294956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetDeviceProcAddr", reinterpret_cast<PFN_vkVoidFunction>(GetDeviceProcAddr)}, 5295956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyDevice", reinterpret_cast<PFN_vkVoidFunction>(DestroyDevice)}, 5296956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetDeviceQueue", reinterpret_cast<PFN_vkVoidFunction>(GetDeviceQueue)}, 5297956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkQueueSubmit", reinterpret_cast<PFN_vkVoidFunction>(QueueSubmit)}, 5298956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkQueueWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(QueueWaitIdle)}, 5299956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDeviceWaitIdle", reinterpret_cast<PFN_vkVoidFunction>(DeviceWaitIdle)}, 5300956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkAllocateMemory", reinterpret_cast<PFN_vkVoidFunction>(AllocateMemory)}, 5301956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkFreeMemory", reinterpret_cast<PFN_vkVoidFunction>(FreeMemory)}, 5302956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkMapMemory", reinterpret_cast<PFN_vkVoidFunction>(MapMemory)}, 5303956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkUnmapMemory", reinterpret_cast<PFN_vkVoidFunction>(UnmapMemory)}, 5304956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkFlushMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(FlushMappedMemoryRanges)}, 5305956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkInvalidateMappedMemoryRanges", reinterpret_cast<PFN_vkVoidFunction>(InvalidateMappedMemoryRanges)}, 5306956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetDeviceMemoryCommitment", reinterpret_cast<PFN_vkVoidFunction>(GetDeviceMemoryCommitment)}, 5307956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkBindBufferMemory", reinterpret_cast<PFN_vkVoidFunction>(BindBufferMemory)}, 5308956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkBindImageMemory", reinterpret_cast<PFN_vkVoidFunction>(BindImageMemory)}, 5309956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateFence", reinterpret_cast<PFN_vkVoidFunction>(CreateFence)}, 5310956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyFence", reinterpret_cast<PFN_vkVoidFunction>(DestroyFence)}, 5311956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkResetFences", reinterpret_cast<PFN_vkVoidFunction>(ResetFences)}, 5312956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetFenceStatus", reinterpret_cast<PFN_vkVoidFunction>(GetFenceStatus)}, 5313956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkWaitForFences", reinterpret_cast<PFN_vkVoidFunction>(WaitForFences)}, 5314956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateSemaphore", reinterpret_cast<PFN_vkVoidFunction>(CreateSemaphore)}, 5315956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroySemaphore", reinterpret_cast<PFN_vkVoidFunction>(DestroySemaphore)}, 5316956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateEvent", reinterpret_cast<PFN_vkVoidFunction>(CreateEvent)}, 5317956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyEvent", reinterpret_cast<PFN_vkVoidFunction>(DestroyEvent)}, 5318956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetEventStatus", reinterpret_cast<PFN_vkVoidFunction>(GetEventStatus)}, 5319956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkSetEvent", reinterpret_cast<PFN_vkVoidFunction>(SetEvent)}, 5320956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkResetEvent", reinterpret_cast<PFN_vkVoidFunction>(ResetEvent)}, 5321956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateQueryPool", reinterpret_cast<PFN_vkVoidFunction>(CreateQueryPool)}, 5322956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyQueryPool", reinterpret_cast<PFN_vkVoidFunction>(DestroyQueryPool)}, 5323956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(GetQueryPoolResults)}, 5324956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateBuffer", reinterpret_cast<PFN_vkVoidFunction>(CreateBuffer)}, 5325956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyBuffer", reinterpret_cast<PFN_vkVoidFunction>(DestroyBuffer)}, 5326956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateBufferView", reinterpret_cast<PFN_vkVoidFunction>(CreateBufferView)}, 5327956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyBufferView", reinterpret_cast<PFN_vkVoidFunction>(DestroyBufferView)}, 5328956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateImage", reinterpret_cast<PFN_vkVoidFunction>(CreateImage)}, 5329956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyImage", reinterpret_cast<PFN_vkVoidFunction>(DestroyImage)}, 5330956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetImageSubresourceLayout", reinterpret_cast<PFN_vkVoidFunction>(GetImageSubresourceLayout)}, 5331956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateImageView", reinterpret_cast<PFN_vkVoidFunction>(CreateImageView)}, 5332956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyImageView", reinterpret_cast<PFN_vkVoidFunction>(DestroyImageView)}, 5333956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateShaderModule", reinterpret_cast<PFN_vkVoidFunction>(CreateShaderModule)}, 5334956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyShaderModule", reinterpret_cast<PFN_vkVoidFunction>(DestroyShaderModule)}, 5335956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreatePipelineCache", reinterpret_cast<PFN_vkVoidFunction>(CreatePipelineCache)}, 5336956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyPipelineCache", reinterpret_cast<PFN_vkVoidFunction>(DestroyPipelineCache)}, 5337956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPipelineCacheData", reinterpret_cast<PFN_vkVoidFunction>(GetPipelineCacheData)}, 5338956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkMergePipelineCaches", reinterpret_cast<PFN_vkVoidFunction>(MergePipelineCaches)}, 5339956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateGraphicsPipelines", reinterpret_cast<PFN_vkVoidFunction>(CreateGraphicsPipelines)}, 5340956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateComputePipelines", reinterpret_cast<PFN_vkVoidFunction>(CreateComputePipelines)}, 5341956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyPipeline", reinterpret_cast<PFN_vkVoidFunction>(DestroyPipeline)}, 5342956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreatePipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(CreatePipelineLayout)}, 5343956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyPipelineLayout", reinterpret_cast<PFN_vkVoidFunction>(DestroyPipelineLayout)}, 5344956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateSampler", reinterpret_cast<PFN_vkVoidFunction>(CreateSampler)}, 5345956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroySampler", reinterpret_cast<PFN_vkVoidFunction>(DestroySampler)}, 5346956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(CreateDescriptorSetLayout)}, 5347956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyDescriptorSetLayout", reinterpret_cast<PFN_vkVoidFunction>(DestroyDescriptorSetLayout)}, 5348956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(CreateDescriptorPool)}, 5349956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(DestroyDescriptorPool)}, 5350956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkResetDescriptorPool", reinterpret_cast<PFN_vkVoidFunction>(ResetDescriptorPool)}, 5351956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkAllocateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(AllocateDescriptorSets)}, 5352956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkFreeDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(FreeDescriptorSets)}, 5353956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkUpdateDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(UpdateDescriptorSets)}, 5354956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetViewport", reinterpret_cast<PFN_vkVoidFunction>(CmdSetViewport)}, 5355956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetScissor", reinterpret_cast<PFN_vkVoidFunction>(CmdSetScissor)}, 5356956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetLineWidth", reinterpret_cast<PFN_vkVoidFunction>(CmdSetLineWidth)}, 5357956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetDepthBias", reinterpret_cast<PFN_vkVoidFunction>(CmdSetDepthBias)}, 5358956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetBlendConstants", reinterpret_cast<PFN_vkVoidFunction>(CmdSetBlendConstants)}, 5359956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetDepthBounds", reinterpret_cast<PFN_vkVoidFunction>(CmdSetDepthBounds)}, 5360956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetStencilCompareMask", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilCompareMask)}, 5361956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetStencilWriteMask", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilWriteMask)}, 5362956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetStencilReference", reinterpret_cast<PFN_vkVoidFunction>(CmdSetStencilReference)}, 5363956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkAllocateCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(AllocateCommandBuffers)}, 5364956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkFreeCommandBuffers", reinterpret_cast<PFN_vkVoidFunction>(FreeCommandBuffers)}, 5365956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkBeginCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(BeginCommandBuffer)}, 5366956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkEndCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(EndCommandBuffer)}, 5367956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkResetCommandBuffer", reinterpret_cast<PFN_vkVoidFunction>(ResetCommandBuffer)}, 5368956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBindPipeline", reinterpret_cast<PFN_vkVoidFunction>(CmdBindPipeline)}, 5369956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBindDescriptorSets", reinterpret_cast<PFN_vkVoidFunction>(CmdBindDescriptorSets)}, 5370956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBindVertexBuffers", reinterpret_cast<PFN_vkVoidFunction>(CmdBindVertexBuffers)}, 5371956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBindIndexBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdBindIndexBuffer)}, 5372956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDraw", reinterpret_cast<PFN_vkVoidFunction>(CmdDraw)}, 5373956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDrawIndexed", reinterpret_cast<PFN_vkVoidFunction>(CmdDrawIndexed)}, 5374956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDrawIndirect", reinterpret_cast<PFN_vkVoidFunction>(CmdDrawIndirect)}, 5375956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDrawIndexedIndirect", reinterpret_cast<PFN_vkVoidFunction>(CmdDrawIndexedIndirect)}, 5376956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDispatch", reinterpret_cast<PFN_vkVoidFunction>(CmdDispatch)}, 5377956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdDispatchIndirect", reinterpret_cast<PFN_vkVoidFunction>(CmdDispatchIndirect)}, 5378956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdCopyBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdCopyBuffer)}, 5379956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdCopyImage", reinterpret_cast<PFN_vkVoidFunction>(CmdCopyImage)}, 5380956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBlitImage", reinterpret_cast<PFN_vkVoidFunction>(CmdBlitImage)}, 5381956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdCopyBufferToImage", reinterpret_cast<PFN_vkVoidFunction>(CmdCopyBufferToImage)}, 5382956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdCopyImageToBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdCopyImageToBuffer)}, 5383956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdUpdateBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdUpdateBuffer)}, 5384956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdFillBuffer", reinterpret_cast<PFN_vkVoidFunction>(CmdFillBuffer)}, 5385956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdClearColorImage", reinterpret_cast<PFN_vkVoidFunction>(CmdClearColorImage)}, 5386956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdClearDepthStencilImage", reinterpret_cast<PFN_vkVoidFunction>(CmdClearDepthStencilImage)}, 5387956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdClearAttachments", reinterpret_cast<PFN_vkVoidFunction>(CmdClearAttachments)}, 5388956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdResolveImage", reinterpret_cast<PFN_vkVoidFunction>(CmdResolveImage)}, 5389956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdSetEvent", reinterpret_cast<PFN_vkVoidFunction>(CmdSetEvent)}, 5390956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdResetEvent", reinterpret_cast<PFN_vkVoidFunction>(CmdResetEvent)}, 5391956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdWaitEvents", reinterpret_cast<PFN_vkVoidFunction>(CmdWaitEvents)}, 5392956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdPipelineBarrier", reinterpret_cast<PFN_vkVoidFunction>(CmdPipelineBarrier)}, 5393956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBeginQuery", reinterpret_cast<PFN_vkVoidFunction>(CmdBeginQuery)}, 5394956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdEndQuery", reinterpret_cast<PFN_vkVoidFunction>(CmdEndQuery)}, 5395956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdResetQueryPool", reinterpret_cast<PFN_vkVoidFunction>(CmdResetQueryPool)}, 5396956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdWriteTimestamp", reinterpret_cast<PFN_vkVoidFunction>(CmdWriteTimestamp)}, 5397956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdCopyQueryPoolResults", reinterpret_cast<PFN_vkVoidFunction>(CmdCopyQueryPoolResults)}, 5398956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdPushConstants", reinterpret_cast<PFN_vkVoidFunction>(CmdPushConstants)}, 5399956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(CreateFramebuffer)}, 5400956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyFramebuffer", reinterpret_cast<PFN_vkVoidFunction>(DestroyFramebuffer)}, 5401956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateRenderPass", reinterpret_cast<PFN_vkVoidFunction>(CreateRenderPass)}, 5402956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyRenderPass", reinterpret_cast<PFN_vkVoidFunction>(DestroyRenderPass)}, 5403956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetRenderAreaGranularity", reinterpret_cast<PFN_vkVoidFunction>(GetRenderAreaGranularity)}, 5404956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateCommandPool", reinterpret_cast<PFN_vkVoidFunction>(CreateCommandPool)}, 5405956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkDestroyCommandPool", reinterpret_cast<PFN_vkVoidFunction>(DestroyCommandPool)}, 5406956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkResetCommandPool", reinterpret_cast<PFN_vkVoidFunction>(ResetCommandPool)}, 5407956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdBeginRenderPass", reinterpret_cast<PFN_vkVoidFunction>(CmdBeginRenderPass)}, 5408956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdNextSubpass", reinterpret_cast<PFN_vkVoidFunction>(CmdNextSubpass)}, 5409956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdExecuteCommands", reinterpret_cast<PFN_vkVoidFunction>(CmdExecuteCommands)}, 5410956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCmdEndRenderPass", reinterpret_cast<PFN_vkVoidFunction>(CmdEndRenderPass)}, 5411fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski {"vkDebugMarkerSetObjectTagEXT", reinterpret_cast<PFN_vkVoidFunction>(DebugMarkerSetObjectTagEXT) }, 5412fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski {"vkDebugMarkerSetObjectNameEXT", reinterpret_cast<PFN_vkVoidFunction>(DebugMarkerSetObjectNameEXT) }, 5413fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski {"vkCmdDebugMarkerBeginEXT", reinterpret_cast<PFN_vkVoidFunction>(CmdDebugMarkerBeginEXT) }, 5414fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski {"vkCmdDebugMarkerInsertEXT", reinterpret_cast<PFN_vkVoidFunction>(CmdDebugMarkerInsertEXT) }, 5415b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 5416b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski {"vkGetMemoryWin32HandleNV", reinterpret_cast<PFN_vkVoidFunction>(GetMemoryWin32HandleNV) }, 5417b026ed12073ccca12f7c333474076f369eaef08dMark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 5418fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski}; 5419fc397b868d8157d3aa07d4825950bba7a6b8bf6cMark Lobodzinski 5420bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu 5421bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu for (size_t i = 0; i < ARRAY_SIZE(core_device_commands); i++) { 5422bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu if (!strcmp(core_device_commands[i].name, name)) 5423bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu return core_device_commands[i].proc; 5424bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu } 5425bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu 5426bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu return nullptr; 5427bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu} 5428bab209437b44c55f3068e416b5efa6bebda65a59Chia-I Wu 5429956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinskistatic PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkDevice device) { 54308c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski static const struct { 54318c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski const char *name; 54328c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski PFN_vkVoidFunction proc; 54338c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } wsi_device_commands[] = { 5434956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkCreateSwapchainKHR", reinterpret_cast<PFN_vkVoidFunction>(CreateSwapchainKHR)}, 5435956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetSwapchainImagesKHR", reinterpret_cast<PFN_vkVoidFunction>(GetSwapchainImagesKHR)}, 5436956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkAcquireNextImageKHR", reinterpret_cast<PFN_vkVoidFunction>(AcquireNextImageKHR)}, 5437956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkQueuePresentKHR", reinterpret_cast<PFN_vkVoidFunction>(QueuePresentKHR)}, 54388c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski }; 54398c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54408c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (device) { 54418c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski layer_data *device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map); 54428c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 544319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_enabled) { 544419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young for (size_t i = 0; i < ARRAY_SIZE(wsi_device_commands); i++) { 544519ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp(wsi_device_commands[i].name, name)) 544619ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return wsi_device_commands[i].proc; 544719ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 544819ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 544919ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young 545019ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (device_data->wsi_display_swapchain_enabled) { 545119ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young if (!strcmp("vkCreateSharedSwapchainsKHR", name)) { 545219ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young return reinterpret_cast<PFN_vkVoidFunction>(CreateSharedSwapchainsKHR); 545319ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 545419ab93c7fb4fb9ae62679852783a97f599d1b367Mark Young } 54558c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 54568c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54578c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return nullptr; 54588c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 54598c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54608c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinskistatic PFN_vkVoidFunction InterceptWsiEnabledCommand(const char *name, VkInstance instance) { 54618c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski static const struct { 54628c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski const char *name; 54638c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski PFN_vkVoidFunction proc; 54648c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } wsi_instance_commands[] = { 5465956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceSurfaceSupportKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceSupportKHR)}, 5466956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceSurfaceCapabilitiesKHR", 5467956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceCapabilitiesKHR)}, 5468956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceSurfaceFormatsKHR", reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfaceFormatsKHR)}, 5469956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski {"vkGetPhysicalDeviceSurfacePresentModesKHR", 5470956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceSurfacePresentModesKHR)}, 54718c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski }; 54728c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54738c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance); 5474956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if (instance_extension_map.size() == 0 || !instance_extension_map[pTable].wsi_enabled) 54758c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return nullptr; 54768c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54778c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski for (size_t i = 0; i < ARRAY_SIZE(wsi_instance_commands); i++) { 54788c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski if (!strcmp(wsi_instance_commands[i].name, name)) 54798c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return wsi_instance_commands[i].proc; 54808c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski } 54818c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 54828c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WIN32_KHR 5483956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].win32_enabled == true) && !strcmp("vkCreateWin32SurfaceKHR", name)) 54848c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWin32SurfaceKHR); 54858c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_WIN32_KHR 54868c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XCB_KHR 5487956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].xcb_enabled == true) && !strcmp("vkCreateXcbSurfaceKHR", name)) 54888c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXcbSurfaceKHR); 5489956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].xcb_enabled == true) && !strcmp("vkGetPhysicalDeviceXcbPresentationSupportKHR", name)) 54908c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXcbPresentationSupportKHR); 54918c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_XCB_KHR 54928c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_XLIB_KHR 5493956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].xlib_enabled == true) && !strcmp("vkCreateXlibSurfaceKHR", name)) 54948c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateXlibSurfaceKHR); 5495956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].xlib_enabled == true) && !strcmp("vkGetPhysicalDeviceXlibPresentationSupportKHR", name)) 54968c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceXlibPresentationSupportKHR); 54978c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_XLIB_KHR 54988c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_MIR_KHR 5499956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].mir_enabled == true) && !strcmp("vkCreateMirSurfaceKHR", name)) 55008c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateMirSurfaceKHR); 5501956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].mir_enabled == true) && !strcmp("vkGetPhysicalDeviceMirPresentationSupportKHR", name)) 55028c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceMirPresentationSupportKHR); 55038c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_MIR_KHR 55048c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_WAYLAND_KHR 5505956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].wayland_enabled == true) && !strcmp("vkCreateWaylandSurfaceKHR", name)) 55068c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateWaylandSurfaceKHR); 5507956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].wayland_enabled == true) && 5508956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski !strcmp("vkGetPhysicalDeviceWaylandPresentationSupportKHR", name)) 55098c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(GetPhysicalDeviceWaylandPresentationSupportKHR); 55108c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_WAYLAND_KHR 55118c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#ifdef VK_USE_PLATFORM_ANDROID_KHR 5512956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski if ((instance_extension_map[pTable].android_enabled == true) && !strcmp("vkCreateAndroidSurfaceKHR", name)) 55138c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return reinterpret_cast<PFN_vkVoidFunction>(CreateAndroidSurfaceKHR); 55148c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski#endif // VK_USE_PLATFORM_ANDROID_KHR 55158c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 55168c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski return nullptr; 55178c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski} 55188c22ca55f11ab5a7adb94a55ebf72cd5343a4eadMark Lobodzinski 5519e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} // namespace parameter_validation 5520e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5521e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu// vk_layer_logging.h expects these to be defined 5522e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5523956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(VkInstance instance, 5524956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkDebugReportCallbackCreateInfoEXT *pCreateInfo, 5525956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator, 5526956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDebugReportCallbackEXT *pMsgCallback) { 55277b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu return parameter_validation::CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback); 5528e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5529e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5530956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(VkInstance instance, VkDebugReportCallbackEXT msgCallback, 5531956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski const VkAllocationCallbacks *pAllocator) { 55327b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu parameter_validation::DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator); 5533e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5534e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5535956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(VkInstance instance, VkDebugReportFlagsEXT flags, 5536956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkDebugReportObjectTypeEXT objType, uint64_t object, size_t location, 5537956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski int32_t msgCode, const char *pLayerPrefix, const char *pMsg) { 55387b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu parameter_validation::DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg); 5539e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5540e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5541e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu// loader-layer interface v0 5542e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5543956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pCount, 5544956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkExtensionProperties *pProperties) { 5545a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return parameter_validation::EnumerateInstanceExtensionProperties(pLayerName, pCount, pProperties); 554610e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu} 554710e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu 5548956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(uint32_t *pCount, 5549956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkLayerProperties *pProperties) { 5550a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return parameter_validation::EnumerateInstanceLayerProperties(pCount, pProperties); 555110e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu} 555210e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu 5553956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark LobodzinskiVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(VkPhysicalDevice physicalDevice, uint32_t *pCount, 5554956b832a152c2c97d6591aa6d735f4cdfc8d9e51Mark Lobodzinski VkLayerProperties *pProperties) { 5555a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu // the layer command handles VK_NULL_HANDLE just fine internally 5556a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu assert(physicalDevice == VK_NULL_HANDLE); 5557a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu return parameter_validation::EnumerateDeviceLayerProperties(VK_NULL_HANDLE, pCount, pProperties); 5558e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5559e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5560e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I WuVK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(VkPhysicalDevice physicalDevice, 5561e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu const char *pLayerName, uint32_t *pCount, 5562e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu VkExtensionProperties *pProperties) { 5563a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu // the layer command handles VK_NULL_HANDLE just fine internally 5564a4e71cd8b4e77502943dd894ed95426a25dffbd5Chia-I Wu assert(physicalDevice == VK_NULL_HANDLE); 5565381a54a40f7d927402fbeef3cd320c877bb2f344Chia-I Wu return parameter_validation::EnumerateDeviceExtensionProperties(VK_NULL_HANDLE, pLayerName, pCount, pProperties); 5566e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5567e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5568e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I WuVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice dev, const char *funcName) { 55697b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu return parameter_validation::GetDeviceProcAddr(dev, funcName); 5570e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu} 5571e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I Wu 5572e68a153278bbefa18f1d9ced5e191cbf7cec8150Chia-I WuVK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char *funcName) { 55737b4e0349ce65296f8a1e1ed72b6d2880cefa4098Chia-I Wu return parameter_validation::GetInstanceProcAddr(instance, funcName); 557410e00a4031ad2744efadfcb2c8eab521472f35a7Chia-I Wu} 5575