blob: 905cc1369443ef19e1ef16accf5fbf70d81835f9 [file] [log] [blame]
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -07001/* Copyright (c) 2015-2016 The Khronos Group Inc.
2 * Copyright (c) 2015-2016 Valve Corporation
3 * Copyright (c) 2015-2016 LunarG, Inc.
4 * Copyright (C) 2015-2016 Google Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -07006 * Permission is hereby granted, free of charge, to any person obtaining a copy
7 * of this software and/or associated documentation files (the "Materials"), to
8 * deal in the Materials without restriction, including without limitation the
9 * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10 * sell copies of the Materials, and to permit persons to whom the Materials
11 * are furnished to do so, subject to the following conditions:
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060012 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070013 * The above copyright notice(s) and this permission notice shall be included
14 * in all copies or substantial portions of the Materials.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060015 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070016 * The Materials are Confidential Information as defined by the Khronos
17 * Membership Agreement until designated non-confidential by Khronos, at which
18 * point this condition clause shall be removed.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060019 *
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070020 * THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060021 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
Mark Lobodzinski6eda00a2016-02-02 15:55:36 -070022 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
23 *
24 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
25 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
26 * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE
27 * USE OR OTHER DEALINGS IN THE MATERIALS
Courtney Goeltzenleuchter05559522015-10-30 11:14:30 -060028 *
29 * Author: Jeremy Hayes <jeremy@lunarg.com>
30 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060031 */
32
33#include <stdio.h>
34#include <stdlib.h>
35#include <string.h>
36
37#include <iostream>
38#include <string>
39#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050040#include <unordered_map>
Michael Lentine157a2ec2016-01-27 11:25:05 -060041#include <unordered_set>
Jeremy Hayes99a96322015-06-26 12:48:09 -060042#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060043
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060044#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070045#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060046#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060047#include "vk_enum_validate_helper.h"
48#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060049
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060050#include "vk_layer_table.h"
51#include "vk_layer_data.h"
52#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060053#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060054
Cody Northrop55443ef2015-09-28 15:09:32 -060055struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060056 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070057 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060058
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070059 //TODO: Split instance/device structs
60 //Device Data
61 //Map for queue family index to queue count
Michael Lentinebdf744f2016-01-27 15:43:43 -060062 std::unordered_map<uint32_t, uint32_t> queueFamilyIndexMap;
63
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070064 layer_data() :
65 report_data(nullptr)
66 {};
Cody Northrop55443ef2015-09-28 15:09:32 -060067};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050068
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070069static std::unordered_map<void*, layer_data*> layer_data_map;
Jeremy Hayes99a96322015-06-26 12:48:09 -060070static device_table_map pc_device_table_map;
71static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060072
Jeremy Hayes99a96322015-06-26 12:48:09 -060073// "my instance data"
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070074debug_report_data *mid(VkInstance object)
75{
Jeremy Hayes99a96322015-06-26 12:48:09 -060076 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060077 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060078#if DISPATCH_MAP_DEBUG
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070079 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -060080#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082
83 return data->report_data;
84}
85
86// "my device data"
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070087debug_report_data *mdd(void* object)
88{
Jeremy Hayes99a96322015-06-26 12:48:09 -060089 dispatch_key key = get_dispatch_key(object);
90 layer_data *data = get_my_data_ptr(key, layer_data_map);
91#if DISPATCH_MAP_DEBUG
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070092 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -060093#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060094 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060095 return data->report_data;
96}
97
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -070098static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
99{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700100 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600101 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
102
103 uint32_t debug_action = 0;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700104 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
105 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
106 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600107 FILE *log_output = NULL;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700108 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -0600109 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700110 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700111 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700112 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700113 dbgCreateInfo.flags = report_flags;
114 dbgCreateInfo.pfnCallback = log_callback;
115 dbgCreateInfo.pUserData = log_output;
116
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700117 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600118 data->logging_callback.push_back(callback);
119 }
120
121 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700122 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700123 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700124 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700125 dbgCreateInfo.flags = report_flags;
126 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
127 dbgCreateInfo.pUserData = NULL;
128
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700129 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600130 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600131 }
132}
133
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700134VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700135 VkInstance instance,
136 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700137 const VkAllocationCallbacks *pAllocator,
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700138 VkDebugReportCallbackEXT* pMsgCallback)
139{
140 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
141 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700143 if (result == VK_SUCCESS)
144 {
145 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
146 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600147 }
148
149 return result;
150}
151
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700152VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
153 VkInstance instance,
154 VkDebugReportCallbackEXT msgCallback,
155 const VkAllocationCallbacks *pAllocator)
156{
157 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700158 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600159
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700160 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700161 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600162}
163
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700164VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
165 VkInstance instance,
166 VkDebugReportFlagsEXT flags,
167 VkDebugReportObjectTypeEXT objType,
168 uint64_t object,
169 size_t location,
170 int32_t msgCode,
171 const char* pLayerPrefix,
172 const char* pMsg)
173{
174 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
175 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700176}
177
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700178static const VkExtensionProperties instance_extensions[] = {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700179 {
180 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
181 VK_EXT_DEBUG_REPORT_SPEC_VERSION
182 }
183};
Tony Barbour59a47322015-06-24 16:06:58 -0600184
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700185VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
186 const char *pLayerName,
187 uint32_t *pCount,
188 VkExtensionProperties* pProperties)
189{
190 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600191}
192
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700193static const VkLayerProperties pc_global_layers[] = {
194 {
195 "VK_LAYER_LUNARG_param_checker",
196 VK_API_VERSION,
197 VK_MAKE_VERSION(0, 1, 0),
198 "Validation layer: param_checker",
199 }
200};
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700201
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700202VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
203 uint32_t *pCount,
204 VkLayerProperties* pProperties)
205{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600206 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700207 pc_global_layers,
208 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600209}
210
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700211VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
212 VkPhysicalDevice physicalDevice,
213 const char* pLayerName,
214 uint32_t* pCount,
215 VkExtensionProperties* pProperties)
216{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600217 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700218 if (pLayerName == NULL) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700219 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
220 physicalDevice,
221 NULL,
222 pCount,
223 pProperties);
Jon Ashburn751c4842015-11-02 17:37:20 -0700224 } else {
225 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
226 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600227}
228
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700229VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
230 VkPhysicalDevice physicalDevice,
231 uint32_t* pCount,
232 VkLayerProperties* pProperties)
233{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600234 /* ParamChecker's physical device layers are the same as global */
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700235 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
236 pCount, pProperties);
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600237}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600238
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600239// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600240
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700241static
242std::string EnumeratorString(VkResult const& enumerator)
243{
244 switch(enumerator)
245 {
246 case VK_RESULT_MAX_ENUM:
247 {
248 return "VK_RESULT_MAX_ENUM";
249 break;
250 }
251 case VK_ERROR_LAYER_NOT_PRESENT:
252 {
253 return "VK_ERROR_LAYER_NOT_PRESENT";
254 break;
255 }
256 case VK_ERROR_INCOMPATIBLE_DRIVER:
257 {
258 return "VK_ERROR_INCOMPATIBLE_DRIVER";
259 break;
260 }
261 case VK_ERROR_MEMORY_MAP_FAILED:
262 {
263 return "VK_ERROR_MEMORY_MAP_FAILED";
264 break;
265 }
266 case VK_INCOMPLETE:
267 {
268 return "VK_INCOMPLETE";
269 break;
270 }
271 case VK_ERROR_OUT_OF_HOST_MEMORY:
272 {
273 return "VK_ERROR_OUT_OF_HOST_MEMORY";
274 break;
275 }
276 case VK_ERROR_INITIALIZATION_FAILED:
277 {
278 return "VK_ERROR_INITIALIZATION_FAILED";
279 break;
280 }
281 case VK_NOT_READY:
282 {
283 return "VK_NOT_READY";
284 break;
285 }
286 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
287 {
288 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
289 break;
290 }
291 case VK_EVENT_SET:
292 {
293 return "VK_EVENT_SET";
294 break;
295 }
296 case VK_TIMEOUT:
297 {
298 return "VK_TIMEOUT";
299 break;
300 }
301 case VK_EVENT_RESET:
302 {
303 return "VK_EVENT_RESET";
304 break;
305 }
306 case VK_SUCCESS:
307 {
308 return "VK_SUCCESS";
309 break;
310 }
311 case VK_ERROR_EXTENSION_NOT_PRESENT:
312 {
313 return "VK_ERROR_EXTENSION_NOT_PRESENT";
314 break;
315 }
316 case VK_ERROR_DEVICE_LOST:
317 {
318 return "VK_ERROR_DEVICE_LOST";
319 break;
320 }
321 default:
322 {
323 return "unrecognized enumerator";
324 break;
325 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600326 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600327}
328
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700329static
330bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
331{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600332 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600333 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
334 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
335 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
336 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
337 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
338 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
339 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
340 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
341 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600342 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700343 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
344 VK_FORMAT_FEATURE_BLIT_DST_BIT |
Jon Ashburn766866a2016-01-22 15:39:20 -0700345 VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700346 if(enumerator & (~allFlags))
347 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600348 return false;
349 }
350
351 return true;
352}
353
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700354static
355std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
356{
357 if(!ValidateEnumerator(enumerator))
358 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600359 return "unrecognized enumerator";
360 }
361
362 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700363 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
364 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600365 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
366 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700367 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
368 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600369 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
370 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700371 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
372 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600373 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
374 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700375 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
376 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600377 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
378 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700379 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
380 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600381 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
382 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700383 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
384 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600385 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
386 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700387 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
388 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600389 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
390 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700391 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
392 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600393 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
394 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700395 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
396 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600397 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
398 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700399 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
400 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600401 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
402 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700403 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
404 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800405 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600406 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700407 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
408 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800409 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600410 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700411 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)
412 {
Jon Ashburn766866a2016-01-22 15:39:20 -0700413 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT");
414 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600415
416 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700417 for(auto const& string : strings)
418 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600419 enumeratorString += string;
420
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700421 if(string != strings.back())
422 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600423 enumeratorString += '|';
424 }
425 }
426
427 return enumeratorString;
428}
429
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700430static
431bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
432{
433 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600434 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700435 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
436 VK_IMAGE_USAGE_STORAGE_BIT |
437 VK_IMAGE_USAGE_SAMPLED_BIT |
438 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600439 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800440 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700441 if(enumerator & (~allFlags))
442 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600443 return false;
444 }
445
446 return true;
447}
448
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700449static
450std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
451{
452 if(!ValidateEnumerator(enumerator))
453 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600454 return "unrecognized enumerator";
455 }
456
457 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700458 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
459 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600460 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
461 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700462 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
463 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600464 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600465 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700466 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
467 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600468 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
469 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700470 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
471 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600472 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
473 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700474 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
475 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600476 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
477 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700478 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
479 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800480 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600481 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700482 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
483 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600484 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
485 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700486 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
487 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800488 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600489 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600490
491 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700492 for(auto const& string : strings)
493 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600494 enumeratorString += string;
495
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700496 if(string != strings.back())
497 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600498 enumeratorString += '|';
499 }
500 }
501
502 return enumeratorString;
503}
504
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700505static
506bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
507{
508 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
509 VK_QUEUE_TRANSFER_BIT |
510 VK_QUEUE_COMPUTE_BIT |
511 VK_QUEUE_SPARSE_BINDING_BIT |
512 VK_QUEUE_GRAPHICS_BIT);
513 if(enumerator & (~allFlags))
514 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600515 return false;
516 }
517
518 return true;
519}
520
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700521static
522std::string EnumeratorString(VkQueueFlagBits const& enumerator)
523{
524 if(!ValidateEnumerator(enumerator))
525 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600526 return "unrecognized enumerator";
527 }
528
529 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700530 if(enumerator & VK_QUEUE_TRANSFER_BIT)
531 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800532 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600533 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700534 if(enumerator & VK_QUEUE_COMPUTE_BIT)
535 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600536 strings.push_back("VK_QUEUE_COMPUTE_BIT");
537 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700538 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
539 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800540 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700542 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
543 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600544 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
545 }
546
547 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700548 for(auto const& string : strings)
549 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600550 enumeratorString += string;
551
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700552 if(string != strings.back())
553 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600554 enumeratorString += '|';
555 }
556 }
557
558 return enumeratorString;
559}
560
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700561static
562bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
563{
564 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
565 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
566 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
567 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
568 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
569 if(enumerator & (~allFlags))
570 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600571 return false;
572 }
573
574 return true;
575}
576
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700577static
578std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
579{
580 if(!ValidateEnumerator(enumerator))
581 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600582 return "unrecognized enumerator";
583 }
584
585 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700586 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
587 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600588 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
589 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700590 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
591 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800592 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600593 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700594 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
595 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600596 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
597 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700598 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
599 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800600 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600601 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700602 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
603 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800604 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600605 }
606
607 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700608 for(auto const& string : strings)
609 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600610 enumeratorString += string;
611
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700612 if(string != strings.back())
613 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600614 enumeratorString += '|';
615 }
616 }
617
618 return enumeratorString;
619}
620
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700621static
622bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
623{
624 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
625 if(enumerator & (~allFlags))
626 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 return false;
628 }
629
630 return true;
631}
632
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700633static
634std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
635{
636 if(!ValidateEnumerator(enumerator))
637 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600638 return "unrecognized enumerator";
639 }
640
641 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700642 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
643 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800644 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 }
646
647 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700648 for(auto const& string : strings)
649 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600650 enumeratorString += string;
651
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700652 if(string != strings.back())
653 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600654 enumeratorString += '|';
655 }
656 }
657
658 return enumeratorString;
659}
660
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700661static
662bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
663{
664 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800665 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
666 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700667 if(enumerator & (~allFlags))
668 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600669 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600670 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600671
672 return true;
673}
674
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700675static
676std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
677{
678 if(!ValidateEnumerator(enumerator))
679 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600680 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600681 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600682
683 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700684 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
685 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800686 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600687 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700688 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
689 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800690 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600691 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700692 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
693 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800694 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600695 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696
697 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700698 for(auto const& string : strings)
699 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600700 enumeratorString += string;
701
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700702 if(string != strings.back())
703 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600704 enumeratorString += '|';
705 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600706 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600707
708 return enumeratorString;
709}
710
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700711static
712bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
713{
714 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
715 if(enumerator & (~allFlags))
716 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600717 return false;
718 }
719
720 return true;
721}
722
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700723static
724std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
725{
726 if(!ValidateEnumerator(enumerator))
727 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600728 return "unrecognized enumerator";
729 }
730
731 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700732 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
733 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600734 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
735 }
736
737 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700738 for(auto const& string : strings)
739 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600740 enumeratorString += string;
741
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700742 if(string != strings.back())
743 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600744 enumeratorString += '|';
745 }
746 }
747
748 return enumeratorString;
749}
750
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700751static
752bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
753{
754 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600755 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
756 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
757 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
758 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
759 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
760 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
761 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
762 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
763 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
764 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700765 if(enumerator & (~allFlags))
766 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 return false;
768 }
769
770 return true;
771}
772
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700773static
774std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
775{
776 if(!ValidateEnumerator(enumerator))
777 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600778 return "unrecognized enumerator";
779 }
780
781 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
783 {
784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
787 {
788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
791 {
792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
795 {
796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
799 {
800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
803 {
804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
807 {
808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700810 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
811 {
812 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600813 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700814 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
815 {
816 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600817 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700818 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
819 {
820 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600821 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700822 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
823 {
824 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600825 }
826
827 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700828 for(auto const& string : strings)
829 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600830 enumeratorString += string;
831
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700832 if(string != strings.back())
833 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600834 enumeratorString += '|';
835 }
836 }
837
838 return enumeratorString;
839}
840
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700841static
842bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
843{
844 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
845 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
846 VK_QUERY_RESULT_WAIT_BIT |
847 VK_QUERY_RESULT_64_BIT);
848 if(enumerator & (~allFlags))
849 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600850 return false;
851 }
852
853 return true;
854}
855
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700856static
857std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
858{
859 if(!ValidateEnumerator(enumerator))
860 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600861 return "unrecognized enumerator";
862 }
863
864 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700865 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
866 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600867 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
868 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700869 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
870 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600871 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
872 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700873 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
874 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600875 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
876 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700877 if(enumerator & VK_QUERY_RESULT_64_BIT)
878 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600879 strings.push_back("VK_QUERY_RESULT_64_BIT");
880 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600881
882 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700883 for(auto const& string : strings)
884 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600885 enumeratorString += string;
886
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700887 if(string != strings.back())
888 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600889 enumeratorString += '|';
890 }
891 }
892
893 return enumeratorString;
894}
895
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700896static
897bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
898{
899 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
900 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600901 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
902 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700903 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
904 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600905 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700906 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
907 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
908 if(enumerator & (~allFlags))
909 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600910 return false;
911 }
912
913 return true;
914}
915
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700916static
917std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
918{
919 if(!ValidateEnumerator(enumerator))
920 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600921 return "unrecognized enumerator";
922 }
923
924 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700925 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
926 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600927 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
928 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700929 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
930 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600931 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
932 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700933 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
934 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600935 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
936 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700937 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
938 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600939 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
940 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700941 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
942 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600943 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
944 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700945 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
946 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800947 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600948 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700949 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
950 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600951 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
952 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700953 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
954 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800955 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600956 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700957 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
958 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600959 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
960 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600961
962 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700963 for(auto const& string : strings)
964 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600965 enumeratorString += string;
966
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700967 if(string != strings.back())
968 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600969 enumeratorString += '|';
970 }
971 }
972
973 return enumeratorString;
974}
975
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700976static
977bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
978{
979 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
980 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
981 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
982 if(enumerator & (~allFlags))
983 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600984 return false;
985 }
986
987 return true;
988}
989
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700990static
991std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
992{
993 if(!ValidateEnumerator(enumerator))
994 {
Jeremy Hayes99a96322015-06-26 12:48:09 -0600995 return "unrecognized enumerator";
996 }
997
998 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -0700999 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1000 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001001 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1002 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001003 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1004 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001005 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1006 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001007 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
1008 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001009 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001010 }
1011
1012 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001013 for(auto const& string : strings)
1014 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001015 enumeratorString += string;
1016
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001017 if(string != strings.back())
1018 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001019 enumeratorString += '|';
1020 }
1021 }
1022
1023 return enumeratorString;
1024}
1025
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001026static
1027bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1028{
1029 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
1030 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1031 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
1032 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
1033 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
1034 if(enumerator & (~allFlags))
1035 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001036 return false;
1037 }
1038
1039 return true;
1040}
1041
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001042static
1043std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1044{
1045 if(!ValidateEnumerator(enumerator))
1046 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001047 return "unrecognized enumerator";
1048 }
1049
1050 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001051 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1052 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001053 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1054 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001055 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1056 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001057 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1058 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001059 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1060 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001061 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1062 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001063 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1064 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001065 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1066 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001067 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
1068 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001069 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001070 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001071
1072 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001073 for(auto const& string : strings)
1074 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001075 enumeratorString += string;
1076
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001077 if(string != strings.back())
1078 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001079 enumeratorString += '|';
1080 }
1081 }
1082
1083 return enumeratorString;
1084}
1085
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001086static
1087bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
1088{
1089 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1090 VK_COLOR_COMPONENT_B_BIT |
1091 VK_COLOR_COMPONENT_G_BIT |
1092 VK_COLOR_COMPONENT_R_BIT);
1093 if(enumerator & (~allFlags))
1094 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001095 return false;
1096 }
1097
1098 return true;
1099}
1100
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001101static
1102std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
1103{
1104 if(!ValidateEnumerator(enumerator))
1105 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 return "unrecognized enumerator";
1107 }
1108
1109 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001110 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
1111 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001112 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001113 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001114 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
1115 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001116 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001117 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001118 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
1119 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001120 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001121 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001122 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
1123 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001124 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001125 }
1126
1127 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001128 for(auto const& string : strings)
1129 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001130 enumeratorString += string;
1131
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001132 if(string != strings.back())
1133 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001134 enumeratorString += '|';
1135 }
1136 }
1137
1138 return enumeratorString;
1139}
1140
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001141static
1142bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
1143{
1144 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1145 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1146 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
1147 if(enumerator & (~allFlags))
1148 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001149 return false;
1150 }
1151
1152 return true;
1153}
1154
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001155static
1156std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
1157{
1158 if(!ValidateEnumerator(enumerator))
1159 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001160 return "unrecognized enumerator";
1161 }
1162
1163 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001164 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
1165 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001166 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1167 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001168 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1169 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001170 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1171 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001172 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1173 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001174 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001175 }
1176
1177 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001178 for(auto const& string : strings)
1179 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001180 enumeratorString += string;
1181
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001182 if(string != strings.back())
1183 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001184 enumeratorString += '|';
1185 }
1186 }
1187
1188 return enumeratorString;
1189}
1190
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001191static
1192bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
1193{
1194 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1195 VK_SHADER_STAGE_FRAGMENT_BIT |
1196 VK_SHADER_STAGE_GEOMETRY_BIT |
1197 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001198 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001199 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
1200 VK_SHADER_STAGE_VERTEX_BIT);
1201 if(enumerator & (~allFlags))
1202 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001203 return false;
1204 }
1205
1206 return true;
1207}
1208
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001209static
1210std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
1211{
1212 if(!ValidateEnumerator(enumerator))
1213 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001214 return "unrecognized enumerator";
1215 }
1216
1217 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001218 if(enumerator & VK_SHADER_STAGE_ALL)
1219 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001220 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001221 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001222 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
1223 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001225 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001226 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
1227 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1229 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001230 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1231 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001232 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1233 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001234 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
1235 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001236 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001237 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001238 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
1239 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001240 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001241 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001242 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1243 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001244 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001245 }
1246
1247 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001248 for(auto const& string : strings)
1249 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001250 enumeratorString += string;
1251
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001252 if(string != strings.back())
1253 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001254 enumeratorString += '|';
1255 }
1256 }
1257
1258 return enumeratorString;
1259}
1260
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001261static
1262bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
1263{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001264 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001265 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001266 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1267 VK_PIPELINE_STAGE_HOST_BIT |
1268 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
1269 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001271 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001272 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001273 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1274 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1275 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1276 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1277 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1278 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1279 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1280 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1281 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001282 if(enumerator & (~allFlags))
1283 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001284 return false;
1285 }
1286
1287 return true;
1288}
1289
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001290static
1291std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
1292{
1293 if(!ValidateEnumerator(enumerator))
1294 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001295 return "unrecognized enumerator";
1296 }
1297
1298 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001299 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
1300 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001301 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1302 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001303 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1304 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001305 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001307 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
1308 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001309 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001311 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
1312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001315 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
1316 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001317 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001319 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
1320 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001321 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001323 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
1324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001326 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001327 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
1328 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001329 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001330 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001331 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
1332 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001333 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001334 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001335 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
1336 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001337 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001338 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001339 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
1340 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001341 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1342 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001343 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1344 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001345 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1346 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001347 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
1348 {
1349 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001350 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001351 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1352 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001353 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1354 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001355 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1356 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001357 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1358 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001359 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1360 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001361 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1362 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001363 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1364 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001365 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001366 }
1367
1368 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001369 for(auto const& string : strings)
1370 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001371 enumeratorString += string;
1372
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001373 if(string != strings.back())
1374 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001375 enumeratorString += '|';
1376 }
1377 }
1378
1379 return enumeratorString;
1380}
1381
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001382static
1383bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
1384{
Chia-I Wua4594202015-10-27 19:54:37 +08001385 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001386 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1387 VK_ACCESS_INDEX_READ_BIT |
1388 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1389 VK_ACCESS_UNIFORM_READ_BIT |
1390 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1391 VK_ACCESS_SHADER_READ_BIT |
1392 VK_ACCESS_SHADER_WRITE_BIT |
1393 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1394 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1395 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1396 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1397 VK_ACCESS_TRANSFER_READ_BIT |
1398 VK_ACCESS_TRANSFER_WRITE_BIT |
1399 VK_ACCESS_HOST_READ_BIT |
1400 VK_ACCESS_HOST_WRITE_BIT |
1401 VK_ACCESS_MEMORY_READ_BIT |
1402 VK_ACCESS_MEMORY_WRITE_BIT);
Chia-I Wua4594202015-10-27 19:54:37 +08001403
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001404 if(enumerator & (~allFlags))
1405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001406 return false;
1407 }
1408
1409 return true;
1410}
1411
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001412static
1413std::string EnumeratorString(VkAccessFlagBits const& enumerator)
1414{
1415 if(!ValidateEnumerator(enumerator))
1416 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001417 return "unrecognized enumerator";
1418 }
1419
1420 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001421 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
1422 {
Chia-I Wua4594202015-10-27 19:54:37 +08001423 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001424 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001425 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
1426 {
Chia-I Wua4594202015-10-27 19:54:37 +08001427 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001428 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001429 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
1430 {
Chia-I Wua4594202015-10-27 19:54:37 +08001431 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001432 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001433 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
1434 {
Chia-I Wua4594202015-10-27 19:54:37 +08001435 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001436 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001437 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
1438 {
Chia-I Wua4594202015-10-27 19:54:37 +08001439 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001440 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001441 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
1442 {
Chia-I Wua4594202015-10-27 19:54:37 +08001443 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001444 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001445 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
1446 {
Chia-I Wua4594202015-10-27 19:54:37 +08001447 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001448 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001449 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
1450 {
Chia-I Wua4594202015-10-27 19:54:37 +08001451 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001452 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001453 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
1454 {
Chia-I Wua4594202015-10-27 19:54:37 +08001455 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001457 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
1458 {
Chia-I Wua4594202015-10-27 19:54:37 +08001459 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001461 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
1462 {
Chia-I Wua4594202015-10-27 19:54:37 +08001463 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001465 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
1466 {
Chia-I Wua4594202015-10-27 19:54:37 +08001467 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001469 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
1470 {
Chia-I Wua4594202015-10-27 19:54:37 +08001471 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001472 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001473 if(enumerator & VK_ACCESS_HOST_READ_BIT)
1474 {
Chia-I Wua4594202015-10-27 19:54:37 +08001475 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001476 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001477 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
1478 {
Chia-I Wua4594202015-10-27 19:54:37 +08001479 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001480 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001481 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
1482 {
Chia-I Wua4594202015-10-27 19:54:37 +08001483 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001484 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001485 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
1486 {
Chia-I Wua4594202015-10-27 19:54:37 +08001487 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001488 }
1489
1490 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001491 for(auto const& string : strings)
1492 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 enumeratorString += string;
1494
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001495 if(string != strings.back())
1496 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001497 enumeratorString += '|';
1498 }
1499 }
1500
1501 return enumeratorString;
1502}
1503
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001504static
1505bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
1506{
1507 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001508 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001509 if(enumerator & (~allFlags))
1510 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001511 return false;
1512 }
1513
1514 return true;
1515}
1516
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001517static
1518std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
1519{
1520 if(!ValidateEnumerator(enumerator))
1521 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 return "unrecognized enumerator";
1523 }
1524
1525 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001526 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
1527 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001528 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001529 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001530 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
1531 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001532 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001533 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534
1535 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001536 for(auto const& string : strings)
1537 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001538 enumeratorString += string;
1539
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001540 if(string != strings.back())
1541 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542 enumeratorString += '|';
1543 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001544 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001545
1546 return enumeratorString;
1547}
1548
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001549static
1550bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
1551{
1552 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
1553 if(enumerator & (~allFlags))
1554 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001556 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001557
1558 return true;
1559}
1560
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001561static
1562std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
1563{
1564 if(!ValidateEnumerator(enumerator))
1565 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001566 return "unrecognized enumerator";
1567 }
1568
1569 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001570 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
1571 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001572 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001573 }
1574
1575 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001576 for(auto const& string : strings)
1577 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001578 enumeratorString += string;
1579
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001580 if(string != strings.back())
1581 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001582 enumeratorString += '|';
1583 }
1584 }
1585
1586 return enumeratorString;
1587}
1588
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001589static
1590bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
1591{
1592 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001593 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1594 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001595 if(enumerator & (~allFlags))
1596 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001597 return false;
1598 }
1599
1600 return true;
1601}
1602
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001603static
1604std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
1605{
1606 if(!ValidateEnumerator(enumerator))
1607 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001608 return "unrecognized enumerator";
1609 }
1610
1611 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001612 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
1613 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001614 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001615 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001616 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
1617 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001618 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001619 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001620 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
1621 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001622 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001623 }
1624
1625 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001626 for(auto const& string : strings)
1627 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001628 enumeratorString += string;
1629
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001630 if(string != strings.back())
1631 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001632 enumeratorString += '|';
1633 }
1634 }
1635
1636 return enumeratorString;
1637}
1638
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001639static
1640bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
1641{
1642 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
1643 if(enumerator & (~allFlags))
1644 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001645 return false;
1646 }
1647
1648 return true;
1649}
1650
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001651static
1652std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
1653{
1654 if(!ValidateEnumerator(enumerator))
1655 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001656 return "unrecognized enumerator";
1657 }
1658
1659 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001660 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
1661 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001662 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001663 }
1664
1665 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001666 for(auto const& string : strings)
1667 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001668 enumeratorString += string;
1669
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001670 if(string != strings.back())
1671 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001672 enumeratorString += '|';
1673 }
1674 }
1675
1676 return enumeratorString;
1677}
1678
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001679static
1680bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
1681{
1682 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1683 VK_IMAGE_ASPECT_STENCIL_BIT |
1684 VK_IMAGE_ASPECT_DEPTH_BIT |
1685 VK_IMAGE_ASPECT_COLOR_BIT);
1686 if(enumerator & (~allFlags))
1687 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001688 return false;
1689 }
1690
1691 return true;
1692}
1693
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001694static
1695std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
1696{
1697 if(!ValidateEnumerator(enumerator))
1698 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001699 return "unrecognized enumerator";
1700 }
1701
1702 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001703 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
1704 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001705 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1706 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001707 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1708 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001709 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1710 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001711 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1712 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001713 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1714 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001715 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1716 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001717 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1718 }
1719
1720 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001721 for(auto const& string : strings)
1722 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001723 enumeratorString += string;
1724
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001725 if(string != strings.back())
1726 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001727 enumeratorString += '|';
1728 }
1729 }
1730
1731 return enumeratorString;
1732}
1733
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001734static
1735bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1736{
1737 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
1738 if(enumerator & (~allFlags))
1739 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001740 return false;
1741 }
1742
1743 return true;
1744}
1745
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001746static
1747std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1748{
1749 if(!ValidateEnumerator(enumerator))
1750 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001751 return "unrecognized enumerator";
1752 }
1753
1754 std::vector<std::string> strings;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001755 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
1756 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001757 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001758 }
1759
1760 std::string enumeratorString;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001761 for(auto const& string : strings)
1762 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001763 enumeratorString += string;
1764
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001765 if(string != strings.back())
1766 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001767 enumeratorString += '|';
1768 }
1769 }
1770
1771 return enumeratorString;
1772}
1773
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001774VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
1775 const VkInstanceCreateInfo* pCreateInfo,
1776 const VkAllocationCallbacks* pAllocator,
1777 VkInstance* pInstance)
1778{
1779 VkLayerInstanceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001780
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001781 assert(chain_info->u.pLayerInfo);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001782 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
1783 PFN_vkCreateInstance fpCreateInstance = (PFN_vkCreateInstance) fpGetInstanceProcAddr(NULL, "vkCreateInstance");
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001784 if (fpCreateInstance == NULL) {
1785 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001786 }
1787
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001788 // Advance the link info for the next element on the chain
1789 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
1790
1791 VkResult result = fpCreateInstance(pCreateInfo, pAllocator, pInstance);
1792 if (result != VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001793 return result;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001794
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001795 layer_data *my_data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1796 VkLayerInstanceDispatchTable *pTable = initInstanceTable(*pInstance, fpGetInstanceProcAddr, pc_instance_table_map);
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001797
1798 my_data->report_data = debug_report_create_instance(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001799 pTable,
1800 *pInstance,
1801 pCreateInfo->enabledExtensionCount,
1802 pCreateInfo->ppEnabledExtensionNames);
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07001803
1804 InitParamChecker(my_data, pAllocator);
1805
1806 return result;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807}
1808
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001809VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
1810 VkInstance instance,
1811 const VkAllocationCallbacks* pAllocator)
1812{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813 // Grab the key before the instance is destroyed.
1814 dispatch_key key = get_dispatch_key(instance);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001815 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001816 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817
1818 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001819 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1820 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001821 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001822 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001823 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824 }
1825
1826 layer_debug_report_destroy_instance(mid(instance));
1827 layer_data_map.erase(pTable);
1828
1829 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001830}
1831
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001832bool PostEnumeratePhysicalDevices(
1833 VkInstance instance,
1834 uint32_t* pPhysicalDeviceCount,
1835 VkPhysicalDevice* pPhysicalDevices,
1836 VkResult result)
1837{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001839 if(pPhysicalDeviceCount != nullptr)
1840 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841 }
1842
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001843 if(pPhysicalDevices != nullptr)
1844 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001845 }
1846
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001847 if(result < VK_SUCCESS)
1848 {
1849 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
1850 log_msg(mid(instance), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001851 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001852 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001853
1854 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001855}
1856
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001857VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
1858 VkInstance instance,
1859 uint32_t* pPhysicalDeviceCount,
1860 VkPhysicalDevice* pPhysicalDevices)
1861{
1862 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001864 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001866 return result;
1867}
1868
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001869bool PostGetPhysicalDeviceFeatures(
1870 VkPhysicalDevice physicalDevice,
1871 VkPhysicalDeviceFeatures* pFeatures)
1872{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001873
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001874 if(pFeatures != nullptr)
1875 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001876 }
1877
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001878 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001879}
1880
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001881VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
1882 VkPhysicalDevice physicalDevice,
1883 VkPhysicalDeviceFeatures* pFeatures)
1884{
1885 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001887 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001888}
1889
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001890bool PostGetPhysicalDeviceFormatProperties(
1891 VkPhysicalDevice physicalDevice,
1892 VkFormat format,
1893 VkFormatProperties* pFormatProperties)
1894{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001896 if(format < VK_FORMAT_BEGIN_RANGE ||
1897 format > VK_FORMAT_END_RANGE)
1898 {
1899 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
1900 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001901 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001902 }
1903
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001904 if(pFormatProperties != nullptr)
1905 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906 }
1907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001908 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001909}
1910
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001911VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
1912 VkPhysicalDevice physicalDevice,
1913 VkFormat format,
1914 VkFormatProperties* pFormatProperties)
1915{
1916 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001917
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001918 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001919}
1920
1921bool PostGetPhysicalDeviceImageFormatProperties(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001922 VkPhysicalDevice physicalDevice,
1923 VkFormat format,
1924 VkImageType type,
1925 VkImageTiling tiling,
1926 VkImageUsageFlags usage,
1927 VkImageCreateFlags flags,
1928 VkImageFormatProperties* pImageFormatProperties,
1929 VkResult result)
1930{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001931
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001932 if(format < VK_FORMAT_BEGIN_RANGE ||
1933 format > VK_FORMAT_END_RANGE)
1934 {
1935 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
1936 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001937 return false;
1938 }
1939
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001940 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1941 type > VK_IMAGE_TYPE_END_RANGE)
1942 {
1943 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
1944 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001945 return false;
1946 }
1947
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001948 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1949 tiling > VK_IMAGE_TILING_END_RANGE)
1950 {
1951 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
1952 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001953 return false;
1954 }
1955
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001956
1957 if(pImageFormatProperties != nullptr)
1958 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001959 }
1960
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001961 if(result < VK_SUCCESS)
1962 {
1963 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
1964 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu17241042015-10-31 00:31:16 +08001965 return false;
1966 }
1967
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001968 return true;
1969}
1970
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001971VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
1972 VkPhysicalDevice physicalDevice,
1973 VkFormat format,
1974 VkImageType type,
1975 VkImageTiling tiling,
1976 VkImageUsageFlags usage,
1977 VkImageCreateFlags flags,
1978 VkImageFormatProperties* pImageFormatProperties)
1979{
1980 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001981
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001982 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Chia-I Wu17241042015-10-31 00:31:16 +08001983
1984 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001985}
1986
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001987bool PostGetPhysicalDeviceProperties(
1988 VkPhysicalDevice physicalDevice,
1989 VkPhysicalDeviceProperties* pProperties)
1990{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001991
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07001992 if(pProperties != nullptr)
1993 {
1994 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1995 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1996 {
1997 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
1998 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1999 return false;
2000 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002001 }
2002
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002003 return true;
2004}
2005
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002006VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
2007 VkPhysicalDevice physicalDevice,
2008 VkPhysicalDeviceProperties* pProperties)
2009{
2010 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002011
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002012 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002013}
2014
Cody Northropd0802882015-08-03 17:04:53 -06002015bool PostGetPhysicalDeviceQueueFamilyProperties(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002016 VkPhysicalDevice physicalDevice,
2017 uint32_t* pCount,
2018 VkQueueFamilyProperties* pQueueProperties)
2019{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002020
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002021 if(pQueueProperties == nullptr && pCount != nullptr)
2022 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002023 }
2024
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002025 if(pQueueProperties != nullptr)
2026 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002027 }
2028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 return true;
2030}
2031
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002032VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
2033 VkPhysicalDevice physicalDevice,
2034 uint32_t* pCount,
2035 VkQueueFamilyProperties* pQueueProperties)
2036{
2037 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002038
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002039 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002040}
2041
2042bool PostGetPhysicalDeviceMemoryProperties(
2043 VkPhysicalDevice physicalDevice,
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002044 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2045{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002046
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002047 if(pMemoryProperties != nullptr)
2048 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002049 }
2050
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002051 return true;
2052}
2053
Chia-I Wu9ab61502015-11-06 06:42:02 +08002054VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002055 VkPhysicalDevice physicalDevice,
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002056 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2057{
2058 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002059
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002060 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002061}
2062
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002063void validateDeviceCreateInfo(VkPhysicalDevice physicalDevice, const VkDeviceCreateInfo* pCreateInfo, const std::vector<VkQueueFamilyProperties> properties) {
Michael Lentine157a2ec2016-01-27 11:25:05 -06002064 std::unordered_set<uint32_t> set;
2065 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2066 if (set.count(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex)) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002067 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2068 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex, is not unique within this structure.", i);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002069 } else {
2070 set.insert(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex);
2071 }
Michael Lentine26244832016-01-27 11:40:27 -06002072 if (pCreateInfo->pQueueCreateInfos[i].queueCount == 0) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002073 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2074 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount, cannot be zero.", i);
Michael Lentinefa71bd52016-01-27 12:50:30 -06002075 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002076 for (uint32_t j = 0; j < pCreateInfo->pQueueCreateInfos[i].queueCount; ++j) {
2077 if (pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] < 0.f || pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j] > 1.f) {
2078 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2079 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->pQueuePriorities[%d], must be between 0 and 1. Actual value is %f", i, j, pCreateInfo->pQueueCreateInfos[i].pQueuePriorities[j]);
Michael Lentinefa71bd52016-01-27 12:50:30 -06002080 }
Michael Lentine26244832016-01-27 11:40:27 -06002081 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002082 if (pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex >= properties.size()) {
2083 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2084 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueFamilyIndex cannot be more than the number of queue families.", i);
2085 } else if (pCreateInfo->pQueueCreateInfos[i].queueCount > properties[pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex].queueCount) {
2086 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2087 "VkDeviceCreateInfo parameter, uint32_t pQueueCreateInfos[%d]->queueCount cannot be more than the number of queues for the given family index.", i);
Michael Lentine774704f2016-01-27 13:36:46 -06002088 }
Michael Lentine157a2ec2016-01-27 11:25:05 -06002089 }
2090}
2091
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002092void storeCreateDeviceData(VkDevice device, const VkDeviceCreateInfo* pCreateInfo) {
2093 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002094 for (uint32_t i = 0; i < pCreateInfo->queueCreateInfoCount; ++i) {
2095 my_device_data->queueFamilyIndexMap.insert(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002096 std::make_pair(pCreateInfo->pQueueCreateInfos[i].queueFamilyIndex, pCreateInfo->pQueueCreateInfos[i].queueCount));
Michael Lentinebdf744f2016-01-27 15:43:43 -06002097 }
2098}
2099
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002100VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
2101 VkPhysicalDevice physicalDevice,
2102 const VkDeviceCreateInfo* pCreateInfo,
2103 const VkAllocationCallbacks* pAllocator,
2104 VkDevice* pDevice)
2105{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002106 /*
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002107 * NOTE: We do not validate physicalDevice or any dispatchable
2108 * object as the first parameter. We couldn't get here if it was wrong!
2109 */
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002110 VkLayerDeviceCreateInfo *chain_info = get_chain_info(pCreateInfo, VK_LAYER_LINK_INFO);
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002111
2112 assert(chain_info->u.pLayerInfo);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002113 PFN_vkGetInstanceProcAddr fpGetInstanceProcAddr = chain_info->u.pLayerInfo->pfnNextGetInstanceProcAddr;
2114 PFN_vkGetDeviceProcAddr fpGetDeviceProcAddr = chain_info->u.pLayerInfo->pfnNextGetDeviceProcAddr;
2115 PFN_vkCreateDevice fpCreateDevice = (PFN_vkCreateDevice) fpGetInstanceProcAddr(NULL, "vkCreateDevice");
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002116 if (fpCreateDevice == NULL) {
2117 return VK_ERROR_INITIALIZATION_FAILED;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 }
2119
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002120 // Advance the link info for the next element on the chain
2121 chain_info->u.pLayerInfo = chain_info->u.pLayerInfo->pNext;
2122
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002123 VkResult result = fpCreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002124 if (result != VK_SUCCESS) {
2125 return result;
2126 }
2127
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002128 layer_data *my_instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2129 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2130 my_device_data->report_data = layer_debug_report_create_device(my_instance_data->report_data, *pDevice);
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07002131 initDeviceTable(*pDevice, fpGetDeviceProcAddr, pc_device_table_map);
2132
Michael Lentine774704f2016-01-27 13:36:46 -06002133 uint32_t count;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002134 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, nullptr);
Michael Lentine774704f2016-01-27 13:36:46 -06002135 std::vector<VkQueueFamilyProperties> properties(count);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002136 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, &count, &properties[0]);
Michael Lentine774704f2016-01-27 13:36:46 -06002137
2138 validateDeviceCreateInfo(physicalDevice, pCreateInfo, properties);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002139 storeCreateDeviceData(*pDevice, pCreateInfo);
Michael Lentine157a2ec2016-01-27 11:25:05 -06002140
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141 return result;
2142}
2143
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002144VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
2145 VkDevice device,
2146 const VkAllocationCallbacks* pAllocator)
2147{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002148 layer_debug_report_destroy_device(device);
2149
2150 dispatch_key key = get_dispatch_key(device);
2151#if DISPATCH_MAP_DEBUG
2152 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2153#endif
2154
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002155 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157}
2158
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002159bool PreGetDeviceQueue(
2160 VkDevice device,
2161 uint32_t queueFamilyIndex,
2162 uint32_t queueIndex)
2163{
2164 layer_data *my_device_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
2165 auto queue_data = my_device_data->queueFamilyIndexMap.find(queueFamilyIndex);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002166 if (queue_data == my_device_data->queueFamilyIndexMap.end()) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2168 "VkGetDeviceQueue parameter, uint32_t queueFamilyIndex %d, must have been given when the device was created.", queueFamilyIndex);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002169 return false;
2170 }
2171 if (queue_data->second <= queueIndex) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002172 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2173 "VkGetDeviceQueue parameter, uint32_t queueIndex %d, must be less than the number of queues given when the device was created.", queueIndex);
Michael Lentinebdf744f2016-01-27 15:43:43 -06002174 return false;
2175 }
2176 return true;
2177}
2178
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002179bool PostGetDeviceQueue(
2180 VkDevice device,
2181 uint32_t queueFamilyIndex,
2182 uint32_t queueIndex,
2183 VkQueue* pQueue)
2184{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002186
2187
2188 if(pQueue != nullptr)
2189 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002190 }
2191
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002192 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193}
2194
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002195VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
2196 VkDevice device,
2197 uint32_t queueFamilyIndex,
2198 uint32_t queueIndex,
2199 VkQueue* pQueue)
2200{
Michael Lentinebdf744f2016-01-27 15:43:43 -06002201 PreGetDeviceQueue(device, queueFamilyIndex, queueIndex);
2202
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002203 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002205 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206}
2207
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002208bool PreQueueSubmit(
2209 VkQueue queue,
2210 const VkSubmitInfo* submit)
2211{
2212 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2213 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2214 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002215 return false;
2216 }
2217
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002218 if(submit->pCommandBuffers != nullptr)
2219 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002221
2222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223}
2224
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002225bool PostQueueSubmit(
2226 VkQueue queue,
2227 uint32_t commandBufferCount,
2228 VkFence fence,
2229 VkResult result)
2230{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002231
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002232
2233
2234 if(result < VK_SUCCESS)
2235 {
2236 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
2237 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002239 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002240
2241 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002242}
2243
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002244VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
2245 VkQueue queue,
2246 uint32_t submitCount,
2247 const VkSubmitInfo* pSubmits,
2248 VkFence fence)
2249{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002250 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002251 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002252 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002254 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002255
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002256 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002257
2258 return result;
2259}
2260
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002261bool PostQueueWaitIdle(
2262 VkQueue queue,
2263 VkResult result)
2264{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002266 if(result < VK_SUCCESS)
2267 {
2268 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
2269 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002270 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002272
2273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274}
2275
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002276VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
2277 VkQueue queue)
2278{
2279 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280
2281 PostQueueWaitIdle(queue, result);
2282
2283 return result;
2284}
2285
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002286bool PostDeviceWaitIdle(
2287 VkDevice device,
2288 VkResult result)
2289{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002290
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002291 if(result < VK_SUCCESS)
2292 {
2293 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
2294 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002295 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002297
2298 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299}
2300
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002301VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
2302 VkDevice device)
2303{
2304 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002305
2306 PostDeviceWaitIdle(device, result);
2307
2308 return result;
2309}
2310
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002311bool PreAllocateMemory(
2312 VkDevice device,
2313 const VkMemoryAllocateInfo* pAllocateInfo)
2314{
2315 if(pAllocateInfo != nullptr)
2316 {
2317 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
2318 {
2319 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2320 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
2321 return false;
2322 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002324
2325 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326}
2327
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002328bool PostAllocateMemory(
2329 VkDevice device,
2330 VkDeviceMemory* pMemory,
2331 VkResult result)
2332{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002334 if(pMemory != nullptr)
2335 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 }
2337
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002338 if(result < VK_SUCCESS)
2339 {
2340 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
2341 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002342 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002343 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002344
2345 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002346}
2347
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002348VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
2349 VkDevice device,
2350 const VkMemoryAllocateInfo* pAllocateInfo,
2351 const VkAllocationCallbacks* pAllocator,
2352 VkDeviceMemory* pMemory)
2353{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002354 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002355
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002356 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002358 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002359
2360 return result;
2361}
2362
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002363bool PostMapMemory(
2364 VkDevice device,
2365 VkDeviceMemory mem,
2366 VkDeviceSize offset,
2367 VkDeviceSize size,
2368 VkMemoryMapFlags flags,
2369 void** ppData,
2370 VkResult result)
2371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002373
2374
2375
2376
2377 if(ppData != nullptr)
2378 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379 }
2380
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002381 if(result < VK_SUCCESS)
2382 {
2383 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
2384 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002385 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002387
2388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389}
2390
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002391VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
2392 VkDevice device,
2393 VkDeviceMemory mem,
2394 VkDeviceSize offset,
2395 VkDeviceSize size,
2396 VkMemoryMapFlags flags,
2397 void** ppData)
2398{
2399 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002400
2401 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2402
2403 return result;
2404}
2405
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002406bool PreFlushMappedMemoryRanges(
2407 VkDevice device,
2408 const VkMappedMemoryRange* pMemoryRanges)
2409{
2410 if(pMemoryRanges != nullptr)
2411 {
2412 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
2413 {
2414 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2415 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
2416 return false;
2417 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002418 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002419
2420 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421}
2422
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002423bool PostFlushMappedMemoryRanges(
2424 VkDevice device,
2425 uint32_t memoryRangeCount,
2426 VkResult result)
2427{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002428
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002429
2430 if(result < VK_SUCCESS)
2431 {
2432 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
2433 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002436
2437 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438}
2439
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002440VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
2441 VkDevice device,
2442 uint32_t memoryRangeCount,
2443 const VkMappedMemoryRange* pMemoryRanges)
2444{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002445 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002446
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002447 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002448
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002449 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002451 return result;
2452}
2453
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002454bool PreInvalidateMappedMemoryRanges(
2455 VkDevice device,
2456 const VkMappedMemoryRange* pMemoryRanges)
2457{
2458 if(pMemoryRanges != nullptr)
2459 {
2460 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
2461 {
2462 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2463 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
2464 return false;
2465 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002466 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002467
2468 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469}
2470
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002471bool PostInvalidateMappedMemoryRanges(
2472 VkDevice device,
2473 uint32_t memoryRangeCount,
2474 VkResult result)
2475{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002476
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002477
2478 if(result < VK_SUCCESS)
2479 {
2480 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
2481 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002482 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002483 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002484
2485 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002486}
2487
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002488VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
2489 VkDevice device,
2490 uint32_t memoryRangeCount,
2491 const VkMappedMemoryRange* pMemoryRanges)
2492{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002493 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002495 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002496
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002497 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002498
Tony Barbourb1250542015-04-16 19:23:13 -06002499 return result;
2500}
2501
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002502bool PostGetDeviceMemoryCommitment(
2503 VkDevice device,
2504 VkDeviceMemory memory,
2505 VkDeviceSize* pCommittedMemoryInBytes)
2506{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002507
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002508
2509 if(pCommittedMemoryInBytes != nullptr)
2510 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002511 }
2512
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002513 return true;
2514}
2515
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002516VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
2517 VkDevice device,
2518 VkDeviceMemory memory,
2519 VkDeviceSize* pCommittedMemoryInBytes)
2520{
2521 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002522
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002523 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002524}
2525
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002526bool PostBindBufferMemory(
2527 VkDevice device,
2528 VkBuffer buffer,
2529 VkDeviceMemory mem,
2530 VkDeviceSize memoryOffset,
2531 VkResult result)
2532{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002533
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002534
2535
2536
2537 if(result < VK_SUCCESS)
2538 {
2539 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2540 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002541 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002542 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543
2544 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002545}
2546
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002547VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
2548 VkDevice device,
2549 VkBuffer buffer,
2550 VkDeviceMemory mem,
2551 VkDeviceSize memoryOffset)
2552{
2553 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002554
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002555 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002556
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002557 return result;
2558}
2559
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002560bool PostBindImageMemory(
2561 VkDevice device,
2562 VkImage image,
2563 VkDeviceMemory mem,
2564 VkDeviceSize memoryOffset,
2565 VkResult result)
2566{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002568
2569
2570
2571 if(result < VK_SUCCESS)
2572 {
2573 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2574 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002576 }
2577
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578 return true;
2579}
2580
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002581VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
2582 VkDevice device,
2583 VkImage image,
2584 VkDeviceMemory mem,
2585 VkDeviceSize memoryOffset)
2586{
2587 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002588
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002589 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002590
2591 return result;
2592}
2593
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002594bool PostGetBufferMemoryRequirements(
2595 VkDevice device,
2596 VkBuffer buffer,
2597 VkMemoryRequirements* pMemoryRequirements)
2598{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002599
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002600
2601 if(pMemoryRequirements != nullptr)
2602 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002603 }
2604
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return true;
2606}
2607
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002608VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
2609 VkDevice device,
2610 VkBuffer buffer,
2611 VkMemoryRequirements* pMemoryRequirements)
2612{
2613 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002615 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002616}
2617
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002618bool PostGetImageMemoryRequirements(
2619 VkDevice device,
2620 VkImage image,
2621 VkMemoryRequirements* pMemoryRequirements)
2622{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002623
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002624
2625 if(pMemoryRequirements != nullptr)
2626 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627 }
2628
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 return true;
2630}
2631
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002632VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
2633 VkDevice device,
2634 VkImage image,
2635 VkMemoryRequirements* pMemoryRequirements)
2636{
2637 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002638
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002639 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640}
2641
2642bool PostGetImageSparseMemoryRequirements(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002643 VkDevice device,
2644 VkImage image,
2645 uint32_t* pNumRequirements,
2646 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2647{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002649
2650 if(pNumRequirements != nullptr)
2651 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 }
2653
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002654 if(pSparseMemoryRequirements != nullptr)
2655 {
2656 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
2657 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
2658 {
2659 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2660 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
2661 return false;
2662 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002663 }
2664
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002665 return true;
2666}
2667
Chia-I Wu9ab61502015-11-06 06:42:02 +08002668VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002669 VkDevice device,
2670 VkImage image,
2671 uint32_t* pNumRequirements,
2672 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2673{
2674 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002676 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002677}
2678
2679bool PostGetPhysicalDeviceSparseImageFormatProperties(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002680 VkPhysicalDevice physicalDevice,
2681 VkFormat format,
2682 VkImageType type,
2683 VkSampleCountFlagBits samples,
2684 VkImageUsageFlags usage,
2685 VkImageTiling tiling,
2686 uint32_t* pNumProperties,
2687 VkSparseImageFormatProperties* pProperties)
2688{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002689
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002690 if(format < VK_FORMAT_BEGIN_RANGE ||
2691 format > VK_FORMAT_END_RANGE)
2692 {
2693 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2694 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002695 return false;
2696 }
2697
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002698 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2699 type > VK_IMAGE_TYPE_END_RANGE)
2700 {
2701 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2702 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703 return false;
2704 }
2705
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002706
2707
2708 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2709 tiling > VK_IMAGE_TILING_END_RANGE)
2710 {
2711 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2712 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002713 return false;
2714 }
2715
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002716 if(pNumProperties != nullptr)
2717 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002718 }
2719
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002720 if(pProperties != nullptr)
2721 {
2722 if ((pProperties->aspectMask &
2723 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
2724 {
2725 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2726 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
2727 return false;
2728 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002729 }
2730
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002731 return true;
2732}
2733
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002734VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
2735 VkPhysicalDevice physicalDevice,
2736 VkFormat format,
2737 VkImageType type,
2738 VkSampleCountFlagBits samples,
2739 VkImageUsageFlags usage,
2740 VkImageTiling tiling,
2741 uint32_t* pNumProperties,
2742 VkSparseImageFormatProperties* pProperties)
2743{
2744 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002745
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002746 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747}
2748
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002749bool PreQueueBindSparse(
2750 VkQueue queue,
2751 uint32_t bindInfoCount,
2752 const VkBindSparseInfo* pBindInfo)
2753{
2754 if(pBindInfo != nullptr)
2755 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002756 }
2757
2758 return true;
2759}
2760
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002761bool PostQueueBindSparse(
2762 VkQueue queue,
2763 uint32_t bindInfoCount,
2764 const VkBindSparseInfo* pBindInfo,
2765 VkFence fence,
2766 VkResult result)
2767{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002768
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002769
2770
2771 if(result < VK_SUCCESS)
2772 {
2773 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
2774 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002775 return false;
2776 }
2777
2778 return true;
2779}
2780
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002781VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
2782 VkQueue queue,
2783 uint32_t bindInfoCount,
2784 const VkBindSparseInfo* pBindInfo,
2785 VkFence fence)
2786{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002787 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002788
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002789 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002790
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002791 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002793 return result;
2794}
2795
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002796bool PreCreateFence(
2797 VkDevice device,
2798 const VkFenceCreateInfo* pCreateInfo)
2799{
2800 if(pCreateInfo != nullptr)
2801 {
2802 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
2803 {
2804 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2805 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
2806 return false;
2807 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002808 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002809
2810 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002811}
2812
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002813bool PostCreateFence(
2814 VkDevice device,
2815 VkFence* pFence,
2816 VkResult result)
2817{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002818
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002819 if(pFence != nullptr)
2820 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821 }
2822
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002823 if(result < VK_SUCCESS)
2824 {
2825 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
2826 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002827 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002829
2830 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002831}
2832
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002833VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
2834 VkDevice device,
2835 const VkFenceCreateInfo* pCreateInfo,
2836 const VkAllocationCallbacks* pAllocator,
2837 VkFence* pFence)
2838{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002839 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002840
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002841 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002842
2843 PostCreateFence(device, pFence, result);
2844
2845 return result;
2846}
2847
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002848bool PreResetFences(
2849 VkDevice device,
2850 const VkFence* pFences)
2851{
2852 if(pFences != nullptr)
2853 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002854 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002855
2856 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002857}
2858
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002859bool PostResetFences(
2860 VkDevice device,
2861 uint32_t fenceCount,
2862 VkResult result)
2863{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002865
2866 if(result < VK_SUCCESS)
2867 {
2868 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
2869 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002870 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002871 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002872
2873 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002874}
2875
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002876VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
2877 VkDevice device,
2878 uint32_t fenceCount,
2879 const VkFence* pFences)
2880{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002882
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002883 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002884
2885 PostResetFences(device, fenceCount, result);
2886
2887 return result;
2888}
2889
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002890bool PostGetFenceStatus(
2891 VkDevice device,
2892 VkFence fence,
2893 VkResult result)
2894{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002896
2897 if(result < VK_SUCCESS)
2898 {
2899 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
2900 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002901 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002902 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002903
2904 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002905}
2906
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002907VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
2908 VkDevice device,
2909 VkFence fence)
2910{
2911 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002912
2913 PostGetFenceStatus(device, fence, result);
2914
2915 return result;
2916}
2917
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002918bool PreWaitForFences(
2919 VkDevice device,
2920 const VkFence* pFences)
2921{
2922 if(pFences != nullptr)
2923 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002924 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002925
2926 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927}
2928
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002929bool PostWaitForFences(
2930 VkDevice device,
2931 uint32_t fenceCount,
2932 VkBool32 waitAll,
2933 uint64_t timeout,
2934 VkResult result)
2935{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002937
2938
2939
2940 if(result < VK_SUCCESS)
2941 {
2942 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
2943 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002944 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002946
2947 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948}
2949
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002950VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
2951 VkDevice device,
2952 uint32_t fenceCount,
2953 const VkFence* pFences,
2954 VkBool32 waitAll,
2955 uint64_t timeout)
2956{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002957 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002958
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002959 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002960
2961 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2962
2963 return result;
2964}
2965
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002966bool PreCreateSemaphore(
2967 VkDevice device,
2968 const VkSemaphoreCreateInfo* pCreateInfo)
2969{
2970 if(pCreateInfo != nullptr)
2971 {
2972 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
2973 {
2974 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
2975 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
2976 return false;
2977 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002979
2980 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981}
2982
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002983bool PostCreateSemaphore(
2984 VkDevice device,
2985 VkSemaphore* pSemaphore,
2986 VkResult result)
2987{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002989 if(pSemaphore != nullptr)
2990 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002991 }
2992
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07002993 if(result < VK_SUCCESS)
2994 {
2995 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
2996 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002997 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002998 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002999
3000 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001}
3002
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003003VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
3004 VkDevice device,
3005 const VkSemaphoreCreateInfo* pCreateInfo,
3006 const VkAllocationCallbacks* pAllocator,
3007 VkSemaphore* pSemaphore)
3008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003009 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003010
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003011 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012
3013 PostCreateSemaphore(device, pSemaphore, result);
3014
3015 return result;
3016}
3017
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003018bool PreCreateEvent(
3019 VkDevice device,
3020 const VkEventCreateInfo* pCreateInfo)
3021{
3022 if(pCreateInfo != nullptr)
3023 {
3024 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
3025 {
3026 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3027 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3028 return false;
3029 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031
3032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033}
3034
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003035bool PostCreateEvent(
3036 VkDevice device,
3037 VkEvent* pEvent,
3038 VkResult result)
3039{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003041 if(pEvent != nullptr)
3042 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043 }
3044
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003045 if(result < VK_SUCCESS)
3046 {
3047 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
3048 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003049 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003050 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003051
3052 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053}
3054
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003055VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
3056 VkDevice device,
3057 const VkEventCreateInfo* pCreateInfo,
3058 const VkAllocationCallbacks* pAllocator,
3059 VkEvent* pEvent)
3060{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003061 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003062
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003063 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064
3065 PostCreateEvent(device, pEvent, result);
3066
3067 return result;
3068}
3069
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003070bool PostGetEventStatus(
3071 VkDevice device,
3072 VkEvent event,
3073 VkResult result)
3074{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003075
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003076
3077 if(result < VK_SUCCESS)
3078 {
3079 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
3080 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003081 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003082 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003083
3084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085}
3086
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003087VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
3088 VkDevice device,
3089 VkEvent event)
3090{
3091 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003092
3093 PostGetEventStatus(device, event, result);
3094
3095 return result;
3096}
3097
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003098bool PostSetEvent(
3099 VkDevice device,
3100 VkEvent event,
3101 VkResult result)
3102{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003104
3105 if(result < VK_SUCCESS)
3106 {
3107 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
3108 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003111
3112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113}
3114
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003115VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
3116 VkDevice device,
3117 VkEvent event)
3118{
3119 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003120
3121 PostSetEvent(device, event, result);
3122
3123 return result;
3124}
3125
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003126bool PostResetEvent(
3127 VkDevice device,
3128 VkEvent event,
3129 VkResult result)
3130{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003132
3133 if(result < VK_SUCCESS)
3134 {
3135 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
3136 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003137 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003139
3140 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141}
3142
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003143VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
3144 VkDevice device,
3145 VkEvent event)
3146{
3147 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003148
3149 PostResetEvent(device, event, result);
3150
3151 return result;
3152}
3153
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003154bool PreCreateQueryPool(
3155 VkDevice device,
3156 const VkQueryPoolCreateInfo* pCreateInfo)
3157{
3158 if(pCreateInfo != nullptr)
3159 {
3160 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
3161 {
3162 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3163 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3164 return false;
3165 }
3166 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3167 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3168 {
3169 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3170 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
3171 return false;
3172 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003174
3175 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003176}
3177
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003178bool PostCreateQueryPool(
3179 VkDevice device,
3180 VkQueryPool* pQueryPool,
3181 VkResult result)
3182{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003183
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003184 if(pQueryPool != nullptr)
3185 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 }
3187
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003188 if(result < VK_SUCCESS)
3189 {
3190 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3191 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194
3195 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196}
3197
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003198VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
3199 VkDevice device,
3200 const VkQueryPoolCreateInfo* pCreateInfo,
3201 const VkAllocationCallbacks* pAllocator,
3202 VkQueryPool* pQueryPool)
3203{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003205
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003206 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207
3208 PostCreateQueryPool(device, pQueryPool, result);
3209
3210 return result;
3211}
3212
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003213bool PostGetQueryPoolResults(
3214 VkDevice device,
3215 VkQueryPool queryPool,
3216 uint32_t firstQuery,
3217 uint32_t queryCount,
3218 size_t dataSize,
3219 void* pData,
3220 VkDeviceSize stride,
3221 VkQueryResultFlags flags,
3222 VkResult result)
3223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003225
3226
3227
3228 if(pData != nullptr)
3229 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 }
3231
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003232
3233 if(result < VK_SUCCESS)
3234 {
3235 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
3236 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003237 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003238 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239
3240 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003241}
3242
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003243VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
3244 VkDevice device,
3245 VkQueryPool queryPool,
3246 uint32_t firstQuery,
3247 uint32_t queryCount,
3248 size_t dataSize,
3249 void* pData,
3250 VkDeviceSize stride,
3251 VkQueryResultFlags flags)
3252{
3253 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003255 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256
3257 return result;
3258}
3259
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003260bool PreCreateBuffer(
3261 VkDevice device,
3262 const VkBufferCreateInfo* pCreateInfo)
3263{
3264 if(pCreateInfo != nullptr)
3265 {
3266 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
3267 {
3268 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3269 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3270 return false;
3271 }
3272 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3273 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
3274 {
3275 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3276 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
3277 return false;
3278 }
3279 if(pCreateInfo->pQueueFamilyIndices != nullptr)
3280 {
3281 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283
3284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003285}
3286
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003287bool PostCreateBuffer(
3288 VkDevice device,
3289 VkBuffer* pBuffer,
3290 VkResult result)
3291{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003293 if(pBuffer != nullptr)
3294 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003295 }
3296
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003297 if(result < VK_SUCCESS)
3298 {
3299 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
3300 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003301 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003302 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303
3304 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305}
3306
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003307VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
3308 VkDevice device,
3309 const VkBufferCreateInfo* pCreateInfo,
3310 const VkAllocationCallbacks* pAllocator,
3311 VkBuffer* pBuffer)
3312{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003313 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003314
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003315 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316
3317 PostCreateBuffer(device, pBuffer, result);
3318
3319 return result;
3320}
3321
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003322bool PreCreateBufferView(
3323 VkDevice device,
3324 const VkBufferViewCreateInfo* pCreateInfo)
3325{
3326 if(pCreateInfo != nullptr)
3327 {
3328 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
3329 {
3330 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3331 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3332 return false;
3333 }
3334 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3335 pCreateInfo->format > VK_FORMAT_END_RANGE)
3336 {
3337 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3338 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
3339 return false;
3340 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003341 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342
3343 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344}
3345
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003346bool PostCreateBufferView(
3347 VkDevice device,
3348 VkBufferView* pView,
3349 VkResult result)
3350{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003351
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003352 if(pView != nullptr)
3353 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354 }
3355
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003356 if(result < VK_SUCCESS)
3357 {
3358 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
3359 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003360 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003362
3363 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003364}
3365
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003366VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
3367 VkDevice device,
3368 const VkBufferViewCreateInfo* pCreateInfo,
3369 const VkAllocationCallbacks* pAllocator,
3370 VkBufferView* pView)
3371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003373
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003374 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375
3376 PostCreateBufferView(device, pView, result);
3377
3378 return result;
3379}
3380
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003381bool PreCreateImage(
3382 VkDevice device,
3383 const VkImageCreateInfo* pCreateInfo)
3384{
3385 if(pCreateInfo != nullptr)
3386 {
3387 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
3388 {
3389 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3390 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3391 return false;
3392 }
3393 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3394 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3395 {
3396 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3397 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
3398 return false;
3399 }
3400 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3401 pCreateInfo->format > VK_FORMAT_END_RANGE)
3402 {
3403 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3404 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
3405 return false;
3406 }
3407 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3408 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3409 {
3410 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3411 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
3412 return false;
3413 }
3414 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3415 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
3416 {
3417 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3418 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
3419 return false;
3420 }
3421 if(pCreateInfo->pQueueFamilyIndices != nullptr)
3422 {
3423 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425
3426 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427}
3428
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003429bool PostCreateImage(
3430 VkDevice device,
3431 VkImage* pImage,
3432 VkResult result)
3433{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003434
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003435 if(pImage != nullptr)
3436 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 }
3438
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003439 if(result < VK_SUCCESS)
3440 {
3441 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
3442 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003443 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003444 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003445
3446 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003447}
3448
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003449VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
3450 VkDevice device,
3451 const VkImageCreateInfo* pCreateInfo,
3452 const VkAllocationCallbacks* pAllocator,
3453 VkImage* pImage)
3454{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003455 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003457 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003458
3459 PostCreateImage(device, pImage, result);
3460
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003461 return result;
3462}
3463
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003464bool PreGetImageSubresourceLayout(
3465 VkDevice device,
3466 const VkImageSubresource* pSubresource)
3467{
3468 if(pSubresource != nullptr)
3469 {
3470 if ((pSubresource->aspectMask &
3471 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
3472 {
3473 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3474 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
3475 return false;
3476 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003477 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003478
3479 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003480}
3481
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003482bool PostGetImageSubresourceLayout(
3483 VkDevice device,
3484 VkImage image,
3485 VkSubresourceLayout* pLayout)
3486{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003487
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003488
3489 if(pLayout != nullptr)
3490 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003491 }
3492
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003494}
3495
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003496VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
3497 VkDevice device,
3498 VkImage image,
3499 const VkImageSubresource* pSubresource,
3500 VkSubresourceLayout* pLayout)
3501{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003502 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003503
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003504 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003506 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507}
3508
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003509bool PreCreateImageView(
3510 VkDevice device,
3511 const VkImageViewCreateInfo* pCreateInfo)
3512{
3513 if(pCreateInfo != nullptr)
3514 {
3515 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
3516 {
3517 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3518 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3519 return false;
3520 }
3521 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3522 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3523 {
3524 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3525 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
3526 return false;
3527 }
3528 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3529 pCreateInfo->format > VK_FORMAT_END_RANGE)
3530 {
3531 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3532 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
3533 return false;
3534 }
3535 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3536 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
3537 {
3538 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3539 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
3540 return false;
3541 }
3542 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3543 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
3544 {
3545 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3546 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
3547 return false;
3548 }
3549 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3550 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
3551 {
3552 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3553 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
3554 return false;
3555 }
3556 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3557 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
3558 {
3559 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3560 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
3561 return false;
3562 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003563 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003564
3565 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003566}
3567
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003568bool PostCreateImageView(
3569 VkDevice device,
3570 VkImageView* pView,
3571 VkResult result)
3572{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003574 if(pView != nullptr)
3575 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 }
3577
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003578 if(result < VK_SUCCESS)
3579 {
3580 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
3581 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003584
3585 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586}
3587
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003588VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
3589 VkDevice device,
3590 const VkImageViewCreateInfo* pCreateInfo,
3591 const VkAllocationCallbacks* pAllocator,
3592 VkImageView* pView)
3593{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003594 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003595
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003596 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597
3598 PostCreateImageView(device, pView, result);
3599
3600 return result;
3601}
3602
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003603bool PreCreateShaderModule(
3604 VkDevice device,
3605 const VkShaderModuleCreateInfo* pCreateInfo)
3606{
3607 if(pCreateInfo) {
3608 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3609 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3610 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Michael Lentine03d8e572015-09-15 14:59:14 -05003611 return false;
3612 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003613 if(!pCreateInfo->pCode) {
3614 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3615 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
Michael Lentine03d8e572015-09-15 14:59:14 -05003616 return false;
3617 }
3618 } else {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003619 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3620 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
Michael Lentine03d8e572015-09-15 14:59:14 -05003621 return false;
3622 }
3623
3624 return true;
3625}
3626
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003627bool PostCreateShaderModule(
3628 VkDevice device,
3629 VkShaderModule* pShaderModule,
3630 VkResult result)
3631{
3632 if(result < VK_SUCCESS) {
3633 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3634 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine03d8e572015-09-15 14:59:14 -05003635 return false;
3636 }
3637
3638 return true;
3639}
3640
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003641VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
3642 VkDevice device,
3643 const VkShaderModuleCreateInfo* pCreateInfo,
3644 const VkAllocationCallbacks* pAllocator,
3645 VkShaderModule* pShaderModule)
3646{
Michael Lentine03d8e572015-09-15 14:59:14 -05003647 PreCreateShaderModule(device, pCreateInfo);
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003648 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003649 PostCreateShaderModule(device, pShaderModule, result);
3650 return result;
3651}
3652
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003653bool PreCreatePipelineCache(
3654 VkDevice device,
3655 const VkPipelineCacheCreateInfo* pCreateInfo)
3656{
3657 if(pCreateInfo != nullptr)
3658 {
3659 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
3660 {
3661 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3662 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3663 return false;
3664 }
3665 if(pCreateInfo->pInitialData != nullptr)
3666 {
3667 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003668 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003669
3670 return true;
3671}
3672
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003673bool PostCreatePipelineCache(
3674 VkDevice device,
3675 VkPipelineCache* pPipelineCache,
3676 VkResult result)
3677{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003678
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003679 if(pPipelineCache != nullptr)
3680 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003681 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003682
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003683 if(result < VK_SUCCESS)
3684 {
3685 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
3686 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003687 return false;
3688 }
3689
3690 return true;
3691}
3692
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003693VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
3694 VkDevice device,
3695 const VkPipelineCacheCreateInfo* pCreateInfo,
3696 const VkAllocationCallbacks* pAllocator,
3697 VkPipelineCache* pPipelineCache)
3698{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003699 PreCreatePipelineCache(device, pCreateInfo);
3700
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003701 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003702
3703 PostCreatePipelineCache(device, pPipelineCache, result);
3704
3705 return result;
3706}
3707
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003708bool PostGetPipelineCacheData(
3709 VkDevice device,
3710 VkPipelineCache pipelineCache,
3711 size_t* pDataSize,
3712 void* pData,
3713 VkResult result)
3714{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003715
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003716
3717 if(pDataSize != nullptr)
3718 {
Chia-I Wub16facd2015-10-26 19:17:06 +08003719 }
3720
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003721 if(pData != nullptr)
3722 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003723 }
3724
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003725 if(result < VK_SUCCESS)
3726 {
3727 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3728 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003729 return false;
3730 }
3731
3732 return true;
3733}
3734
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003735VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
3736 VkDevice device,
3737 VkPipelineCache pipelineCache,
3738 size_t* pDataSize,
3739 void* pData)
3740{
3741 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003742
Chia-I Wub16facd2015-10-26 19:17:06 +08003743 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003744
3745 return result;
3746}
3747
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003748bool PreMergePipelineCaches(
3749 VkDevice device,
3750 const VkPipelineCache* pSrcCaches)
3751{
3752 if(pSrcCaches != nullptr)
3753 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003754 }
3755
3756 return true;
3757}
3758
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003759bool PostMergePipelineCaches(
3760 VkDevice device,
3761 VkPipelineCache dstCache,
3762 uint32_t srcCacheCount,
3763 VkResult result)
3764{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003766
3767
3768 if(result < VK_SUCCESS)
3769 {
3770 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3771 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003772 return false;
3773 }
3774
3775 return true;
3776}
3777
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003778VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
3779 VkDevice device,
3780 VkPipelineCache dstCache,
3781 uint32_t srcCacheCount,
3782 const VkPipelineCache* pSrcCaches)
3783{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784 PreMergePipelineCaches(device, pSrcCaches);
3785
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003786 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003787
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003788 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789
3790 return result;
3791}
3792
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07003793bool PreCreateGraphicsPipelines(
3794 VkDevice device,
3795 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3796{
3797 if(pCreateInfos != nullptr)
3798 {
3799 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3800 {
3801 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3802 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3803 return false;
3804 }
3805 if(pCreateInfos->pStages != nullptr)
3806 {
3807 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3808 {
3809 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3810 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3811 return false;
3812 }
3813 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3814 {
3815 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
3816 {
3817 }
3818 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3819 {
3820 }
3821 }
3822 }
3823 if(pCreateInfos->pVertexInputState != nullptr)
3824 {
3825 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3826 {
3827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3828 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3829 return false;
3830 }
3831 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3832 {
3833 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3834 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
3835 {
3836 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3837 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
3838 return false;
3839 }
3840 }
3841 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3842 {
3843 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3844 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3845 {
3846 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3847 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3848 return false;
3849 }
3850 }
3851 }
3852 if(pCreateInfos->pInputAssemblyState != nullptr)
3853 {
3854 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3855 {
3856 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3857 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3858 return false;
3859 }
3860 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3861 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3862 {
3863 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3864 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3865 return false;
3866 }
3867 }
3868 if(pCreateInfos->pTessellationState != nullptr)
3869 {
3870 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3871 {
3872 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3873 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3874 return false;
3875 }
3876 }
3877 if(pCreateInfos->pViewportState != nullptr)
3878 {
3879 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3880 {
3881 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3882 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3883 return false;
3884 }
3885 }
3886 if(pCreateInfos->pRasterizationState != nullptr)
3887 {
3888 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
3889 {
3890 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3891 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
3892 return false;
3893 }
3894 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3895 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
3896 {
3897 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3898 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
3899 return false;
3900 }
3901 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
3902 {
3903 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3904 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
3905 return false;
3906 }
3907 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3908 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
3909 {
3910 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3911 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
3912 return false;
3913 }
3914 }
3915 if(pCreateInfos->pMultisampleState != nullptr)
3916 {
3917 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3918 {
3919 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3920 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3921 return false;
3922 }
3923 }
3924 if(pCreateInfos->pDepthStencilState != nullptr)
3925 {
3926 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3927 {
3928 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3929 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3930 return false;
3931 }
3932 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3933 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3934 {
3935 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3936 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3937 return false;
3938 }
3939 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3940 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
3941 {
3942 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3943 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
3944 return false;
3945 }
3946 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3947 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
3948 {
3949 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3950 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
3951 return false;
3952 }
3953 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3954 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
3955 {
3956 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3957 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
3958 return false;
3959 }
3960 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3961 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
3962 {
3963 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3964 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
3965 return false;
3966 }
3967 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3968 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
3969 {
3970 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3971 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
3972 return false;
3973 }
3974 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3975 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
3976 {
3977 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3978 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
3979 return false;
3980 }
3981 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3982 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
3983 {
3984 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3985 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
3986 return false;
3987 }
3988 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3989 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
3990 {
3991 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
3992 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
3993 return false;
3994 }
3995 }
3996 if(pCreateInfos->pColorBlendState != nullptr)
3997 {
3998 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3999 {
4000 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4001 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4002 return false;
4003 }
4004 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4005 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4006 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4007 {
4008 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4009 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4010 return false;
4011 }
4012 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
4013 {
4014 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4015 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
4016 {
4017 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4018 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
4019 return false;
4020 }
4021 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4022 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
4023 {
4024 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4025 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
4026 return false;
4027 }
4028 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4029 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
4030 {
4031 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4032 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
4033 return false;
4034 }
4035 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4036 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
4037 {
4038 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4039 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
4040 return false;
4041 }
4042 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
4043 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
4044 {
4045 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4046 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
4047 return false;
4048 }
4049 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
4050 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
4051 {
4052 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4053 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
4054 return false;
4055 }
4056 }
4057 }
4058 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4059 {
4060 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4061 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4062 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004063 }
4064
4065 return true;
4066}
4067
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004068bool PostCreateGraphicsPipelines(
4069 VkDevice device,
4070 VkPipelineCache pipelineCache,
4071 uint32_t count,
4072 VkPipeline* pPipelines,
4073 VkResult result)
4074{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004075
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004076
4077
4078 if(pPipelines != nullptr)
4079 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004080 }
4081
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004082 if(result < VK_SUCCESS)
4083 {
4084 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4085 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004086 return false;
4087 }
4088
4089 return true;
4090}
4091
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004092VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
4093 VkDevice device,
4094 VkPipelineCache pipelineCache,
4095 uint32_t count,
4096 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4097 const VkAllocationCallbacks* pAllocator,
4098 VkPipeline* pPipelines)
4099{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004100 PreCreateGraphicsPipelines(device, pCreateInfos);
4101
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004102 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004104 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004105
4106 return result;
4107}
4108
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004109bool PreCreateComputePipelines(
4110 VkDevice device,
4111 const VkComputePipelineCreateInfo* pCreateInfos)
4112{
4113 if(pCreateInfos != nullptr)
4114 {
4115 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4116 {
4117 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4118 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4119 return false;
4120 }
4121 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4122 {
4123 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4124 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4125 return false;
4126 }
4127 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
4128 {
4129 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
4130 {
4131 }
4132 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
4133 {
4134 }
4135 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004136 }
4137
4138 return true;
4139}
4140
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004141bool PostCreateComputePipelines(
4142 VkDevice device,
4143 VkPipelineCache pipelineCache,
4144 uint32_t count,
4145 VkPipeline* pPipelines,
4146 VkResult result)
4147{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004148
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004149
4150
4151 if(pPipelines != nullptr)
4152 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004153 }
4154
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004155 if(result < VK_SUCCESS)
4156 {
4157 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4158 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004159 return false;
4160 }
4161
4162 return true;
4163}
4164
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004165VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
4166 VkDevice device,
4167 VkPipelineCache pipelineCache,
4168 uint32_t count,
4169 const VkComputePipelineCreateInfo* pCreateInfos,
4170 const VkAllocationCallbacks* pAllocator,
4171 VkPipeline* pPipelines)
4172{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004173 PreCreateComputePipelines(device, pCreateInfos);
4174
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004175 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004176
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004177 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004178
4179 return result;
4180}
4181
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004182bool PreCreatePipelineLayout(
4183 VkDevice device,
4184 const VkPipelineLayoutCreateInfo* pCreateInfo)
4185{
4186 if(pCreateInfo != nullptr)
4187 {
4188 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
4189 {
4190 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4191 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4192 return false;
4193 }
4194 if(pCreateInfo->pSetLayouts != nullptr)
4195 {
4196 }
4197 if(pCreateInfo->pPushConstantRanges != nullptr)
4198 {
4199 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004200 }
4201
4202 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004203}
4204
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004205bool PostCreatePipelineLayout(
4206 VkDevice device,
4207 VkPipelineLayout* pPipelineLayout,
4208 VkResult result)
4209{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004210
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004211 if(pPipelineLayout != nullptr)
4212 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213 }
4214
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004215 if(result < VK_SUCCESS)
4216 {
4217 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
4218 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004219 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004221
4222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223}
4224
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004225VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
4226 VkDevice device,
4227 const VkPipelineLayoutCreateInfo* pCreateInfo,
4228 const VkAllocationCallbacks* pAllocator,
4229 VkPipelineLayout* pPipelineLayout)
4230{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004231 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004232
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004233 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004234
4235 PostCreatePipelineLayout(device, pPipelineLayout, result);
4236
4237 return result;
4238}
4239
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004240bool PreCreateSampler(
4241 VkDevice device,
4242 const VkSamplerCreateInfo* pCreateInfo)
4243{
4244 if(pCreateInfo != nullptr)
4245 {
4246 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
4247 {
4248 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4249 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4250 return false;
4251 }
4252 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4253 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
4254 {
4255 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4256 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
4257 return false;
4258 }
4259 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4260 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
4261 {
4262 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4263 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
4264 return false;
4265 }
4266 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4267 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
4268 {
4269 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4270 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
4271 return false;
4272 }
4273 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4274 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
4275 {
4276 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4277 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
4278 return false;
4279 }
4280 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4281 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
4282 {
4283 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4284 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
4285 return false;
4286 }
4287 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4288 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
4289 {
4290 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4291 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
4292 return false;
4293 }
4294 if(pCreateInfo->compareEnable)
4295 {
4296 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4297 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4298 {
4299 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4300 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Mark Lobodzinskib39d9e62016-02-02 17:06:29 -07004301 return false;
4302 }
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004303 }
4304 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4305 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4306 {
4307 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4308 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
4309 return false;
4310 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004311 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004312
4313 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314}
4315
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004316bool PostCreateSampler(
4317 VkDevice device,
4318 VkSampler* pSampler,
4319 VkResult result)
4320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004322 if(pSampler != nullptr)
4323 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 }
4325
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004326 if(result < VK_SUCCESS)
4327 {
4328 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
4329 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004330 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332
4333 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004334}
4335
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004336VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
4337 VkDevice device,
4338 const VkSamplerCreateInfo* pCreateInfo,
4339 const VkAllocationCallbacks* pAllocator,
4340 VkSampler* pSampler)
4341{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004343
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004344 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345
4346 PostCreateSampler(device, pSampler, result);
4347
4348 return result;
4349}
4350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004351bool PreCreateDescriptorSetLayout(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004352 VkDevice device,
4353 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4354{
4355 if(pCreateInfo != nullptr)
4356 {
4357 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
4358 {
4359 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4360 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4361 return false;
4362 }
4363 if(pCreateInfo->pBindings != nullptr)
4364 {
4365 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4366 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4367 {
4368 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4369 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
4370 return false;
4371 }
4372 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
4373 {
4374 }
4375 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004376 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004377
4378 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379}
4380
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004381bool PostCreateDescriptorSetLayout(
4382 VkDevice device,
4383 VkDescriptorSetLayout* pSetLayout,
4384 VkResult result)
4385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004387 if(pSetLayout != nullptr)
4388 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389 }
4390
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004391 if(result < VK_SUCCESS)
4392 {
4393 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
4394 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004395 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004397
4398 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004399}
4400
Chia-I Wu9ab61502015-11-06 06:42:02 +08004401VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004402 VkDevice device,
4403 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4404 const VkAllocationCallbacks* pAllocator,
4405 VkDescriptorSetLayout* pSetLayout)
4406{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004408
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004409 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410
4411 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4412
4413 return result;
4414}
4415
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004416bool PreCreateDescriptorPool(
4417 VkDevice device,
4418 const VkDescriptorPoolCreateInfo* pCreateInfo)
4419{
4420 if(pCreateInfo != nullptr)
4421 {
4422 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
4423 {
4424 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4425 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4426 return false;
4427 }
4428 if(pCreateInfo->pPoolSizes != nullptr)
4429 {
4430 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4431 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4432 {
4433 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4434 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
4435 return false;
4436 }
4437 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439
4440 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441}
4442
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004443bool PostCreateDescriptorPool(
4444 VkDevice device,
4445 uint32_t maxSets,
4446 VkDescriptorPool* pDescriptorPool,
4447 VkResult result)
4448{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004450 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004452 if(pDescriptorPool != nullptr)
4453 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004454 }
4455
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004456 if(result < VK_SUCCESS)
4457 {
4458 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
4459 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004460 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004461 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004462
4463 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004464}
4465
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004466VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
4467 VkDevice device,
4468 const VkDescriptorPoolCreateInfo* pCreateInfo,
4469 const VkAllocationCallbacks* pAllocator,
4470 VkDescriptorPool* pDescriptorPool)
4471{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004472 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004473
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004474 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004475
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004476 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004477
4478 return result;
4479}
4480
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004481bool PostResetDescriptorPool(
4482 VkDevice device,
4483 VkDescriptorPool descriptorPool,
4484 VkResult result)
4485{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004486
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004487
4488 if(result < VK_SUCCESS)
4489 {
4490 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
4491 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004492 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004493 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004494
4495 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004496}
4497
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004498VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
4499 VkDevice device,
4500 VkDescriptorPool descriptorPool,
4501 VkDescriptorPoolResetFlags flags)
4502{
4503 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004504
4505 PostResetDescriptorPool(device, descriptorPool, result);
4506
4507 return result;
4508}
4509
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004510bool PreAllocateDescriptorSets(
4511 VkDevice device,
4512 const VkDescriptorSetLayout* pSetLayouts)
4513{
4514 if(pSetLayouts != nullptr)
4515 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004516 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004517
4518 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004519}
4520
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004521bool PostAllocateDescriptorSets(
4522 VkDevice device,
4523 VkDescriptorPool descriptorPool,
4524 uint32_t count,
4525 VkDescriptorSet* pDescriptorSets,
4526 VkResult result)
4527{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004529
4530 if(pDescriptorSets != nullptr)
4531 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 }
4533
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004534 if(result < VK_SUCCESS)
4535 {
4536 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4537 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004538 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540
4541 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542}
4543
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004544VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
4545 VkDevice device,
4546 const VkDescriptorSetAllocateInfo* pAllocateInfo,
4547 VkDescriptorSet* pDescriptorSets)
4548{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004549 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004550
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004551 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004553 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004554
4555 return result;
4556}
4557
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004558bool PreFreeDescriptorSets(
4559 VkDevice device,
4560 const VkDescriptorSet* pDescriptorSets)
4561{
4562 if(pDescriptorSets != nullptr)
4563 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004564 }
4565
4566 return true;
4567}
4568
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004569bool PostFreeDescriptorSets(
4570 VkDevice device,
4571 VkDescriptorPool descriptorPool,
4572 uint32_t count,
4573 VkResult result)
4574{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004575
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004576
4577
4578 if(result < VK_SUCCESS)
4579 {
4580 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4581 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004582 return false;
4583 }
4584
4585 return true;
4586}
4587
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004588VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
4589 VkDevice device,
4590 VkDescriptorPool descriptorPool,
4591 uint32_t count,
4592 const VkDescriptorSet* pDescriptorSets)
4593{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004594 PreFreeDescriptorSets(device, pDescriptorSets);
4595
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004596 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004597
4598 PostFreeDescriptorSets(device, descriptorPool, count, result);
4599
4600 return result;
4601}
4602
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004603bool PreUpdateDescriptorSets(
4604 VkDevice device,
4605 const VkWriteDescriptorSet* pDescriptorWrites,
4606 const VkCopyDescriptorSet* pDescriptorCopies)
4607{
4608 if(pDescriptorWrites != nullptr)
4609 {
4610 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
4611 {
4612 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4613 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
4614 return false;
4615 }
4616 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4617 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4618 {
4619 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4620 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
4621 return false;
4622 }
4623 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4624 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4625 if(pDescriptorWrites->pImageInfo != nullptr)
4626 {
4627 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4628 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4629 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4630 {
4631 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4632 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
4633 return false;
4634 }
4635 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004636 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004637
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004638 if(pDescriptorCopies != nullptr)
4639 {
4640 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
4641 {
4642 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4643 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
4644 return false;
4645 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004646 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004647
4648 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649}
4650
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004651VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
4652 VkDevice device,
4653 uint32_t descriptorWriteCount,
4654 const VkWriteDescriptorSet* pDescriptorWrites,
4655 uint32_t descriptorCopyCount,
4656 const VkCopyDescriptorSet* pDescriptorCopies)
4657{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004658 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004659
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004660 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004661}
4662
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004663bool PreCreateFramebuffer(
4664 VkDevice device,
4665 const VkFramebufferCreateInfo* pCreateInfo)
4666{
4667 if(pCreateInfo != nullptr)
4668 {
4669 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4670 {
4671 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4672 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4673 return false;
4674 }
4675 if(pCreateInfo->pAttachments != nullptr)
4676 {
4677 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004678 }
4679
4680 return true;
4681}
4682
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004683bool PostCreateFramebuffer(
4684 VkDevice device,
4685 VkFramebuffer* pFramebuffer,
4686 VkResult result)
4687{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004688
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004689 if(pFramebuffer != nullptr)
4690 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004691 }
4692
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004693 if(result < VK_SUCCESS)
4694 {
4695 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4696 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004697 return false;
4698 }
4699
4700 return true;
4701}
4702
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004703VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
4704 VkDevice device,
4705 const VkFramebufferCreateInfo* pCreateInfo,
4706 const VkAllocationCallbacks* pAllocator,
4707 VkFramebuffer* pFramebuffer)
4708{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004709 PreCreateFramebuffer(device, pCreateInfo);
4710
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004711 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004712
4713 PostCreateFramebuffer(device, pFramebuffer, result);
4714
4715 return result;
4716}
4717
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004718bool PreCreateRenderPass(
4719 VkDevice device,
4720 const VkRenderPassCreateInfo* pCreateInfo)
4721{
4722 if(pCreateInfo != nullptr)
4723 {
4724 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4725 {
4726 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4727 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4728 return false;
4729 }
4730 if(pCreateInfo->pAttachments != nullptr)
4731 {
4732 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4733 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4734 {
4735 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4736 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4737 return false;
4738 }
4739 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4740 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4741 {
4742 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4743 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4744 return false;
4745 }
4746 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4747 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4748 {
4749 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4750 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4751 return false;
4752 }
4753 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4754 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4755 {
4756 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4757 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4758 return false;
4759 }
4760 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4761 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4762 {
4763 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4764 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4765 return false;
4766 }
4767 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4768 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4769 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4770 {
4771 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4772 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4773 return false;
4774 }
4775 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4776 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4777 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4778 {
4779 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4780 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4781 return false;
4782 }
4783 }
4784 if(pCreateInfo->pSubpasses != nullptr)
4785 {
4786 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4787 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4788 {
4789 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4790 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4791 return false;
4792 }
4793 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
4794 {
4795 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4796 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4797 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4798 {
4799 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4800 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
4801 return false;
4802 }
4803 }
4804 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
4805 {
4806 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4807 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4808 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4809 {
4810 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4811 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
4812 return false;
4813 }
4814 }
4815 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
4816 {
4817 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4818 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4819 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4820 {
4821 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4822 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
4823 return false;
4824 }
4825 }
4826 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4827 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4828 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4829 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
4830 {
4831 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4832 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
4833 return false;
4834 }
4835 }
4836 if(pCreateInfo->pDependencies != nullptr)
4837 {
4838 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004839 }
4840
4841 return true;
4842}
4843
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004844bool PostCreateRenderPass(
4845 VkDevice device,
4846 VkRenderPass* pRenderPass,
4847 VkResult result)
4848{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004850 if(pRenderPass != nullptr)
4851 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004852 }
4853
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004854 if(result < VK_SUCCESS)
4855 {
4856 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4857 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004858 return false;
4859 }
4860
4861 return true;
4862}
4863
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004864VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
4865 VkDevice device,
4866 const VkRenderPassCreateInfo* pCreateInfo,
4867 const VkAllocationCallbacks* pAllocator,
4868 VkRenderPass* pRenderPass)
4869{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004870 PreCreateRenderPass(device, pCreateInfo);
4871
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004872 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873
4874 PostCreateRenderPass(device, pRenderPass, result);
4875
4876 return result;
4877}
4878
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004879bool PostGetRenderAreaGranularity(
4880 VkDevice device,
4881 VkRenderPass renderPass,
4882 VkExtent2D* pGranularity)
4883{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004884
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004885
4886 if(pGranularity != nullptr)
4887 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004888 }
4889
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004890 return true;
4891}
4892
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004893VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
4894 VkDevice device,
4895 VkRenderPass renderPass,
4896 VkExtent2D* pGranularity)
4897{
4898 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004900 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004901}
4902
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004903bool PreCreateCommandPool(
4904 VkDevice device,
4905 const VkCommandPoolCreateInfo* pCreateInfo)
4906{
4907 if(pCreateInfo != nullptr)
4908 {
4909 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
4910 {
4911 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4912 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4913 return false;
4914 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004915 }
4916
4917 return true;
4918}
4919
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004920bool PostCreateCommandPool(
4921 VkDevice device,
4922 VkCommandPool* pCommandPool,
4923 VkResult result)
4924{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004925
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004926 if(pCommandPool != nullptr)
4927 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004928 }
4929
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004930 if(result < VK_SUCCESS)
4931 {
4932 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4933 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004934 return false;
4935 }
4936
4937 return true;
4938}
4939
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004940VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
4941 VkDevice device,
4942 const VkCommandPoolCreateInfo* pCreateInfo,
4943 const VkAllocationCallbacks* pAllocator,
4944 VkCommandPool* pCommandPool)
4945{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004946 PreCreateCommandPool(device, pCreateInfo);
4947
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004948 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004949
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004950 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004951
4952 return result;
4953}
4954
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004955bool PostResetCommandPool(
4956 VkDevice device,
4957 VkCommandPool commandPool,
4958 VkCommandPoolResetFlags flags,
4959 VkResult result)
4960{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004961
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004962
4963
4964 if(result < VK_SUCCESS)
4965 {
4966 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4967 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004968 return false;
4969 }
4970
4971 return true;
4972}
4973
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004974VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
4975 VkDevice device,
4976 VkCommandPool commandPool,
4977 VkCommandPoolResetFlags flags)
4978{
4979 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004980
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004981 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004982
4983 return result;
4984}
4985
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07004986bool PreCreateCommandBuffer(
4987 VkDevice device,
4988 const VkCommandBufferAllocateInfo* pCreateInfo)
4989{
4990 if(pCreateInfo != nullptr)
4991 {
4992 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
4993 {
4994 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
4995 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4996 return false;
4997 }
4998 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4999 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
5000 {
5001 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5002 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
5003 return false;
5004 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005005 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005006
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005007 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005008}
5009
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005010bool PostCreateCommandBuffer(
5011 VkDevice device,
5012 VkCommandBuffer* pCommandBuffer,
5013 VkResult result)
5014{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005015
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005016 if(pCommandBuffer != nullptr)
5017 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005018 }
5019
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005020 if(result < VK_SUCCESS)
5021 {
5022 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
5023 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005024 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005025 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005026
5027 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028}
5029
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005030VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
5031 VkDevice device,
5032 const VkCommandBufferAllocateInfo* pCreateInfo,
5033 VkCommandBuffer* pCommandBuffer)
5034{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005035 PreCreateCommandBuffer(device, pCreateInfo);
5036
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005037 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005038
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005039 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005040
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005041 return result;
5042}
5043
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005044bool PreBeginCommandBuffer(
5045 VkCommandBuffer commandBuffer,
5046 const VkCommandBufferBeginInfo* pBeginInfo)
5047{
5048 if(pBeginInfo != nullptr)
5049 {
5050 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
5051 {
5052 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5053 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
5054 return false;
5055 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005057
5058 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005059}
5060
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005061bool PostBeginCommandBuffer(
5062 VkCommandBuffer commandBuffer,
5063 VkResult result)
5064{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005065
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005066 if(result < VK_SUCCESS)
5067 {
5068 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
5069 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005070 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005072
5073 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005074}
5075
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005076VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
5077 VkCommandBuffer commandBuffer,
5078 const VkCommandBufferBeginInfo* pBeginInfo)
5079{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005080 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005081
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005082 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005085
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005086 return result;
5087}
5088
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005089bool PostEndCommandBuffer(
5090 VkCommandBuffer commandBuffer,
5091 VkResult result)
5092{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005093
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005094 if(result < VK_SUCCESS)
5095 {
5096 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
5097 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005098 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005099 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005100
5101 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005102}
5103
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005104VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
5105 VkCommandBuffer commandBuffer)
5106{
5107 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005108
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005109 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005110
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005111 return result;
5112}
5113
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005114bool PostResetCommandBuffer(
5115 VkCommandBuffer commandBuffer,
5116 VkCommandBufferResetFlags flags,
5117 VkResult result)
5118{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005119
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005120
5121 if(result < VK_SUCCESS)
5122 {
5123 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
5124 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005126 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005127
5128 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005129}
5130
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005131VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
5132 VkCommandBuffer commandBuffer,
5133 VkCommandBufferResetFlags flags)
5134{
5135 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005136
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005137 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005139 return result;
5140}
5141
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005142bool PostCmdBindPipeline(
5143 VkCommandBuffer commandBuffer,
5144 VkPipelineBindPoint pipelineBindPoint,
5145 VkPipeline pipeline)
5146{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005147
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005148 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5149 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5150 {
5151 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5152 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005153 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005154 }
5155
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005157 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005158}
5159
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005160VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
5161 VkCommandBuffer commandBuffer,
5162 VkPipelineBindPoint pipelineBindPoint,
5163 VkPipeline pipeline)
5164{
5165 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005166
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168}
5169
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005170VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports)
5171{
5172 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005173}
5174
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005175VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors)
5176{
5177 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005178}
5179
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005180VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
5181{
5182 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183}
5184
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005185VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
5186{
5187 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188}
5189
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005190VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
5191{
5192 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005193}
5194
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005195VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
5196{
5197 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005198}
5199
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005200VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
5201{
5202 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203}
5204
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005205VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
5206{
5207 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005208}
5209
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005210VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
5211{
5212 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005213}
5214
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005215bool PreCmdBindDescriptorSets(
5216 VkCommandBuffer commandBuffer,
5217 const VkDescriptorSet* pDescriptorSets,
5218 const uint32_t* pDynamicOffsets)
5219{
5220 if(pDescriptorSets != nullptr)
5221 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005223
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005224 if(pDynamicOffsets != nullptr)
5225 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005226 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005227
5228 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005229}
5230
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005231bool PostCmdBindDescriptorSets(
5232 VkCommandBuffer commandBuffer,
5233 VkPipelineBindPoint pipelineBindPoint,
5234 VkPipelineLayout layout,
5235 uint32_t firstSet,
5236 uint32_t setCount,
5237 uint32_t dynamicOffsetCount)
5238{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005239
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005240 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5241 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5242 {
5243 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5244 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005245 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005246 }
5247
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005248
5249
5250
5251
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005252 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253}
5254
Chia-I Wu9ab61502015-11-06 06:42:02 +08005255VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005256 VkCommandBuffer commandBuffer,
5257 VkPipelineBindPoint pipelineBindPoint,
5258 VkPipelineLayout layout,
5259 uint32_t firstSet,
5260 uint32_t setCount,
5261 const VkDescriptorSet* pDescriptorSets,
5262 uint32_t dynamicOffsetCount,
5263 const uint32_t* pDynamicOffsets)
5264{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005265 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005266
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005267 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005268
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005269 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005270}
5271
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005272bool PostCmdBindIndexBuffer(
5273 VkCommandBuffer commandBuffer,
5274 VkBuffer buffer,
5275 VkDeviceSize offset,
5276 VkIndexType indexType)
5277{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005278
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005279
5280
5281 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5282 indexType > VK_INDEX_TYPE_END_RANGE)
5283 {
5284 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5285 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005286 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005287 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005288
5289 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290}
5291
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005292VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
5293 VkCommandBuffer commandBuffer,
5294 VkBuffer buffer,
5295 VkDeviceSize offset,
5296 VkIndexType indexType)
5297{
5298 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005299
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005300 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005301}
5302
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005303bool PreCmdBindVertexBuffers(
5304 VkCommandBuffer commandBuffer,
5305 const VkBuffer* pBuffers,
5306 const VkDeviceSize* pOffsets)
5307{
5308 if(pBuffers != nullptr)
5309 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 }
5311
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005312 if(pOffsets != nullptr)
5313 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005314 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005315
5316 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317}
5318
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005319bool PostCmdBindVertexBuffers(
5320 VkCommandBuffer commandBuffer,
5321 uint32_t firstBinding,
5322 uint32_t bindingCount)
5323{
5324
5325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005326
5327 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005328}
5329
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005330VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
5331 VkCommandBuffer commandBuffer,
5332 uint32_t firstBinding,
5333 uint32_t bindingCount,
5334 const VkBuffer* pBuffers,
5335 const VkDeviceSize* pOffsets)
5336{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005337 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005338
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005339 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005340
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005341 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005342}
5343
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005344bool PreCmdDraw(
5345 VkCommandBuffer commandBuffer,
5346 uint32_t vertexCount,
5347 uint32_t instanceCount,
5348 uint32_t firstVertex,
5349 uint32_t firstInstance)
5350{
Michael Lentine55a913f2015-11-24 09:48:23 -06005351 if (vertexCount == 0) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005352 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005353 // this an error or leave as is.
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005354 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5355 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
Michael Lentine55a913f2015-11-24 09:48:23 -06005356 return false;
5357 }
5358
5359 if (instanceCount == 0) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005360 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005361 // this an error or leave as is.
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005362 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5363 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
Michael Lentine55a913f2015-11-24 09:48:23 -06005364 return false;
5365 }
5366
5367 return true;
5368}
5369
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005370bool PostCmdDraw(
5371 VkCommandBuffer commandBuffer,
5372 uint32_t firstVertex,
5373 uint32_t vertexCount,
5374 uint32_t firstInstance,
5375 uint32_t instanceCount)
5376{
5377
5378
5379
5380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005381
5382 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005383}
5384
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005385VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
5386 VkCommandBuffer commandBuffer,
5387 uint32_t vertexCount,
5388 uint32_t instanceCount,
5389 uint32_t firstVertex,
5390 uint32_t firstInstance)
5391{
5392 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Michael Lentine55a913f2015-11-24 09:48:23 -06005393
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005394 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005396 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005397}
5398
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005399bool PostCmdDrawIndexed(
5400 VkCommandBuffer commandBuffer,
5401 uint32_t firstIndex,
5402 uint32_t indexCount,
5403 int32_t vertexOffset,
5404 uint32_t firstInstance,
5405 uint32_t instanceCount)
5406{
5407
5408
5409
5410
5411
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005412
5413 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005414}
5415
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005416VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
5417 VkCommandBuffer commandBuffer,
5418 uint32_t indexCount,
5419 uint32_t instanceCount,
5420 uint32_t firstIndex,
5421 int32_t vertexOffset,
5422 uint32_t firstInstance)
5423{
5424 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005426 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005427}
5428
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005429bool PostCmdDrawIndirect(
5430 VkCommandBuffer commandBuffer,
5431 VkBuffer buffer,
5432 VkDeviceSize offset,
5433 uint32_t count,
5434 uint32_t stride)
5435{
5436
5437
5438
5439
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005440
5441 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442}
5443
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005444VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
5445 VkCommandBuffer commandBuffer,
5446 VkBuffer buffer,
5447 VkDeviceSize offset,
5448 uint32_t count,
5449 uint32_t stride)
5450{
5451 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005453 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454}
5455
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005456bool PostCmdDrawIndexedIndirect(
5457 VkCommandBuffer commandBuffer,
5458 VkBuffer buffer,
5459 VkDeviceSize offset,
5460 uint32_t count,
5461 uint32_t stride)
5462{
5463
5464
5465
5466
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005467
5468 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005469}
5470
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005471VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
5472 VkCommandBuffer commandBuffer,
5473 VkBuffer buffer,
5474 VkDeviceSize offset,
5475 uint32_t count,
5476 uint32_t stride)
5477{
5478 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005479
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005480 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481}
5482
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005483bool PostCmdDispatch(
5484 VkCommandBuffer commandBuffer,
5485 uint32_t x,
5486 uint32_t y,
5487 uint32_t z)
5488{
5489
5490
5491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005492
5493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494}
5495
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005496VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
5497 VkCommandBuffer commandBuffer,
5498 uint32_t x,
5499 uint32_t y,
5500 uint32_t z)
5501{
5502 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005503
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005504 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005505}
5506
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005507bool PostCmdDispatchIndirect(
5508 VkCommandBuffer commandBuffer,
5509 VkBuffer buffer,
5510 VkDeviceSize offset)
5511{
5512
5513
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005514
5515 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005516}
5517
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005518VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
5519 VkCommandBuffer commandBuffer,
5520 VkBuffer buffer,
5521 VkDeviceSize offset)
5522{
5523 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005525 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005526}
5527
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005528bool PreCmdCopyBuffer(
5529 VkCommandBuffer commandBuffer,
5530 const VkBufferCopy* pRegions)
5531{
5532 if(pRegions != nullptr)
5533 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005535
5536 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537}
5538
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005539bool PostCmdCopyBuffer(
5540 VkCommandBuffer commandBuffer,
5541 VkBuffer srcBuffer,
5542 VkBuffer dstBuffer,
5543 uint32_t regionCount)
5544{
5545
5546
5547
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548
5549 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550}
5551
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005552VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
5553 VkCommandBuffer commandBuffer,
5554 VkBuffer srcBuffer,
5555 VkBuffer dstBuffer,
5556 uint32_t regionCount,
5557 const VkBufferCopy* pRegions)
5558{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005559 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005560
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005561 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005563 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564}
5565
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005566bool PreCmdCopyImage(
5567 VkCommandBuffer commandBuffer,
5568 const VkImageCopy* pRegions)
5569{
5570 if(pRegions != nullptr)
5571 {
5572 if ((pRegions->srcSubresource.aspectMask &
5573 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5574 {
5575 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5576 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
5577 return false;
5578 }
5579 if ((pRegions->dstSubresource.aspectMask &
5580 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5581 {
5582 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5583 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
5584 return false;
5585 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005586 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005587
5588 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589}
5590
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005591bool PostCmdCopyImage(
5592 VkCommandBuffer commandBuffer,
5593 VkImage srcImage,
5594 VkImageLayout srcImageLayout,
5595 VkImage dstImage,
5596 VkImageLayout dstImageLayout,
5597 uint32_t regionCount)
5598{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005599 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005600 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5601 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5602 {
5603 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5604 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005605 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 }
5607
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005608
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005609 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005610 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5611 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5612 {
5613 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5614 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005615 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616 }
5617
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005618
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005619 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620}
5621
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005622VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
5623 VkCommandBuffer commandBuffer,
5624 VkImage srcImage,
5625 VkImageLayout srcImageLayout,
5626 VkImage dstImage,
5627 VkImageLayout dstImageLayout,
5628 uint32_t regionCount,
5629 const VkImageCopy* pRegions)
5630{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005631 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005632
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005633 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005635 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636}
5637
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005638bool PreCmdBlitImage(
5639 VkCommandBuffer commandBuffer,
5640 const VkImageBlit* pRegions)
5641{
5642 if(pRegions != nullptr)
5643 {
5644 if ((pRegions->srcSubresource.aspectMask &
5645 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5646 {
5647 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5648 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
5649 return false;
5650 }
5651 if ((pRegions->dstSubresource.aspectMask &
5652 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5653 {
5654 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5655 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
5656 return false;
5657 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005658 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005659
5660 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661}
5662
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005663bool PostCmdBlitImage(
5664 VkCommandBuffer commandBuffer,
5665 VkImage srcImage,
5666 VkImageLayout srcImageLayout,
5667 VkImage dstImage,
5668 VkImageLayout dstImageLayout,
5669 uint32_t regionCount,
5670 VkFilter filter)
5671{
5672
Jeremy Hayes99a96322015-06-26 12:48:09 -06005673
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005674 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005675 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5676 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5677 {
5678 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5679 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005680 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005681 }
5682
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005683
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005684 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005685 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5686 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5687 {
5688 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5689 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005690 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 }
5692
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005693
5694 if(filter < VK_FILTER_BEGIN_RANGE ||
5695 filter > VK_FILTER_END_RANGE)
5696 {
5697 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5698 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005699 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005701
5702 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005703}
5704
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005705VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
5706 VkCommandBuffer commandBuffer,
5707 VkImage srcImage,
5708 VkImageLayout srcImageLayout,
5709 VkImage dstImage,
5710 VkImageLayout dstImageLayout,
5711 uint32_t regionCount,
5712 const VkImageBlit* pRegions,
5713 VkFilter filter)
5714{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005715 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005716
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005717 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005718
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005719 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720}
5721
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005722bool PreCmdCopyBufferToImage(
5723 VkCommandBuffer commandBuffer,
5724 const VkBufferImageCopy* pRegions)
5725{
5726 if(pRegions != nullptr)
5727 {
5728 if ((pRegions->imageSubresource.aspectMask &
5729 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5730 {
5731 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5732 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
5733 return false;
5734 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005735 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736
5737 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738}
5739
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005740bool PostCmdCopyBufferToImage(
5741 VkCommandBuffer commandBuffer,
5742 VkBuffer srcBuffer,
5743 VkImage dstImage,
5744 VkImageLayout dstImageLayout,
5745 uint32_t regionCount)
5746{
5747
5748
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005750 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005751 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5752 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5753 {
5754 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5755 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005756 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005757 }
5758
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005759
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005760 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761}
5762
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005763VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
5764 VkCommandBuffer commandBuffer,
5765 VkBuffer srcBuffer,
5766 VkImage dstImage,
5767 VkImageLayout dstImageLayout,
5768 uint32_t regionCount,
5769 const VkBufferImageCopy* pRegions)
5770{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005771 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005772
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005773 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005774
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005775 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776}
5777
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005778bool PreCmdCopyImageToBuffer(
5779 VkCommandBuffer commandBuffer,
5780 const VkBufferImageCopy* pRegions)
5781{
5782 if(pRegions != nullptr)
5783 {
5784 if ((pRegions->imageSubresource.aspectMask &
5785 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
5786 {
5787 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5788 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
5789 return false;
5790 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005791 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005792
5793 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005794}
5795
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005796bool PostCmdCopyImageToBuffer(
5797 VkCommandBuffer commandBuffer,
5798 VkImage srcImage,
5799 VkImageLayout srcImageLayout,
5800 VkBuffer dstBuffer,
5801 uint32_t regionCount)
5802{
5803
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005805 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005806 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5807 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5808 {
5809 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5810 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005811 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005812 }
5813
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005814
5815
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005816 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817}
5818
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005819VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
5820 VkCommandBuffer commandBuffer,
5821 VkImage srcImage,
5822 VkImageLayout srcImageLayout,
5823 VkBuffer dstBuffer,
5824 uint32_t regionCount,
5825 const VkBufferImageCopy* pRegions)
5826{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005827 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005828
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005829 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005831 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832}
5833
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005834bool PreCmdUpdateBuffer(
5835 VkCommandBuffer commandBuffer,
5836 const uint32_t* pData)
5837{
5838 if(pData != nullptr)
5839 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005841
5842 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843}
5844
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005845bool PostCmdUpdateBuffer(
5846 VkCommandBuffer commandBuffer,
5847 VkBuffer dstBuffer,
5848 VkDeviceSize dstOffset,
5849 VkDeviceSize dataSize)
5850{
5851
5852
5853
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005854
5855 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005856}
5857
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005858VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
5859 VkCommandBuffer commandBuffer,
5860 VkBuffer dstBuffer,
5861 VkDeviceSize dstOffset,
5862 VkDeviceSize dataSize,
5863 const uint32_t* pData)
5864{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005865 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005866
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005867 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005869 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870}
5871
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005872bool PostCmdFillBuffer(
5873 VkCommandBuffer commandBuffer,
5874 VkBuffer dstBuffer,
5875 VkDeviceSize dstOffset,
5876 VkDeviceSize size,
5877 uint32_t data)
5878{
5879
5880
5881
5882
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005883
5884 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005885}
5886
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005887VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
5888 VkCommandBuffer commandBuffer,
5889 VkBuffer dstBuffer,
5890 VkDeviceSize dstOffset,
5891 VkDeviceSize size,
5892 uint32_t data)
5893{
5894 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005896 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897}
5898
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005899bool PreCmdClearColorImage(
5900 VkCommandBuffer commandBuffer,
5901 const VkClearColorValue* pColor,
5902 const VkImageSubresourceRange* pRanges)
5903{
5904 if(pColor != nullptr)
5905 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005906 }
5907
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005908 if(pRanges != nullptr)
5909 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005910 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005911 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005912
5913 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914}
5915
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005916bool PostCmdClearColorImage(
5917 VkCommandBuffer commandBuffer,
5918 VkImage image,
5919 VkImageLayout imageLayout,
5920 uint32_t rangeCount)
5921{
5922
Jeremy Hayes99a96322015-06-26 12:48:09 -06005923
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005924 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005925 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5926 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5927 {
5928 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5929 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005930 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931 }
5932
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005933
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005934 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935}
5936
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005937VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
5938 VkCommandBuffer commandBuffer,
5939 VkImage image,
5940 VkImageLayout imageLayout,
5941 const VkClearColorValue* pColor,
5942 uint32_t rangeCount,
5943 const VkImageSubresourceRange* pRanges)
5944{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005945 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005947 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005948
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005949 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005950}
5951
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005952bool PreCmdClearDepthStencilImage(
5953 VkCommandBuffer commandBuffer,
5954 const VkImageSubresourceRange* pRanges)
5955{
5956 if(pRanges != nullptr)
5957 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005958 /*
5959 * TODO: How do we validation pRanges->aspectMask?
5960 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5961 * VK_IMAGE_ASPECT_STENCIL_BIT.
5962 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005963 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005964
5965 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966}
5967
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005968bool PostCmdClearDepthStencilImage(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005969 VkCommandBuffer commandBuffer,
5970 VkImage image,
5971 VkImageLayout imageLayout,
5972 const VkClearDepthStencilValue* pDepthStencil,
5973 uint32_t rangeCount)
5974{
5975
Jeremy Hayes99a96322015-06-26 12:48:09 -06005976
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005977 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005978 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5979 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
5980 {
5981 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
5982 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984 }
5985
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005986
5987
5988
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005989 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990}
5991
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07005992VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
5993 VkCommandBuffer commandBuffer,
5994 VkImage image,
5995 VkImageLayout imageLayout,
5996 const VkClearDepthStencilValue* pDepthStencil,
5997 uint32_t rangeCount,
5998 const VkImageSubresourceRange* pRanges)
5999{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006001
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006002 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006004 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005}
6006
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006007bool PreCmdClearAttachments(
6008 VkCommandBuffer commandBuffer,
6009 const VkClearColorValue* pColor,
6010 const VkClearRect* pRects)
6011{
6012 if(pColor != nullptr)
6013 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006014 }
6015
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006016 if(pRects != nullptr)
6017 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006018 }
6019
6020 return true;
6021}
6022
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006023VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
6024 VkCommandBuffer commandBuffer,
6025 uint32_t attachmentCount,
6026 const VkClearAttachment* pAttachments,
6027 uint32_t rectCount,
6028 const VkClearRect* pRects)
6029{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006030 for (uint32_t i = 0; i < attachmentCount; i++) {
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006031 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006032 }
6033
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006034 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035}
6036
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006037bool PreCmdResolveImage(
6038 VkCommandBuffer commandBuffer,
6039 const VkImageResolve* pRegions)
6040{
6041 if(pRegions != nullptr)
6042 {
6043 if ((pRegions->srcSubresource.aspectMask &
6044 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
6045 {
6046 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6047 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
6048 return false;
6049 }
6050 if ((pRegions->dstSubresource.aspectMask &
6051 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
6052 {
6053 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6054 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
6055 return false;
6056 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006057 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006058
6059 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060}
6061
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006062bool PostCmdResolveImage(
6063 VkCommandBuffer commandBuffer,
6064 VkImage srcImage,
6065 VkImageLayout srcImageLayout,
6066 VkImage dstImage,
6067 VkImageLayout dstImageLayout,
6068 uint32_t regionCount)
6069{
6070
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006072 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006073 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6074 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
6075 {
6076 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6077 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006078 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079 }
6080
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006081
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07006082 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006083 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
6084 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
6085 {
6086 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6087 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089 }
6090
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006091
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093}
6094
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006095VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
6096 VkCommandBuffer commandBuffer,
6097 VkImage srcImage,
6098 VkImageLayout srcImageLayout,
6099 VkImage dstImage,
6100 VkImageLayout dstImageLayout,
6101 uint32_t regionCount,
6102 const VkImageResolve* pRegions)
6103{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006104 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006105
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006106 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006108 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109}
6110
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006111bool PostCmdSetEvent(
6112 VkCommandBuffer commandBuffer,
6113 VkEvent event,
6114 VkPipelineStageFlags stageMask)
6115{
6116
6117
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006118
6119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120}
6121
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006122VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
6123 VkCommandBuffer commandBuffer,
6124 VkEvent event,
6125 VkPipelineStageFlags stageMask)
6126{
6127 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006129 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130}
6131
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006132bool PostCmdResetEvent(
6133 VkCommandBuffer commandBuffer,
6134 VkEvent event,
6135 VkPipelineStageFlags stageMask)
6136{
6137
6138
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006139
6140 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141}
6142
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006143VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
6144 VkCommandBuffer commandBuffer,
6145 VkEvent event,
6146 VkPipelineStageFlags stageMask)
6147{
6148 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006150 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006151}
6152
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006153bool PreCmdWaitEvents(
6154 VkCommandBuffer commandBuffer,
6155 const VkEvent* pEvents,
6156 uint32_t memoryBarrierCount,
6157 const VkMemoryBarrier *pMemoryBarriers,
6158 uint32_t bufferMemoryBarrierCount,
6159 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6160 uint32_t imageMemoryBarrierCount,
6161 const VkImageMemoryBarrier *pImageMemoryBarriers)
6162{
6163 if(pEvents != nullptr)
6164 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006165 }
6166
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006167 if(pMemoryBarriers != nullptr)
6168 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006170
6171 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006172}
6173
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006174bool PostCmdWaitEvents(
6175 VkCommandBuffer commandBuffer,
6176 uint32_t eventCount,
6177 VkPipelineStageFlags srcStageMask,
6178 VkPipelineStageFlags dstStageMask,
6179 uint32_t memoryBarrierCount)
6180{
6181
6182
6183
6184
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006185
6186 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187}
6188
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006189VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
6190 VkCommandBuffer commandBuffer,
6191 uint32_t eventCount,
6192 const VkEvent *pEvents,
6193 VkPipelineStageFlags srcStageMask,
6194 VkPipelineStageFlags dstStageMask,
6195 uint32_t memoryBarrierCount,
6196 const VkMemoryBarrier *pMemoryBarriers,
6197 uint32_t bufferMemoryBarrierCount,
6198 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6199 uint32_t imageMemoryBarrierCount,
6200 const VkImageMemoryBarrier *pImageMemoryBarriers)
6201{
6202 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006203
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006204 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006205
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006206 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006209bool PreCmdPipelineBarrier(
6210 VkCommandBuffer commandBuffer,
6211 uint32_t memoryBarrierCount,
6212 const VkMemoryBarrier *pMemoryBarriers,
6213 uint32_t bufferMemoryBarrierCount,
6214 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6215 uint32_t imageMemoryBarrierCount,
6216 const VkImageMemoryBarrier *pImageMemoryBarriers)
6217{
6218 if(pMemoryBarriers != nullptr)
6219 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006221
6222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223}
6224
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006225bool PostCmdPipelineBarrier(
6226 VkCommandBuffer commandBuffer,
6227 VkPipelineStageFlags srcStageMask,
6228 VkPipelineStageFlags dstStageMask,
6229 VkDependencyFlags dependencyFlags,
6230 uint32_t memoryBarrierCount)
6231{
6232
6233
6234
6235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006236
6237 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238}
6239
Chia-I Wu9ab61502015-11-06 06:42:02 +08006240VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006241 VkCommandBuffer commandBuffer,
6242 VkPipelineStageFlags srcStageMask,
6243 VkPipelineStageFlags dstStageMask,
6244 VkDependencyFlags dependencyFlags,
6245 uint32_t memoryBarrierCount,
6246 const VkMemoryBarrier *pMemoryBarriers,
6247 uint32_t bufferMemoryBarrierCount,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006248 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006249 uint32_t imageMemoryBarrierCount,
6250 const VkImageMemoryBarrier *pImageMemoryBarriers)
6251{
6252 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006253
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006254 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006256 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257}
6258
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006259bool PostCmdBeginQuery(
6260 VkCommandBuffer commandBuffer,
6261 VkQueryPool queryPool,
6262 uint32_t slot,
6263 VkQueryControlFlags flags)
6264{
6265
6266
6267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006268
6269 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270}
6271
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006272VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
6273 VkCommandBuffer commandBuffer,
6274 VkQueryPool queryPool,
6275 uint32_t slot,
6276 VkQueryControlFlags flags)
6277{
6278 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006279
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006280 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281}
6282
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006283bool PostCmdEndQuery(
6284 VkCommandBuffer commandBuffer,
6285 VkQueryPool queryPool,
6286 uint32_t slot)
6287{
6288
6289
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006290
6291 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006292}
6293
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006294VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
6295 VkCommandBuffer commandBuffer,
6296 VkQueryPool queryPool,
6297 uint32_t slot)
6298{
6299 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006301 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006302}
6303
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006304bool PostCmdResetQueryPool(
6305 VkCommandBuffer commandBuffer,
6306 VkQueryPool queryPool,
6307 uint32_t firstQuery,
6308 uint32_t queryCount)
6309{
6310
6311
6312
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006313
6314 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006315}
6316
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006317VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
6318 VkCommandBuffer commandBuffer,
6319 VkQueryPool queryPool,
6320 uint32_t firstQuery,
6321 uint32_t queryCount)
6322{
6323 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006324
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006325 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006326}
6327
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006328bool PostCmdWriteTimestamp(
6329 VkCommandBuffer commandBuffer,
6330 VkPipelineStageFlagBits pipelineStage,
6331 VkQueryPool queryPool,
6332 uint32_t slot)
6333{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006334
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006335 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006336
6337 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338}
6339
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006340VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
6341 VkCommandBuffer commandBuffer,
6342 VkPipelineStageFlagBits pipelineStage,
6343 VkQueryPool queryPool,
6344 uint32_t slot)
6345{
6346 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006347
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006348 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006349}
6350
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006351bool PostCmdCopyQueryPoolResults(
6352 VkCommandBuffer commandBuffer,
6353 VkQueryPool queryPool,
6354 uint32_t firstQuery,
6355 uint32_t queryCount,
6356 VkBuffer dstBuffer,
6357 VkDeviceSize dstOffset,
6358 VkDeviceSize stride,
6359 VkQueryResultFlags flags)
6360{
6361
6362
6363
6364
6365
6366
6367
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006368
6369 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006370}
6371
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006372VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
6373 VkCommandBuffer commandBuffer,
6374 VkQueryPool queryPool,
6375 uint32_t firstQuery,
6376 uint32_t queryCount,
6377 VkBuffer dstBuffer,
6378 VkDeviceSize dstOffset,
6379 VkDeviceSize stride,
6380 VkQueryResultFlags flags)
6381{
6382 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006384 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006385}
6386
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006387bool PreCmdPushConstants(
6388 VkCommandBuffer commandBuffer,
6389 const void* pValues)
6390{
6391 if(pValues != nullptr)
6392 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006393 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006394
6395 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006396}
6397
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006398bool PostCmdPushConstants(
6399 VkCommandBuffer commandBuffer,
6400 VkPipelineLayout layout,
6401 VkShaderStageFlags stageFlags,
6402 uint32_t offset,
6403 uint32_t size)
6404{
6405
6406
6407
6408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006409
6410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006411}
6412
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
6414 VkCommandBuffer commandBuffer,
6415 VkPipelineLayout layout,
6416 VkShaderStageFlags stageFlags,
6417 uint32_t offset,
6418 uint32_t size,
6419 const void* pValues)
6420{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006421 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006422
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006423 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006425 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006426}
6427
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006428bool PreCmdBeginRenderPass(
6429 VkCommandBuffer commandBuffer,
6430 const VkRenderPassBeginInfo* pRenderPassBegin)
6431{
6432 if(pRenderPassBegin != nullptr)
6433 {
6434 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
6435 {
6436 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6437 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
6438 return false;
6439 }
6440 if(pRenderPassBegin->pClearValues != nullptr)
6441 {
6442 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006443 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006444
6445 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006446}
6447
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006448bool PostCmdBeginRenderPass(
6449 VkCommandBuffer commandBuffer,
6450 VkSubpassContents contents)
6451{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006453 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6454 contents > VK_SUBPASS_CONTENTS_END_RANGE)
6455 {
6456 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6457 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006458 return false;
6459 }
6460
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006461 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006462}
6463
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006464VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
6465 VkCommandBuffer commandBuffer,
6466 const VkRenderPassBeginInfo* pRenderPassBegin,
6467 VkSubpassContents contents)
6468{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006469 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006470
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006471 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006473 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006474}
6475
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006476bool PostCmdNextSubpass(
6477 VkCommandBuffer commandBuffer,
6478 VkSubpassContents contents)
6479{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006480
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006481 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6482 contents > VK_SUBPASS_CONTENTS_END_RANGE)
6483 {
6484 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
6485 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006486 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006487 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006488
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006489 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006490}
6491
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006492VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
6493 VkCommandBuffer commandBuffer,
6494 VkSubpassContents contents)
6495{
6496 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006497
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006498 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006499}
6500
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006501bool PostCmdEndRenderPass(
6502 VkCommandBuffer commandBuffer)
6503{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006504
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006505 return true;
6506}
6507
6508VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
6509 VkCommandBuffer commandBuffer)
6510{
6511 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006512
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006513 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006514}
6515
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006516bool PreCmdExecuteCommands(
6517 VkCommandBuffer commandBuffer,
6518 const VkCommandBuffer* pCommandBuffers)
6519{
6520 if(pCommandBuffers != nullptr)
6521 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006522 }
6523
6524 return true;
6525}
6526
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006527bool PostCmdExecuteCommands(
6528 VkCommandBuffer commandBuffer,
6529 uint32_t commandBuffersCount)
6530{
6531
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006532
6533 return true;
6534}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006535
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006536VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
6537 VkCommandBuffer commandBuffer,
6538 uint32_t commandBuffersCount,
6539 const VkCommandBuffer* pCommandBuffers)
6540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006541 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006542
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006543 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006544
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006545 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006546}
6547
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006548VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
6549{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006550 if (!strcmp(funcName, "vkGetDeviceProcAddr"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006551 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkDestroyDevice"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006553 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkGetDeviceQueue"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006555 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkQueueSubmit"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006557 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkQueueWaitIdle"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006559 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006561 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006562 if (!strcmp(funcName, "vkAllocateMemory"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006563 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkMapMemory"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006565 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006567 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006569 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCreateFence"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006571 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkResetFences"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006573 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkGetFenceStatus"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006575 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkWaitForFences"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006577 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCreateSemaphore"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006579 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCreateEvent"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006581 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkGetEventStatus"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006583 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkSetEvent"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006585 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkResetEvent"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006587 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCreateQueryPool"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006589 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006591 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCreateBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006593 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkCreateBufferView"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006595 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkCreateImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006597 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006599 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkCreateImageView"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006601 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006602 if (!strcmp(funcName, "vkCreateShaderModule"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006603 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006604 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006605 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006606 if (!strcmp(funcName, "vkCreateComputePipelines"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006607 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006609 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006610 if (!strcmp(funcName, "vkCreateSampler"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006611 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006613 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006615 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 if (!strcmp(funcName, "vkResetDescriptorPool"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006617 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006618 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006619 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006620 if (!strcmp(funcName, "vkCmdSetViewport"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006621 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006622 if (!strcmp(funcName, "vkCmdSetScissor"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006623 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006624 if (!strcmp(funcName, "vkCmdSetLineWidth"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006625 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006626 if (!strcmp(funcName, "vkCmdSetDepthBias"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006627 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006628 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006629 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006630 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006631 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006632 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006633 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006634 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006635 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006636 if (!strcmp(funcName, "vkCmdSetStencilReference"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006637 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006638 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006639 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006641 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006642 if (!strcmp(funcName, "vkEndCommandBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006643 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006644 if (!strcmp(funcName, "vkResetCommandBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006645 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006646 if (!strcmp(funcName, "vkCmdBindPipeline"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006647 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006648 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006649 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006650 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006651 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006652 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006653 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006654 if (!strcmp(funcName, "vkCmdDraw"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006655 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006657 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006658 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006659 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006660 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006661 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006662 if (!strcmp(funcName, "vkCmdDispatch"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006663 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006665 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006666 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006667 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006668 if (!strcmp(funcName, "vkCmdCopyImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006669 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006670 if (!strcmp(funcName, "vkCmdBlitImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006671 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006672 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006673 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006674 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006675 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006676 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006677 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006678 if (!strcmp(funcName, "vkCmdFillBuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006679 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006680 if (!strcmp(funcName, "vkCmdClearColorImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006681 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006682 if (!strcmp(funcName, "vkCmdResolveImage"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006683 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006684 if (!strcmp(funcName, "vkCmdSetEvent"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006685 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686 if (!strcmp(funcName, "vkCmdResetEvent"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006687 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006688 if (!strcmp(funcName, "vkCmdWaitEvents"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006689 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006690 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006691 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006692 if (!strcmp(funcName, "vkCmdBeginQuery"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006693 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006694 if (!strcmp(funcName, "vkCmdEndQuery"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006695 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006697 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006699 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006701 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkCreateFramebuffer"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006703 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkCreateRenderPass"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006705 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006707 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006708 if (!strcmp(funcName, "vkCmdNextSubpass"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006709 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006710
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006711 if (device == NULL) {
6712 return NULL;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006713 }
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006714
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006715 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006716 return NULL;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006717 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006718}
6719
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006720VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
6721{
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006722 if (!strcmp(funcName, "vkGetInstanceProcAddr"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006723 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkCreateInstance"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006725 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkDestroyInstance"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006727 return (PFN_vkVoidFunction) vkDestroyInstance;
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006728 if (!strcmp(funcName, "vkCreateDevice"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006729 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006731 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006733 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006735 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006736 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006737 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006738 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006739 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006740 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006741 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006742 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006743 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006744 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006745 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006746
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006747 if (instance == NULL) {
6748 return NULL;
6749 }
6750
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006751 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
6752 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
6753 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006754 return fptr;
6755
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006756 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
Courtney Goeltzenleuchter00150eb2016-01-08 12:18:43 -07006757 return NULL;
Mark Lobodzinski1ed594e2016-02-03 09:57:14 -07006758 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006759}