blob: 8ea75ff3a7031c6591ae99cad89a59b88c1501d3 [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
Michael Lentine03d8e572015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060035
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060041
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060046
Cody Northrop55443ef2015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050055
Jeremy Hayes99a96322015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060059
Jeremy Hayes99a96322015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060062{
Jeremy Hayes99a96322015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour59a47322015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
173 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600174}
175
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600176VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600177 VkPhysicalDevice physicalDevice,
178 uint32_t* pCount,
179 VkLayerProperties* pProperties)
180{
181 /* ParamChecker's physical device layers are the same as global */
182 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
183 pCount, pProperties);
184}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600185
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600186// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600187
Jeremy Hayes99a96322015-06-26 12:48:09 -0600188static
189std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600190{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600191 switch(enumerator)
192 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600193 case VK_RESULT_MAX_ENUM:
194 {
195 return "VK_RESULT_MAX_ENUM";
196 break;
197 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600198 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600199 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600200 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600201 break;
202 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600203 case VK_ERROR_INCOMPATIBLE_DRIVER:
204 {
205 return "VK_ERROR_INCOMPATIBLE_DRIVER";
206 break;
207 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600208 case VK_ERROR_MEMORY_MAP_FAILED:
209 {
210 return "VK_ERROR_MEMORY_MAP_FAILED";
211 break;
212 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600213 case VK_INCOMPLETE:
214 {
215 return "VK_INCOMPLETE";
216 break;
217 }
218 case VK_ERROR_OUT_OF_HOST_MEMORY:
219 {
220 return "VK_ERROR_OUT_OF_HOST_MEMORY";
221 break;
222 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600223 case VK_ERROR_INITIALIZATION_FAILED:
224 {
225 return "VK_ERROR_INITIALIZATION_FAILED";
226 break;
227 }
228 case VK_NOT_READY:
229 {
230 return "VK_NOT_READY";
231 break;
232 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
234 {
235 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
236 break;
237 }
238 case VK_EVENT_SET:
239 {
240 return "VK_EVENT_SET";
241 break;
242 }
243 case VK_TIMEOUT:
244 {
245 return "VK_TIMEOUT";
246 break;
247 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600248 case VK_EVENT_RESET:
249 {
250 return "VK_EVENT_RESET";
251 break;
252 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600253 case VK_UNSUPPORTED:
254 {
255 return "VK_UNSUPPORTED";
256 break;
257 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600258 case VK_SUCCESS:
259 {
260 return "VK_SUCCESS";
261 break;
262 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600263 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600264 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600265 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600266 break;
267 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600268 case VK_ERROR_DEVICE_LOST:
269 {
270 return "VK_ERROR_DEVICE_LOST";
271 break;
272 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600273 default:
274 {
275 return "unrecognized enumerator";
276 break;
277 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600278 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600279}
280
281static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600282bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
283{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600284 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600285 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
286 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
287 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
289 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
290 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
291 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
292 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
293 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600294 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
295 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
296 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600297 if(enumerator & (~allFlags))
298 {
299 return false;
300 }
301
302 return true;
303}
304
305static
306std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
307{
308 if(!ValidateEnumerator(enumerator))
309 {
310 return "unrecognized enumerator";
311 }
312
313 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600314 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
315 {
316 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
317 }
318 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
319 {
320 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
321 }
322 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
323 {
324 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
325 }
326 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
327 {
328 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
329 }
330 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
331 {
332 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
333 }
334 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
335 {
336 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
337 }
338 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
339 {
340 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
341 }
342 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
343 {
344 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
345 }
346 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
347 {
348 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
349 }
350 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
351 {
352 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
353 }
Cody Northrop61d6dd62015-08-18 14:58:29 -0600354 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
355 {
356 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
357 }
358 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
359 {
360 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
361 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600362
363 std::string enumeratorString;
364 for(auto const& string : strings)
365 {
366 enumeratorString += string;
367
368 if(string != strings.back())
369 {
370 enumeratorString += '|';
371 }
372 }
373
374 return enumeratorString;
375}
376
377static
378bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
379{
380 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600381 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600382 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
383 VK_IMAGE_USAGE_STORAGE_BIT |
384 VK_IMAGE_USAGE_SAMPLED_BIT |
385 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
386 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600387 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600388 if(enumerator & (~allFlags))
389 {
390 return false;
391 }
392
393 return true;
394}
395
396static
397std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
398{
399 if(!ValidateEnumerator(enumerator))
400 {
401 return "unrecognized enumerator";
402 }
403
404 std::vector<std::string> strings;
405 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
406 {
407 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
408 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600409 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600410 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600411 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600412 }
413 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
414 {
415 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
416 }
417 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
418 {
419 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
420 }
421 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
422 {
423 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
424 }
425 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
426 {
427 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
428 }
429 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
430 {
431 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
432 }
433 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
434 {
435 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
436 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600437
438 std::string enumeratorString;
439 for(auto const& string : strings)
440 {
441 enumeratorString += string;
442
443 if(string != strings.back())
444 {
445 enumeratorString += '|';
446 }
447 }
448
449 return enumeratorString;
450}
451
452static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600453bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
454{
455 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
456 VK_QUEUE_DMA_BIT |
457 VK_QUEUE_COMPUTE_BIT |
458 VK_QUEUE_SPARSE_MEMMGR_BIT |
459 VK_QUEUE_GRAPHICS_BIT);
460 if(enumerator & (~allFlags))
461 {
462 return false;
463 }
464
465 return true;
466}
467
468static
469std::string EnumeratorString(VkQueueFlagBits const& enumerator)
470{
471 if(!ValidateEnumerator(enumerator))
472 {
473 return "unrecognized enumerator";
474 }
475
476 std::vector<std::string> strings;
477 if(enumerator & VK_QUEUE_EXTENDED_BIT)
478 {
479 strings.push_back("VK_QUEUE_EXTENDED_BIT");
480 }
481 if(enumerator & VK_QUEUE_DMA_BIT)
482 {
483 strings.push_back("VK_QUEUE_DMA_BIT");
484 }
485 if(enumerator & VK_QUEUE_COMPUTE_BIT)
486 {
487 strings.push_back("VK_QUEUE_COMPUTE_BIT");
488 }
489 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
490 {
491 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
492 }
493 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
494 {
495 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
496 }
497
498 std::string enumeratorString;
499 for(auto const& string : strings)
500 {
501 enumeratorString += string;
502
503 if(string != strings.back())
504 {
505 enumeratorString += '|';
506 }
507 }
508
509 return enumeratorString;
510}
511
512static
513bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
514{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600515 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600516 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
517 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
518 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
519 VK_MEMORY_PROPERTY_DEVICE_ONLY);
520 if(enumerator & (~allFlags))
521 {
522 return false;
523 }
524
525 return true;
526}
527
528static
529std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
530{
531 if(!ValidateEnumerator(enumerator))
532 {
533 return "unrecognized enumerator";
534 }
535
536 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600537 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
538 {
539 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
540 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
542 {
543 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
544 }
545 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
546 {
547 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
548 }
549 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
550 {
551 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
552 }
553 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
554 {
555 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
556 }
557
558 std::string enumeratorString;
559 for(auto const& string : strings)
560 {
561 enumeratorString += string;
562
563 if(string != strings.back())
564 {
565 enumeratorString += '|';
566 }
567 }
568
569 return enumeratorString;
570}
571
572static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600573bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600574{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600575 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600576 if(enumerator & (~allFlags))
577 {
578 return false;
579 }
580
581 return true;
582}
583
584static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600585std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600586{
587 if(!ValidateEnumerator(enumerator))
588 {
589 return "unrecognized enumerator";
590 }
591
592 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600593 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600594 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600595 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600596 }
597
598 std::string enumeratorString;
599 for(auto const& string : strings)
600 {
601 enumeratorString += string;
602
603 if(string != strings.back())
604 {
605 enumeratorString += '|';
606 }
607 }
608
609 return enumeratorString;
610}
611
612static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600613bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
614{
615 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
616 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
617 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
618 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600619 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600620 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600621 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600622
623 return true;
624}
625
626static
627std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
628{
629 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600630 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600631 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600632 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600633
634 std::vector<std::string> strings;
635 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600636 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600637 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600638 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600639 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600640 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600641 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600642 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600643 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600644 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600645 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600646 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600647
648 std::string enumeratorString;
649 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600650 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600651 enumeratorString += string;
652
653 if(string != strings.back())
654 {
655 enumeratorString += '|';
656 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600657 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600658
659 return enumeratorString;
660}
661
662static
663bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
664{
665 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
666 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600667 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600668 return false;
669 }
670
671 return true;
672}
673
674static
675std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
676{
677 if(!ValidateEnumerator(enumerator))
678 {
679 return "unrecognized enumerator";
680 }
681
682 std::vector<std::string> strings;
683 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
684 {
685 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
686 }
687
688 std::string enumeratorString;
689 for(auto const& string : strings)
690 {
691 enumeratorString += string;
692
693 if(string != strings.back())
694 {
695 enumeratorString += '|';
696 }
697 }
698
699 return enumeratorString;
700}
701
702static
703bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
704{
705 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
706 if(enumerator & (~allFlags))
707 {
708 return false;
709 }
710
711 return true;
712}
713
714static
715std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
716{
717 if(!ValidateEnumerator(enumerator))
718 {
719 return "unrecognized enumerator";
720 }
721
722 std::vector<std::string> strings;
723 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
724 {
725 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
726 }
727
728 std::string enumeratorString;
729 for(auto const& string : strings)
730 {
731 enumeratorString += string;
732
733 if(string != strings.back())
734 {
735 enumeratorString += '|';
736 }
737 }
738
739 return enumeratorString;
740}
741
742static
743bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
744{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600745 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600756 if(enumerator & (~allFlags))
757 {
758 return false;
759 }
760
761 return true;
762}
763
764static
765std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
766{
767 if(!ValidateEnumerator(enumerator))
768 {
769 return "unrecognized enumerator";
770 }
771
772 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600773 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600774 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600775 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600776 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600777 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600778 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600779 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600780 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600781 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600782 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600783 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600784 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600785 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600786 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600787 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600788 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600789 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600790 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600791 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600792 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600793 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600794 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600795 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600796 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600797 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600798 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600799 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600800 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600801 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600802 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600803 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600804 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600805 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600806 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600807 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600808 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600809 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600810 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600811 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600812 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600813 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600814 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600815 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600816 }
817
818 std::string enumeratorString;
819 for(auto const& string : strings)
820 {
821 enumeratorString += string;
822
823 if(string != strings.back())
824 {
825 enumeratorString += '|';
826 }
827 }
828
829 return enumeratorString;
830}
831
832static
833bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
834{
835 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
836 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
837 VK_QUERY_RESULT_WAIT_BIT |
838 VK_QUERY_RESULT_64_BIT |
839 VK_QUERY_RESULT_DEFAULT);
840 if(enumerator & (~allFlags))
841 {
842 return false;
843 }
844
845 return true;
846}
847
848static
849std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
850{
851 if(!ValidateEnumerator(enumerator))
852 {
853 return "unrecognized enumerator";
854 }
855
856 std::vector<std::string> strings;
857 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
864 }
865 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
866 {
867 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
868 }
869 if(enumerator & VK_QUERY_RESULT_64_BIT)
870 {
871 strings.push_back("VK_QUERY_RESULT_64_BIT");
872 }
873 if(enumerator & VK_QUERY_RESULT_DEFAULT)
874 {
875 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600876 }
877
878 std::string enumeratorString;
879 for(auto const& string : strings)
880 {
881 enumeratorString += string;
882
883 if(string != strings.back())
884 {
885 enumeratorString += '|';
886 }
887 }
888
889 return enumeratorString;
890}
891
892static
893bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
894{
895 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
896 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
897 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
898 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
899 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
900 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
901 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
902 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600903 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600904 if(enumerator & (~allFlags))
905 {
906 return false;
907 }
908
909 return true;
910}
911
912static
913std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
914{
915 if(!ValidateEnumerator(enumerator))
916 {
917 return "unrecognized enumerator";
918 }
919
920 std::vector<std::string> strings;
921 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
928 }
929 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
930 {
931 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
932 }
933 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
936 }
937 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
938 {
939 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
940 }
941 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
944 }
945 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
946 {
947 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
948 }
949 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
950 {
951 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
952 }
953 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
954 {
955 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
956 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600957
958 std::string enumeratorString;
959 for(auto const& string : strings)
960 {
961 enumeratorString += string;
962
963 if(string != strings.back())
964 {
965 enumeratorString += '|';
966 }
967 }
968
969 return enumeratorString;
970}
971
972static
973bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
974{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600975 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
976 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600977 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600978 if(enumerator & (~allFlags))
979 {
980 return false;
981 }
982
983 return true;
984}
985
986static
987std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
988{
989 if(!ValidateEnumerator(enumerator))
990 {
991 return "unrecognized enumerator";
992 }
993
994 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600995 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
996 {
997 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
998 }
999 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1000 {
1001 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1002 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001003 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001004 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001005 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001006 }
1007
1008 std::string enumeratorString;
1009 for(auto const& string : strings)
1010 {
1011 enumeratorString += string;
1012
1013 if(string != strings.back())
1014 {
1015 enumeratorString += '|';
1016 }
1017 }
1018
1019 return enumeratorString;
1020}
1021
1022static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1024{
1025 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001026 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1027 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001028 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001029 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001030 if(enumerator & (~allFlags))
1031 {
1032 return false;
1033 }
1034
1035 return true;
1036}
1037
1038static
1039std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1040{
1041 if(!ValidateEnumerator(enumerator))
1042 {
1043 return "unrecognized enumerator";
1044 }
1045
1046 std::vector<std::string> strings;
1047 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1050 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1052 {
1053 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1054 }
1055 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1056 {
1057 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1058 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001059 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1060 {
1061 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1062 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001063 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001064 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001065 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001066 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001067
1068 std::string enumeratorString;
1069 for(auto const& string : strings)
1070 {
1071 enumeratorString += string;
1072
1073 if(string != strings.back())
1074 {
1075 enumeratorString += '|';
1076 }
1077 }
1078
1079 return enumeratorString;
1080}
1081
1082static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001083bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001084{
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001085 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1086 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001087 if(enumerator & (~allFlags))
1088 {
1089 return false;
1090 }
1091
1092 return true;
1093}
1094
1095static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001096std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001097{
1098 if(!ValidateEnumerator(enumerator))
1099 {
1100 return "unrecognized enumerator";
1101 }
1102
1103 std::vector<std::string> strings;
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001104 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001105 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001106 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001107 }
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001108 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001109 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001110 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001111 }
1112
1113 std::string enumeratorString;
1114 for(auto const& string : strings)
1115 {
1116 enumeratorString += string;
1117
1118 if(string != strings.back())
1119 {
1120 enumeratorString += '|';
1121 }
1122 }
1123
1124 return enumeratorString;
1125}
1126
1127static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001128bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1129{
1130 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1131 VK_CHANNEL_B_BIT |
1132 VK_CHANNEL_G_BIT |
1133 VK_CHANNEL_R_BIT);
1134 if(enumerator & (~allFlags))
1135 {
1136 return false;
1137 }
1138
1139 return true;
1140}
1141
1142static
1143std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1144{
1145 if(!ValidateEnumerator(enumerator))
1146 {
1147 return "unrecognized enumerator";
1148 }
1149
1150 std::vector<std::string> strings;
1151 if(enumerator & VK_CHANNEL_A_BIT)
1152 {
1153 strings.push_back("VK_CHANNEL_A_BIT");
1154 }
1155 if(enumerator & VK_CHANNEL_B_BIT)
1156 {
1157 strings.push_back("VK_CHANNEL_B_BIT");
1158 }
1159 if(enumerator & VK_CHANNEL_G_BIT)
1160 {
1161 strings.push_back("VK_CHANNEL_G_BIT");
1162 }
1163 if(enumerator & VK_CHANNEL_R_BIT)
1164 {
1165 strings.push_back("VK_CHANNEL_R_BIT");
1166 }
1167
1168 std::string enumeratorString;
1169 for(auto const& string : strings)
1170 {
1171 enumeratorString += string;
1172
1173 if(string != strings.back())
1174 {
1175 enumeratorString += '|';
1176 }
1177 }
1178
1179 return enumeratorString;
1180}
1181
1182static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001183bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001184{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001185 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1186 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1187 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001188 if(enumerator & (~allFlags))
1189 {
1190 return false;
1191 }
1192
1193 return true;
1194}
1195
1196static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001197std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001198{
1199 if(!ValidateEnumerator(enumerator))
1200 {
1201 return "unrecognized enumerator";
1202 }
1203
1204 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001205 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001206 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001207 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1208 }
1209 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1210 {
1211 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1212 }
1213 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1214 {
1215 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001216 }
1217
1218 std::string enumeratorString;
1219 for(auto const& string : strings)
1220 {
1221 enumeratorString += string;
1222
1223 if(string != strings.back())
1224 {
1225 enumeratorString += '|';
1226 }
1227 }
1228
1229 return enumeratorString;
1230}
1231
1232static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001233bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001234{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001235 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1236 VK_SHADER_STAGE_FRAGMENT_BIT |
1237 VK_SHADER_STAGE_GEOMETRY_BIT |
1238 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001239 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1240 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001241 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001242 if(enumerator & (~allFlags))
1243 {
1244 return false;
1245 }
1246
1247 return true;
1248}
1249
1250static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001251std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001252{
1253 if(!ValidateEnumerator(enumerator))
1254 {
1255 return "unrecognized enumerator";
1256 }
1257
1258 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001259 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001260 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001261 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001262 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001263 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001264 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001265 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001266 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001267 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001268 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001269 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1270 }
1271 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1272 {
1273 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1274 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001275 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001276 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001277 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001278 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001279 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001280 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001281 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001282 }
1283 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1284 {
1285 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001286 }
1287
1288 std::string enumeratorString;
1289 for(auto const& string : strings)
1290 {
1291 enumeratorString += string;
1292
1293 if(string != strings.back())
1294 {
1295 enumeratorString += '|';
1296 }
1297 }
1298
1299 return enumeratorString;
1300}
1301
1302static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001303bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001304{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001305 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1306 VK_PIPELINE_STAGE_HOST_BIT |
1307 VK_PIPELINE_STAGE_TRANSFER_BIT |
1308 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1309 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1310 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001311 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001312 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1314 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1315 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001316 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001317 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1318 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1319 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1320 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001321 if(enumerator & (~allFlags))
1322 {
1323 return false;
1324 }
1325
1326 return true;
1327}
1328
1329static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001330std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001331{
1332 if(!ValidateEnumerator(enumerator))
1333 {
1334 return "unrecognized enumerator";
1335 }
1336
1337 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001338 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001339 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001340 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001341 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001342 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001343 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001344 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001345 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001346 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001347 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001348 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001349 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001350 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001351 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001352 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001353 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001354 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001355 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001356 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001357 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001358 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001359 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001360 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001361 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001362 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001363 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001364 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001365 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001366 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001367 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001368 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001369 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001370 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001371 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001372 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001373 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001374 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001375 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001376 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1377 }
1378 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1379 {
1380 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1381 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001382 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001383 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001384 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001385 }
1386 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1387 {
1388 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1389 }
1390 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1391 {
1392 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1393 }
1394 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1395 {
1396 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1397 }
1398 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1399 {
1400 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001401 }
1402
1403 std::string enumeratorString;
1404 for(auto const& string : strings)
1405 {
1406 enumeratorString += string;
1407
1408 if(string != strings.back())
1409 {
1410 enumeratorString += '|';
1411 }
1412 }
1413
1414 return enumeratorString;
1415}
1416
1417static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001418bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001419{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001420 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1421 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1422 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1423 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1424 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001425 if(enumerator & (~allFlags))
1426 {
1427 return false;
1428 }
1429
1430 return true;
1431}
1432
1433static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001434std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001435{
1436 if(!ValidateEnumerator(enumerator))
1437 {
1438 return "unrecognized enumerator";
1439 }
1440
1441 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001442 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001443 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001444 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001445 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001446 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001447 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001448 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001449 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001450 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001451 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001452 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1453 }
1454 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1455 {
1456 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1457 }
1458 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1459 {
1460 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001461 }
1462
1463 std::string enumeratorString;
1464 for(auto const& string : strings)
1465 {
1466 enumeratorString += string;
1467
1468 if(string != strings.back())
1469 {
1470 enumeratorString += '|';
1471 }
1472 }
1473
1474 return enumeratorString;
1475}
1476
1477static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001478bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001479{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001480 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1481 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1482 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_SHADER_READ_BIT |
1484 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1485 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1486 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1487 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1488 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1489 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001490 if(enumerator & (~allFlags))
1491 {
1492 return false;
1493 }
1494
1495 return true;
1496}
1497
1498static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001499std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001500{
1501 if(!ValidateEnumerator(enumerator))
1502 {
1503 return "unrecognized enumerator";
1504 }
1505
1506 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001507 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001508 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001509 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1510 }
1511 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1512 {
1513 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1514 }
1515 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1516 {
1517 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1518 }
1519 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1520 {
1521 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1522 }
1523 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1524 {
1525 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1534 }
1535 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1536 {
1537 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1538 }
1539 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1540 {
1541 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1542 }
1543 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1544 {
1545 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001546 }
1547
1548 std::string enumeratorString;
1549 for(auto const& string : strings)
1550 {
1551 enumeratorString += string;
1552
1553 if(string != strings.back())
1554 {
1555 enumeratorString += '|';
1556 }
1557 }
1558
1559 return enumeratorString;
1560}
1561
1562static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001563bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001564{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001565 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1566 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001567 if(enumerator & (~allFlags))
1568 {
1569 return false;
1570 }
1571
1572 return true;
1573}
1574
1575static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001576std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001577{
1578 if(!ValidateEnumerator(enumerator))
1579 {
1580 return "unrecognized enumerator";
1581 }
1582
1583 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001584 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001585 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001586 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001587 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001588 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001589 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001590 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001591 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001592
1593 std::string enumeratorString;
1594 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001595 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001596 enumeratorString += string;
1597
1598 if(string != strings.back())
1599 {
1600 enumeratorString += '|';
1601 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001602 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001603
1604 return enumeratorString;
1605}
1606
1607static
1608bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1609{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001610 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001611 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001613 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001614 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001615
1616 return true;
1617}
1618
1619static
1620std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1621{
1622 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001623 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001624 return "unrecognized enumerator";
1625 }
1626
1627 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001628 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001629 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001630 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001631 }
1632
1633 std::string enumeratorString;
1634 for(auto const& string : strings)
1635 {
1636 enumeratorString += string;
1637
1638 if(string != strings.back())
1639 {
1640 enumeratorString += '|';
1641 }
1642 }
1643
1644 return enumeratorString;
1645}
1646
1647static
1648bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1649{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001650 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1651 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001652 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1653 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1654 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1655 if(enumerator & (~allFlags))
1656 {
1657 return false;
1658 }
1659
1660 return true;
1661}
1662
1663static
1664std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1665{
1666 if(!ValidateEnumerator(enumerator))
1667 {
1668 return "unrecognized enumerator";
1669 }
1670
1671 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001672 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1673 {
1674 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1675 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001676 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1677 {
1678 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1679 }
1680 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1681 {
1682 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1683 }
1684 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1685 {
1686 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1687 }
1688 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1689 {
1690 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1691 }
1692
1693 std::string enumeratorString;
1694 for(auto const& string : strings)
1695 {
1696 enumeratorString += string;
1697
1698 if(string != strings.back())
1699 {
1700 enumeratorString += '|';
1701 }
1702 }
1703
1704 return enumeratorString;
1705}
1706
1707static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001708bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001709{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001710 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001711 if(enumerator & (~allFlags))
1712 {
1713 return false;
1714 }
1715
1716 return true;
1717}
1718
1719static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001720std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001721{
1722 if(!ValidateEnumerator(enumerator))
1723 {
1724 return "unrecognized enumerator";
1725 }
1726
1727 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001728 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001729 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001730 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001731 }
1732
1733 std::string enumeratorString;
1734 for(auto const& string : strings)
1735 {
1736 enumeratorString += string;
1737
1738 if(string != strings.back())
1739 {
1740 enumeratorString += '|';
1741 }
1742 }
1743
1744 return enumeratorString;
1745}
1746
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001747static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001748bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001749{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001750 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1751 VK_IMAGE_ASPECT_STENCIL_BIT |
1752 VK_IMAGE_ASPECT_DEPTH_BIT |
1753 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001754 if(enumerator & (~allFlags))
1755 {
1756 return false;
1757 }
1758
1759 return true;
1760}
1761
1762static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001763std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001764{
1765 if(!ValidateEnumerator(enumerator))
1766 {
1767 return "unrecognized enumerator";
1768 }
1769
1770 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001771 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001772 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001773 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1774 }
1775 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1776 {
1777 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1778 }
1779 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1780 {
1781 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1782 }
1783 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1784 {
1785 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1786 }
1787
1788 std::string enumeratorString;
1789 for(auto const& string : strings)
1790 {
1791 enumeratorString += string;
1792
1793 if(string != strings.back())
1794 {
1795 enumeratorString += '|';
1796 }
1797 }
1798
1799 return enumeratorString;
1800}
1801
1802static
1803bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1804{
1805 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1806 if(enumerator & (~allFlags))
1807 {
1808 return false;
1809 }
1810
1811 return true;
1812}
1813
1814static
1815std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1816{
1817 if(!ValidateEnumerator(enumerator))
1818 {
1819 return "unrecognized enumerator";
1820 }
1821
1822 std::vector<std::string> strings;
1823 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1824 {
1825 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001826 }
1827
1828 std::string enumeratorString;
1829 for(auto const& string : strings)
1830 {
1831 enumeratorString += string;
1832
1833 if(string != strings.back())
1834 {
1835 enumeratorString += '|';
1836 }
1837 }
1838
1839 return enumeratorString;
1840}
1841
Jeremy Hayes99a96322015-06-26 12:48:09 -06001842VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1843 const VkInstanceCreateInfo* pCreateInfo,
1844 VkInstance* pInstance)
1845{
1846 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1847 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1848
1849 if (result == VK_SUCCESS) {
1850 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1851 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001852 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001853
1854 InitParamChecker(data);
1855 }
1856
1857 return result;
1858}
1859
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001860VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001861 VkInstance instance)
1862{
1863 // Grab the key before the instance is destroyed.
1864 dispatch_key key = get_dispatch_key(instance);
1865 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001866 pTable->DestroyInstance(instance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001867
1868 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001869 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1870 while (my_data->logging_callback.size() > 0) {
1871 VkDbgMsgCallback callback = my_data->logging_callback.back();
1872 layer_destroy_msg_callback(my_data->report_data, callback);
1873 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874 }
1875
1876 layer_debug_report_destroy_instance(mid(instance));
1877 layer_data_map.erase(pTable);
1878
1879 pc_instance_table_map.erase(key);
1880 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001881}
1882
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001883bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884 VkInstance instance,
1885 uint32_t* pPhysicalDeviceCount,
1886 VkPhysicalDevice* pPhysicalDevices,
1887 VkResult result)
1888{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001889
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001890 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001892 }
1893
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001894 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001896 }
1897
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001898 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001899 {
1900 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001901 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1902 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001903 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001904
1905 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906}
1907
1908VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1909 VkInstance instance,
1910 uint32_t* pPhysicalDeviceCount,
1911 VkPhysicalDevice* pPhysicalDevices)
1912{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001913 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1914
1915 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1916
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001917 return result;
1918}
1919
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001920bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001921 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001922 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001923{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001924
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001925 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001926 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001927 }
1928
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001929 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001930}
1931
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001932VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001933 VkPhysicalDevice physicalDevice,
1934 VkPhysicalDeviceFeatures* pFeatures)
1935{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001936 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001937
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001938 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001939}
1940
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001941bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001942 VkPhysicalDevice physicalDevice,
1943 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001944 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001945{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001946
1947 if(format < VK_FORMAT_BEGIN_RANGE ||
1948 format > VK_FORMAT_END_RANGE)
1949 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001950 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001951 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001952 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001953 }
1954
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001955 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001956 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001957 }
1958
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001959 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001960}
1961
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001962VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001963 VkPhysicalDevice physicalDevice,
1964 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001965 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001966{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001967 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001968
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001969 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001970}
1971
1972bool PostGetPhysicalDeviceImageFormatProperties(
1973 VkPhysicalDevice physicalDevice,
1974 VkFormat format,
1975 VkImageType type,
1976 VkImageTiling tiling,
1977 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001978 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001979 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001980{
1981
1982 if(format < VK_FORMAT_BEGIN_RANGE ||
1983 format > VK_FORMAT_END_RANGE)
1984 {
1985 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1986 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1987 return false;
1988 }
1989
1990 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1991 type > VK_IMAGE_TYPE_END_RANGE)
1992 {
1993 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1994 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1995 return false;
1996 }
1997
1998 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1999 tiling > VK_IMAGE_TILING_END_RANGE)
2000 {
2001 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2002 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2003 return false;
2004 }
2005
2006
2007 if(pImageFormatProperties != nullptr)
2008 {
2009 }
2010
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002011 return true;
2012}
2013
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002014VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002015 VkPhysicalDevice physicalDevice,
2016 VkFormat format,
2017 VkImageType type,
2018 VkImageTiling tiling,
2019 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002020 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002021 VkImageFormatProperties* pImageFormatProperties)
2022{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002023 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002025 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002026}
2027
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002028bool PostGetPhysicalDeviceProperties(
2029 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002030 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002031{
2032
2033 if(pProperties != nullptr)
2034 {
2035 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2036 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2037 {
2038 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2039 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2040 return false;
2041 }
2042 }
2043
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002044 return true;
2045}
2046
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002047VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002048 VkPhysicalDevice physicalDevice,
2049 VkPhysicalDeviceProperties* pProperties)
2050{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002051 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002052
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002053 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002054}
2055
Cody Northropd0802882015-08-03 17:04:53 -06002056bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002057 VkPhysicalDevice physicalDevice,
2058 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002059 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002060{
2061
Cody Northropd0802882015-08-03 17:04:53 -06002062 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002063 {
2064 }
2065
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002066 if(pQueueProperties != nullptr)
2067 {
2068 }
2069
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002070 return true;
2071}
2072
2073VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2074 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002075 uint32_t* pCount,
2076 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002077{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002078 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002079
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002080 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002081}
2082
2083bool PostGetPhysicalDeviceMemoryProperties(
2084 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002085 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002086{
2087
2088 if(pMemoryProperties != nullptr)
2089 {
2090 }
2091
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002092 return true;
2093}
2094
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002095VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002096 VkPhysicalDevice physicalDevice,
2097 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2098{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002099 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002100
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002101 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002102}
2103
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2105 VkPhysicalDevice physicalDevice,
2106 const VkDeviceCreateInfo* pCreateInfo,
2107 VkDevice* pDevice)
2108{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002109 /*
2110 * NOTE: The loader fills in the ICD's device object in *pDevice.
2111 * Use that object to get the dispatch table.
2112 *
2113 * NOTE: We do not validate physicalDevice or any dispatchable
2114 * object as the first parameter. We couldn't get here if it was wrong!
2115 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002116 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2118 if(result == VK_SUCCESS)
2119 {
2120 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2121 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2122 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2123 }
2124
2125 return result;
2126}
2127
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002128VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129 VkDevice device)
2130{
2131 layer_debug_report_destroy_device(device);
2132
2133 dispatch_key key = get_dispatch_key(device);
2134#if DISPATCH_MAP_DEBUG
2135 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2136#endif
2137
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002138 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002139 pc_device_table_map.erase(key);
2140 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141}
2142
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002143bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002144 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002145 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002146 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002147 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002148{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002149
2150
2151
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002152 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002153 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002154 }
2155
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002156 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157}
2158
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002159VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002160 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002161 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002162 uint32_t queueIndex,
2163 VkQueue* pQueue)
2164{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002165 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002166
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002167 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002168}
2169
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002170bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002171 VkQueue queue,
2172 const VkCmdBuffer* pCmdBuffers)
2173{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002174 if(pCmdBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002175 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002177
2178 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179}
2180
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002181bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 VkQueue queue,
2183 uint32_t cmdBufferCount,
2184 VkFence fence,
2185 VkResult result)
2186{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002187
2188
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002190 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191 {
2192 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002193 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002195 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002196
2197 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198}
2199
2200VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2201 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002202 uint32_t submitCount,
2203 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 VkFence fence)
2205{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002206 for (uint32_t i = 0; i < submitCount; i++) {
2207 PreQueueSubmit(queue, pSubmitInfo[i].pCommandBuffers);
2208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002209
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002210 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002212 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002213
2214 return result;
2215}
2216
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002217bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218 VkQueue queue,
2219 VkResult result)
2220{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002222 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223 {
2224 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002225 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2226 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002228
2229 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002230}
2231
2232VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2233 VkQueue queue)
2234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2236
2237 PostQueueWaitIdle(queue, result);
2238
2239 return result;
2240}
2241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002242bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243 VkDevice device,
2244 VkResult result)
2245{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002247 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248 {
2249 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2251 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253
2254 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002255}
2256
2257VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2258 VkDevice device)
2259{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2261
2262 PostDeviceWaitIdle(device, result);
2263
2264 return result;
2265}
2266
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002267bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268 VkDevice device,
2269 const VkMemoryAllocInfo* pAllocInfo)
2270{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002271 if(pAllocInfo != nullptr)
2272 {
2273 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002276 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002277 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002280
2281 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002282}
2283
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002284bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002285 VkDevice device,
2286 VkDeviceMemory* pMem,
2287 VkResult result)
2288{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002289
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002290 if(pMem != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002291 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002292 }
2293
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002294 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002295 {
2296 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002297 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2298 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002300
2301 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002302}
2303
2304VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2305 VkDevice device,
2306 const VkMemoryAllocInfo* pAllocInfo,
2307 VkDeviceMemory* pMem)
2308{
2309 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002310
Jeremy Hayes99a96322015-06-26 12:48:09 -06002311 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2312
2313 PostAllocMemory(device, pMem, result);
2314
2315 return result;
2316}
2317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002318bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 VkDevice device,
2320 VkDeviceMemory mem,
2321 VkDeviceSize offset,
2322 VkDeviceSize size,
2323 VkMemoryMapFlags flags,
2324 void** ppData,
2325 VkResult result)
2326{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002327
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328
2329
2330
2331
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002332 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002334 }
2335
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002336 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002337 {
2338 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2340 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002341 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002342
2343 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002344}
2345
2346VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2347 VkDevice device,
2348 VkDeviceMemory mem,
2349 VkDeviceSize offset,
2350 VkDeviceSize size,
2351 VkMemoryMapFlags flags,
2352 void** ppData)
2353{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2355
2356 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2357
2358 return result;
2359}
2360
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002361bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002362 VkDevice device,
2363 const VkMappedMemoryRange* pMemRanges)
2364{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002365 if(pMemRanges != nullptr)
2366 {
2367 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002369 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002370 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002371 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002373 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002374
2375 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376}
2377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002378bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379 VkDevice device,
2380 uint32_t memRangeCount,
2381 VkResult result)
2382{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002383
2384
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002385 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386 {
2387 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2389 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002390 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002391
2392 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002393}
2394
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002395VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002396 VkDevice device,
2397 uint32_t memRangeCount,
2398 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002399{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002400 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002401
Jeremy Hayes99a96322015-06-26 12:48:09 -06002402 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002403
Jeremy Hayes99a96322015-06-26 12:48:09 -06002404 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2405
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002406 return result;
2407}
2408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002409bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002410 VkDevice device,
2411 const VkMappedMemoryRange* pMemRanges)
2412{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002413 if(pMemRanges != nullptr)
2414 {
2415 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002418 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002419 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002420 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002422
2423 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002424}
2425
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002426bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002427 VkDevice device,
2428 uint32_t memRangeCount,
2429 VkResult result)
2430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002431
2432
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002433 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002434 {
2435 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2437 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002439
2440 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002441}
2442
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002443VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444 VkDevice device,
2445 uint32_t memRangeCount,
2446 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002447{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002448 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002449
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002451
Jeremy Hayes99a96322015-06-26 12:48:09 -06002452 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2453
Tony Barbourb1250542015-04-16 19:23:13 -06002454 return result;
2455}
2456
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002457bool PostGetDeviceMemoryCommitment(
2458 VkDevice device,
2459 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002460 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002461{
2462
2463
2464 if(pCommittedMemoryInBytes != nullptr)
2465 {
2466 }
2467
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002468 return true;
2469}
2470
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002471VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002472 VkDevice device,
2473 VkDeviceMemory memory,
2474 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002475{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002476 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002477
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002478 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002479}
2480
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002481bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002482 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002483 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002484 VkDeviceMemory mem,
2485 VkDeviceSize memOffset,
2486 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002487{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002488
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002489
Jeremy Hayes99a96322015-06-26 12:48:09 -06002490
2491
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002492 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2496 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002497 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002498
2499 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002500}
2501
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002503 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002504 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002505 VkDeviceMemory mem,
2506 VkDeviceSize memOffset)
2507{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002509
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002510 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002511
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002512 return result;
2513}
2514
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002515bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002516 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002517 VkImage image,
2518 VkDeviceMemory mem,
2519 VkDeviceSize memOffset,
2520 VkResult result)
2521{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002522
2523
2524
2525
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002526 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002527 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002528 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2530 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002531 }
2532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002533 return true;
2534}
2535
2536VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2537 VkDevice device,
2538 VkImage image,
2539 VkDeviceMemory mem,
2540 VkDeviceSize memOffset)
2541{
2542 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2543
2544 PostBindImageMemory(device, image, mem, memOffset, result);
2545
2546 return result;
2547}
2548
2549bool PostGetBufferMemoryRequirements(
2550 VkDevice device,
2551 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002552 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553{
2554
2555
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002556 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002557 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002558 }
2559
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560 return true;
2561}
2562
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002563VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002564 VkDevice device,
2565 VkBuffer buffer,
2566 VkMemoryRequirements* pMemoryRequirements)
2567{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002568 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002570 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002571}
2572
2573bool PostGetImageMemoryRequirements(
2574 VkDevice device,
2575 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002576 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002577{
2578
2579
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002580 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002581 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002582 }
2583
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002584 return true;
2585}
2586
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002587VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002588 VkDevice device,
2589 VkImage image,
2590 VkMemoryRequirements* pMemoryRequirements)
2591{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002592 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002593
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002594 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595}
2596
2597bool PostGetImageSparseMemoryRequirements(
2598 VkDevice device,
2599 VkImage image,
2600 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002601 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002602{
2603
2604
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002605 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002606 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002607 }
2608
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002609 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002611 if ((pSparseMemoryRequirements->formatProps.aspect &
2612 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 {
2614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002615 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002616 return false;
2617 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002618 }
2619
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002620 return true;
2621}
2622
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002623VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624 VkDevice device,
2625 VkImage image,
2626 uint32_t* pNumRequirements,
2627 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2628{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002629 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002630
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002631 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002632}
2633
2634bool PostGetPhysicalDeviceSparseImageFormatProperties(
2635 VkPhysicalDevice physicalDevice,
2636 VkFormat format,
2637 VkImageType type,
2638 uint32_t samples,
2639 VkImageUsageFlags usage,
2640 VkImageTiling tiling,
2641 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002642 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643{
2644
2645 if(format < VK_FORMAT_BEGIN_RANGE ||
2646 format > VK_FORMAT_END_RANGE)
2647 {
2648 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002649 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002650 return false;
2651 }
2652
2653 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2654 type > VK_IMAGE_TYPE_END_RANGE)
2655 {
2656 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002657 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 return false;
2659 }
2660
2661
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002662
2663 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2664 tiling > VK_IMAGE_TILING_END_RANGE)
2665 {
2666 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002667 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002668 return false;
2669 }
2670
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002671 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002673 }
2674
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002675 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002677 if ((pProperties->aspect &
2678 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002679 {
2680 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002681 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002682 return false;
2683 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002684 }
2685
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002686 return true;
2687}
2688
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002689VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002690 VkPhysicalDevice physicalDevice,
2691 VkFormat format,
2692 VkImageType type,
2693 uint32_t samples,
2694 VkImageUsageFlags usage,
2695 VkImageTiling tiling,
2696 uint32_t* pNumProperties,
2697 VkSparseImageFormatProperties* pProperties)
2698{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002699 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002700
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002701 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002702}
2703
2704bool PreQueueBindSparseBufferMemory(
2705 VkQueue queue,
2706 const VkSparseMemoryBindInfo* pBindInfo)
2707{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002708 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002709 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002710 }
2711
2712 return true;
2713}
2714
2715bool PostQueueBindSparseBufferMemory(
2716 VkQueue queue,
2717 VkBuffer buffer,
2718 uint32_t numBindings,
2719 VkResult result)
2720{
2721
2722
2723
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002724 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002725 {
2726 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2727 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2728 return false;
2729 }
2730
2731 return true;
2732}
2733
2734VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2735 VkQueue queue,
2736 VkBuffer buffer,
2737 uint32_t numBindings,
2738 const VkSparseMemoryBindInfo* pBindInfo)
2739{
2740 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2741
2742 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2743
2744 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2745
2746 return result;
2747}
2748
2749bool PreQueueBindSparseImageOpaqueMemory(
2750 VkQueue queue,
2751 const VkSparseMemoryBindInfo* pBindInfo)
2752{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002753 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002754 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002755 }
2756
2757 return true;
2758}
2759
2760bool PostQueueBindSparseImageOpaqueMemory(
2761 VkQueue queue,
2762 VkImage image,
2763 uint32_t numBindings,
2764 VkResult result)
2765{
2766
2767
2768
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002769 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002770 {
2771 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2772 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2773 return false;
2774 }
2775
2776 return true;
2777}
2778
2779VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2780 VkQueue queue,
2781 VkImage image,
2782 uint32_t numBindings,
2783 const VkSparseMemoryBindInfo* pBindInfo)
2784{
2785 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2786
2787 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2788
2789 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2790
2791 return result;
2792}
2793
2794bool PreQueueBindSparseImageMemory(
2795 VkQueue queue,
2796 const VkSparseImageMemoryBindInfo* pBindInfo)
2797{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002798 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002799 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002800 if ((pBindInfo->subresource.aspect &
2801 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002802 {
2803 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002804 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805 return false;
2806 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002807 }
2808
2809 return true;
2810}
2811
2812bool PostQueueBindSparseImageMemory(
2813 VkQueue queue,
2814 VkImage image,
2815 uint32_t numBindings,
2816 VkResult result)
2817{
2818
2819
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002821 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002822 {
2823 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002824 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2825 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002826 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002827
2828 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002829}
2830
2831VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002832 VkQueue queue,
2833 VkImage image,
2834 uint32_t numBindings,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002835 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002836{
2837 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002839 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002841 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002842
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002843 return result;
2844}
2845
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002846bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002847 VkDevice device,
2848 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002849{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002850 if(pCreateInfo != nullptr)
2851 {
2852 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002853 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002854 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002855 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002856 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002857 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002858 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002859
2860 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002861}
2862
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002863bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864 VkDevice device,
2865 VkFence* pFence,
2866 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002867{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002868
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002869 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002871 }
2872
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002873 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002874 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002875 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2877 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002878 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002879
2880 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881}
2882
2883VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2884 VkDevice device,
2885 const VkFenceCreateInfo* pCreateInfo,
2886 VkFence* pFence)
2887{
2888 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002889
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
2891
2892 PostCreateFence(device, pFence, result);
2893
2894 return result;
2895}
2896
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002897bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898 VkDevice device,
2899 const VkFence* pFences)
2900{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002901 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002902 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002903 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002904
2905 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002906}
2907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002908bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002909 VkDevice device,
2910 uint32_t fenceCount,
2911 VkResult result)
2912{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002913
2914
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002915 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002916 {
2917 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002918 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2919 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002920 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002921
2922 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923}
2924
2925VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2926 VkDevice device,
2927 uint32_t fenceCount,
2928 const VkFence* pFences)
2929{
2930 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002931
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2933
2934 PostResetFences(device, fenceCount, result);
2935
2936 return result;
2937}
2938
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002939bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002940 VkDevice device,
2941 VkFence fence,
2942 VkResult result)
2943{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002944
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002946 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002947 {
2948 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2950 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002952
2953 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002954}
2955
2956VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2957 VkDevice device,
2958 VkFence fence)
2959{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002960 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2961
2962 PostGetFenceStatus(device, fence, result);
2963
2964 return result;
2965}
2966
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002967bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968 VkDevice device,
2969 const VkFence* pFences)
2970{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002971 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002974
2975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002976}
2977
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002978bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 VkDevice device,
2980 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002981 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002982 uint64_t timeout,
2983 VkResult result)
2984{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002985
2986
2987
2988
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002989 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002990 {
2991 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002992 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2993 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002995
2996 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002997}
2998
2999VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3000 VkDevice device,
3001 uint32_t fenceCount,
3002 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003003 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003004 uint64_t timeout)
3005{
3006 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003007
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3009
3010 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3011
3012 return result;
3013}
3014
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003015bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003016 VkDevice device,
3017 const VkSemaphoreCreateInfo* pCreateInfo)
3018{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003019 if(pCreateInfo != nullptr)
3020 {
3021 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003024 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003025 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003027 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028
3029 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030}
3031
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003032bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033 VkDevice device,
3034 VkSemaphore* pSemaphore,
3035 VkResult result)
3036{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003037
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003038 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003039 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040 }
3041
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003042 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043 {
3044 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003045 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3046 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003047 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003048
3049 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003050}
3051
3052VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3053 VkDevice device,
3054 const VkSemaphoreCreateInfo* pCreateInfo,
3055 VkSemaphore* pSemaphore)
3056{
3057 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003058
Jeremy Hayes99a96322015-06-26 12:48:09 -06003059 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3060
3061 PostCreateSemaphore(device, pSemaphore, result);
3062
3063 return result;
3064}
3065
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003066bool PostQueueSignalSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003067 VkQueue queue,
3068 VkSemaphore semaphore,
3069 VkResult result)
3070{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003073 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003074 {
3075 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003076 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3077 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003079
3080 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081}
3082
3083VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3084 VkQueue queue,
3085 VkSemaphore semaphore)
3086{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3088
3089 PostQueueSignalSemaphore(queue, semaphore, result);
3090
3091 return result;
3092}
3093
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003094bool PostQueueWaitSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003095 VkQueue queue,
3096 VkSemaphore semaphore,
3097 VkResult result)
3098{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099
Jeremy Hayes99a96322015-06-26 12:48:09 -06003100
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003101 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003102 {
3103 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003104 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3105 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107
3108 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109}
3110
3111VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3112 VkQueue queue,
3113 VkSemaphore semaphore)
3114{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003115 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3116
3117 PostQueueWaitSemaphore(queue, semaphore, result);
3118
3119 return result;
3120}
3121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003123 VkDevice device,
3124 const VkEventCreateInfo* pCreateInfo)
3125{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003126 if(pCreateInfo != nullptr)
3127 {
3128 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003131 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003132 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003135
3136 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003137}
3138
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003139bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003140 VkDevice device,
3141 VkEvent* pEvent,
3142 VkResult result)
3143{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003145 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003147 }
3148
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003149 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003150 {
3151 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003152 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3153 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003154 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003155
3156 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003157}
3158
3159VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3160 VkDevice device,
3161 const VkEventCreateInfo* pCreateInfo,
3162 VkEvent* pEvent)
3163{
3164 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003165
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3167
3168 PostCreateEvent(device, pEvent, result);
3169
3170 return result;
3171}
3172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003173bool PostGetEventStatus(
3174 VkDevice device,
3175 VkEvent event,
3176 VkResult result)
3177{
3178
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003180 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003181 {
3182 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3184 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003186
3187 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003188}
3189
3190VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3191 VkDevice device,
3192 VkEvent event)
3193{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3195
3196 PostGetEventStatus(device, event, result);
3197
3198 return result;
3199}
3200
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003201bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202 VkDevice device,
3203 VkEvent event,
3204 VkResult result)
3205{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003206
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003208 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003209 {
3210 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003211 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3212 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003213 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003214
3215 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003216}
3217
3218VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3219 VkDevice device,
3220 VkEvent event)
3221{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3223
3224 PostSetEvent(device, event, result);
3225
3226 return result;
3227}
3228
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003229bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 VkDevice device,
3231 VkEvent event,
3232 VkResult result)
3233{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003234
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003236 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003237 {
3238 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3240 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003241 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003242
3243 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244}
3245
3246VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3247 VkDevice device,
3248 VkEvent event)
3249{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3251
3252 PostResetEvent(device, event, result);
3253
3254 return result;
3255}
3256
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003258 VkDevice device,
3259 const VkQueryPoolCreateInfo* pCreateInfo)
3260{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003261 if(pCreateInfo != nullptr)
3262 {
3263 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003264 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003266 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003267 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003268 }
3269 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3270 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3271 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003273 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003274 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003276 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003277
3278 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003279}
3280
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003281bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 VkDevice device,
3283 VkQueryPool* pQueryPool,
3284 VkResult result)
3285{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003286
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003287 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003288 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289 }
3290
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003291 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 {
3293 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3295 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003297
3298 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003299}
3300
3301VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3302 VkDevice device,
3303 const VkQueryPoolCreateInfo* pCreateInfo,
3304 VkQueryPool* pQueryPool)
3305{
3306 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003307
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3309
3310 PostCreateQueryPool(device, pQueryPool, result);
3311
3312 return result;
3313}
3314
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003315bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 VkDevice device,
3317 VkQueryPool queryPool,
3318 uint32_t startQuery,
3319 uint32_t queryCount,
3320 size_t* pDataSize,
3321 void* pData,
3322 VkQueryResultFlags flags,
3323 VkResult result)
3324{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325
Jeremy Hayes99a96322015-06-26 12:48:09 -06003326
3327
3328
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003329 if(pDataSize != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003331 }
3332
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003333 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335 }
3336
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003338 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003339 {
3340 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003341 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3342 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003343 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003344
3345 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346}
3347
3348VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3349 VkDevice device,
3350 VkQueryPool queryPool,
3351 uint32_t startQuery,
3352 uint32_t queryCount,
3353 size_t* pDataSize,
3354 void* pData,
3355 VkQueryResultFlags flags)
3356{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3358
3359 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3360
3361 return result;
3362}
3363
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003364bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003365 VkDevice device,
3366 const VkBufferCreateInfo* pCreateInfo)
3367{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003368 if(pCreateInfo != nullptr)
3369 {
3370 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003371 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003372 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003373 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003376 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3377 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003378 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003379 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003380 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003381 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003383 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003385 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003386 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003387
3388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389}
3390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003391bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003392 VkDevice device,
3393 VkBuffer* pBuffer,
3394 VkResult result)
3395{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003396
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003397 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003398 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003399 }
3400
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003401 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 {
3403 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003404 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3405 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003406 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003407
3408 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409}
3410
3411VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3412 VkDevice device,
3413 const VkBufferCreateInfo* pCreateInfo,
3414 VkBuffer* pBuffer)
3415{
3416 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003417
Jeremy Hayes99a96322015-06-26 12:48:09 -06003418 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3419
3420 PostCreateBuffer(device, pBuffer, result);
3421
3422 return result;
3423}
3424
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003426 VkDevice device,
3427 const VkBufferViewCreateInfo* pCreateInfo)
3428{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003429 if(pCreateInfo != nullptr)
3430 {
3431 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003432 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003434 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003435 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003436 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3438 pCreateInfo->format > VK_FORMAT_END_RANGE)
3439 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003440 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003441 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003442 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003443 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003444 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003445
3446 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003447}
3448
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003449bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450 VkDevice device,
3451 VkBufferView* pView,
3452 VkResult result)
3453{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003454
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003455 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003456 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003457 }
3458
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003459 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003460 {
3461 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003462 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3463 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003464 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003465
3466 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003467}
3468
3469VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3470 VkDevice device,
3471 const VkBufferViewCreateInfo* pCreateInfo,
3472 VkBufferView* pView)
3473{
3474 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003475
Jeremy Hayes99a96322015-06-26 12:48:09 -06003476 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3477
3478 PostCreateBufferView(device, pView, result);
3479
3480 return result;
3481}
3482
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003483bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 VkDevice device,
3485 const VkImageCreateInfo* pCreateInfo)
3486{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003487 if(pCreateInfo != nullptr)
3488 {
3489 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003490 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003492 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003493 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003494 }
3495 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3496 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3497 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003498 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003499 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003500 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003501 }
3502 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3503 pCreateInfo->format > VK_FORMAT_END_RANGE)
3504 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003505 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003506 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003507 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003508 }
3509 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3510 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3511 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003512 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003513 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003514 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003516 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3517 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003518 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003519 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3520 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003521 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003522 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003523 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003524 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003525 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003526 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003527
3528 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003529}
3530
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003531bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003532 VkDevice device,
3533 VkImage* pImage,
3534 VkResult result)
3535{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003536
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003537 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003538 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003539 }
3540
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003541 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003542 {
3543 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003544 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3545 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003546 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003547
3548 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003549}
3550
Jeremy Hayes99a96322015-06-26 12:48:09 -06003551VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3552 VkDevice device,
3553 const VkImageCreateInfo* pCreateInfo,
3554 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003555{
3556 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003557
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3559
3560 PostCreateImage(device, pImage, result);
3561
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003562 return result;
3563}
3564
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003565bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003566 VkDevice device,
3567 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003568{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003569 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003571 if ((pSubresource->aspect &
3572 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003575 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003576 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003577 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003578 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003579
3580 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581}
3582
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003583bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003584 VkDevice device,
3585 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003586 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003587{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003588
Jeremy Hayes99a96322015-06-26 12:48:09 -06003589
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003590 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003591 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003592 }
3593
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003594 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003595}
3596
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003597VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003598 VkDevice device,
3599 VkImage image,
3600 const VkImageSubresource* pSubresource,
3601 VkSubresourceLayout* pLayout)
3602{
3603 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003604
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003605 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003606
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003607 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003608}
3609
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003610bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003611 VkDevice device,
3612 const VkImageViewCreateInfo* pCreateInfo)
3613{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003614 if(pCreateInfo != nullptr)
3615 {
3616 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003617 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003618 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003620 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003621 }
3622 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3623 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3624 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003625 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003626 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003627 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003628 }
3629 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3630 pCreateInfo->format > VK_FORMAT_END_RANGE)
3631 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003633 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003634 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003635 }
3636 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3637 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3638 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003640 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003641 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003642 }
3643 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3644 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3645 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003646 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003647 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003648 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003649 }
3650 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3651 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3652 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003653 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003654 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003655 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003656 }
3657 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3658 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3659 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003660 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003661 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003662 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003663 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003664 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003665
3666 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003667}
3668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003669bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003670 VkDevice device,
3671 VkImageView* pView,
3672 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003673{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003674
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003675 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003676 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003677 }
3678
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003680 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003681 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3683 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003684 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003685
3686 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003687}
3688
3689VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3690 VkDevice device,
3691 const VkImageViewCreateInfo* pCreateInfo,
3692 VkImageView* pView)
3693{
3694 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003695
Jeremy Hayes99a96322015-06-26 12:48:09 -06003696 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3697
3698 PostCreateImageView(device, pView, result);
3699
3700 return result;
3701}
3702
Michael Lentine03d8e572015-09-15 14:59:14 -05003703bool PreCreateShaderModule(
3704 VkDevice device,
3705 const VkShaderModuleCreateInfo* pCreateInfo)
3706{
3707 if(pCreateInfo) {
3708 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3710 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3711 return false;
3712 }
3713 if(!pCreateInfo->pCode) {
3714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3715 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3716 return false;
3717 }
3718 } else {
3719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3720 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3721 return false;
3722 }
3723
3724 return true;
3725}
3726
3727bool PostCreateShaderModule(
3728 VkDevice device,
3729 VkShaderModule* pShaderModule,
3730 VkResult result)
3731{
3732 if(result < VK_SUCCESS) {
3733 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3734 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3735 return false;
3736 }
3737
3738 return true;
3739}
3740
3741VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3742 VkDevice device,
3743 const VkShaderModuleCreateInfo* pCreateInfo,
3744 VkShaderModule* pShaderModule)
3745{
3746 PreCreateShaderModule(device, pCreateInfo);
3747 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3748 PostCreateShaderModule(device, pShaderModule, result);
3749 return result;
3750}
3751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003752bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003753 VkDevice device,
3754 const VkShaderCreateInfo* pCreateInfo)
3755{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003756 if(pCreateInfo != nullptr)
3757 {
3758 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003759 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003761 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003762 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003763 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003764 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003765 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003766 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003767 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003768
3769 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003770}
3771
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003772bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003773 VkDevice device,
3774 VkShader* pShader,
3775 VkResult result)
3776{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003777
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003778 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003779 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003780 }
3781
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003782 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003783 {
3784 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3786 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003787 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003788
3789 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003790}
3791
3792VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3793 VkDevice device,
3794 const VkShaderCreateInfo* pCreateInfo,
3795 VkShader* pShader)
3796{
3797 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003798
Jeremy Hayes99a96322015-06-26 12:48:09 -06003799 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3800
3801 PostCreateShader(device, pShader, result);
3802
3803 return result;
3804}
3805
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003806bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003807 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003808 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003809{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003810 if(pCreateInfo != nullptr)
3811 {
3812 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003813 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003815 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003816 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003817 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003818 if(pCreateInfo->initialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003819 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003820 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003821 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003822
3823 return true;
3824}
3825
3826bool PostCreatePipelineCache(
3827 VkDevice device,
3828 VkPipelineCache* pPipelineCache,
3829 VkResult result)
3830{
3831
3832 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003833 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003834 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003835
3836 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003837 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3840 return false;
3841 }
3842
3843 return true;
3844}
3845
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003846VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003847 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003848 const VkPipelineCacheCreateInfo* pCreateInfo,
3849 VkPipelineCache* pPipelineCache)
3850{
3851 PreCreatePipelineCache(device, pCreateInfo);
3852
3853 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3854
3855 PostCreatePipelineCache(device, pPipelineCache, result);
3856
3857 return result;
3858}
3859
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003860bool PostGetPipelineCacheSize(
3861 VkDevice device,
3862 VkPipelineCache pipelineCache)
3863{
3864
3865
3866 return true;
3867}
3868
3869VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3870 VkDevice device,
3871 VkPipelineCache pipelineCache)
3872{
Jeremy Hayesa663c702015-07-31 12:54:58 -06003873 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003874
3875 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesa663c702015-07-31 12:54:58 -06003876
3877 return result;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003878}
3879
3880bool PostGetPipelineCacheData(
3881 VkDevice device,
3882 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter299e6d12015-10-16 09:58:26 -06003883 size_t dataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003884 void* pData,
3885 VkResult result)
3886{
3887
3888
3889 if(pData != nullptr)
3890 {
3891 }
3892
3893 if(result < VK_SUCCESS)
3894 {
3895 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3896 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3897 return false;
3898 }
3899
3900 return true;
3901}
3902
3903VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3904 VkDevice device,
3905 VkPipelineCache pipelineCache,
Courtney Goeltzenleuchter299e6d12015-10-16 09:58:26 -06003906 size_t dataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003907 void* pData)
3908{
Courtney Goeltzenleuchter299e6d12015-10-16 09:58:26 -06003909 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, dataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910
Courtney Goeltzenleuchter299e6d12015-10-16 09:58:26 -06003911 PostGetPipelineCacheData(device, pipelineCache, dataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003912
3913 return result;
3914}
3915
3916bool PreMergePipelineCaches(
3917 VkDevice device,
3918 const VkPipelineCache* pSrcCaches)
3919{
3920 if(pSrcCaches != nullptr)
3921 {
3922 }
3923
3924 return true;
3925}
3926
3927bool PostMergePipelineCaches(
3928 VkDevice device,
3929 VkPipelineCache destCache,
3930 uint32_t srcCacheCount,
3931 VkResult result)
3932{
3933
3934
3935
3936 if(result < VK_SUCCESS)
3937 {
3938 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3939 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3940 return false;
3941 }
3942
3943 return true;
3944}
3945
3946VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3947 VkDevice device,
3948 VkPipelineCache destCache,
3949 uint32_t srcCacheCount,
3950 const VkPipelineCache* pSrcCaches)
3951{
3952 PreMergePipelineCaches(device, pSrcCaches);
3953
3954 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3955
3956 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3957
3958 return result;
3959}
3960
3961bool PreCreateGraphicsPipelines(
3962 VkDevice device,
3963 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3964{
3965 if(pCreateInfos != nullptr)
3966 {
3967 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3968 {
3969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3970 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3971 return false;
3972 }
3973 if(pCreateInfos->pStages != nullptr)
3974 {
3975 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3976 {
3977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3978 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3979 return false;
3980 }
Courtney Goeltzenleuchterd2635502015-10-21 17:08:06 -06003981 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3982 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3983 VK_SHADER_STAGE_GEOMETRY_BIT |
3984 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003985 {
3986 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3987 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3988 return false;
3989 }
3990 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3991 {
3992 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3993 {
3994 }
3995 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3996 {
3997 }
3998 }
3999 }
4000 if(pCreateInfos->pVertexInputState != nullptr)
4001 {
4002 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4003 {
4004 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4005 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4006 return false;
4007 }
4008 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4009 {
4010 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4011 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4012 {
4013 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4014 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4015 return false;
4016 }
4017 }
4018 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4019 {
4020 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4021 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4022 {
4023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4024 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4025 return false;
4026 }
4027 }
4028 }
4029 if(pCreateInfos->pInputAssemblyState != nullptr)
4030 {
4031 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4032 {
4033 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4034 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4035 return false;
4036 }
4037 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4038 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4039 {
4040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4041 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4042 return false;
4043 }
4044 }
4045 if(pCreateInfos->pTessellationState != nullptr)
4046 {
4047 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4048 {
4049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4050 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4051 return false;
4052 }
4053 }
4054 if(pCreateInfos->pViewportState != nullptr)
4055 {
4056 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4057 {
4058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4059 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4060 return false;
4061 }
4062 }
4063 if(pCreateInfos->pRasterState != nullptr)
4064 {
4065 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4066 {
4067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4068 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4069 return false;
4070 }
4071 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4072 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4073 {
4074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4075 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4076 return false;
4077 }
4078 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4079 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4080 {
4081 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4082 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4083 return false;
4084 }
4085 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4086 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4087 {
4088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4089 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4090 return false;
4091 }
4092 }
4093 if(pCreateInfos->pMultisampleState != nullptr)
4094 {
4095 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4096 {
4097 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4098 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4099 return false;
4100 }
4101 }
4102 if(pCreateInfos->pDepthStencilState != nullptr)
4103 {
4104 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4105 {
4106 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4107 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4108 return false;
4109 }
4110 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4111 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4112 {
4113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4114 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4115 return false;
4116 }
4117 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4118 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4119 {
4120 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4121 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4122 return false;
4123 }
4124 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4125 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4126 {
4127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4128 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4129 return false;
4130 }
4131 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4132 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4133 {
4134 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4135 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4136 return false;
4137 }
4138 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4139 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4140 {
4141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4142 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4143 return false;
4144 }
4145 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4146 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4147 {
4148 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4149 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4150 return false;
4151 }
4152 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4153 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4154 {
4155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4156 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4157 return false;
4158 }
4159 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4160 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4161 {
4162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4163 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4164 return false;
4165 }
4166 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4167 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4168 {
4169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4170 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4171 return false;
4172 }
4173 }
4174 if(pCreateInfos->pColorBlendState != nullptr)
4175 {
4176 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4177 {
4178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4179 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4180 return false;
4181 }
Michael Lentine304b01f2015-10-06 14:55:54 -07004182 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4183 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004184 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4185 {
4186 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4187 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4188 return false;
4189 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05004190 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004191 {
4192 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4193 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4194 {
4195 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4196 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4197 return false;
4198 }
4199 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4200 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4201 {
4202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4203 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4204 return false;
4205 }
4206 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4207 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4208 {
4209 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4210 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4211 return false;
4212 }
4213 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4214 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4215 {
4216 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4217 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4218 return false;
4219 }
4220 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4221 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4222 {
4223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4224 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4225 return false;
4226 }
4227 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4228 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4229 {
4230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4231 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4232 return false;
4233 }
4234 }
4235 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004236 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4237 {
4238 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4239 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4240 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004241 }
4242
4243 return true;
4244}
4245
4246bool PostCreateGraphicsPipelines(
4247 VkDevice device,
4248 VkPipelineCache pipelineCache,
4249 uint32_t count,
4250 VkPipeline* pPipelines,
4251 VkResult result)
4252{
4253
4254
4255
4256 if(pPipelines != nullptr)
4257 {
4258 }
4259
4260 if(result < VK_SUCCESS)
4261 {
4262 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4263 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4264 return false;
4265 }
4266
4267 return true;
4268}
4269
4270VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4271 VkDevice device,
4272 VkPipelineCache pipelineCache,
4273 uint32_t count,
4274 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4275 VkPipeline* pPipelines)
4276{
4277 PreCreateGraphicsPipelines(device, pCreateInfos);
4278
4279 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4280
4281 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4282
4283 return result;
4284}
4285
4286bool PreCreateComputePipelines(
4287 VkDevice device,
4288 const VkComputePipelineCreateInfo* pCreateInfos)
4289{
4290 if(pCreateInfos != nullptr)
4291 {
4292 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4293 {
4294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4295 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4296 return false;
4297 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004298 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004299 {
4300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4301 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4302 return false;
4303 }
Courtney Goeltzenleuchterd2635502015-10-21 17:08:06 -06004304 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4305 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4306 VK_SHADER_STAGE_GEOMETRY_BIT |
4307 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004308 {
4309 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4310 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4311 return false;
4312 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004313 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004314 {
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004315 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004316 {
4317 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004318 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004319 {
4320 }
4321 }
4322 }
4323
4324 return true;
4325}
4326
4327bool PostCreateComputePipelines(
4328 VkDevice device,
4329 VkPipelineCache pipelineCache,
4330 uint32_t count,
4331 VkPipeline* pPipelines,
4332 VkResult result)
4333{
4334
4335
4336
4337 if(pPipelines != nullptr)
4338 {
4339 }
4340
4341 if(result < VK_SUCCESS)
4342 {
4343 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4345 return false;
4346 }
4347
4348 return true;
4349}
4350
4351VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4352 VkDevice device,
4353 VkPipelineCache pipelineCache,
4354 uint32_t count,
4355 const VkComputePipelineCreateInfo* pCreateInfos,
4356 VkPipeline* pPipelines)
4357{
4358 PreCreateComputePipelines(device, pCreateInfos);
4359
4360 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4361
4362 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4363
4364 return result;
4365}
4366
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004367bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368 VkDevice device,
4369 const VkPipelineLayoutCreateInfo* pCreateInfo)
4370{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004371 if(pCreateInfo != nullptr)
4372 {
4373 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004374 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004375 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004376 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4377 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004378 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004379 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004380 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004382 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004385 }
4386
4387 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388}
4389
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004390bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 VkDevice device,
4392 VkPipelineLayout* pPipelineLayout,
4393 VkResult result)
4394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004395
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004396 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004397 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398 }
4399
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004400 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401 {
4402 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004403 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4404 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004406
4407 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408}
4409
4410VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4411 VkDevice device,
4412 const VkPipelineLayoutCreateInfo* pCreateInfo,
4413 VkPipelineLayout* pPipelineLayout)
4414{
4415 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416
Jeremy Hayes99a96322015-06-26 12:48:09 -06004417 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4418
4419 PostCreatePipelineLayout(device, pPipelineLayout, result);
4420
4421 return result;
4422}
4423
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004424bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425 VkDevice device,
4426 const VkSamplerCreateInfo* pCreateInfo)
4427{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004428 if(pCreateInfo != nullptr)
4429 {
4430 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004433 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004435 }
4436 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4437 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4438 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004440 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004441 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004442 }
4443 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4444 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4445 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004447 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449 }
4450 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4451 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4452 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004454 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004456 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004457 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4458 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004460 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004461 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004462 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004463 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004464 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4465 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004466 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004468 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004469 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004471 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4472 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004473 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004475 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004477 }
4478 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4479 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4480 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004482 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004484 }
4485 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4486 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4487 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004488 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004489 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004490 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004491 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004492 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004493
4494 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004495}
4496
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004497bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004498 VkDevice device,
4499 VkSampler* pSampler,
4500 VkResult result)
4501{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004502
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004503 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004504 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004505 }
4506
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004507 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004508 {
4509 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004510 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4511 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004512 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004513
4514 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004515}
4516
4517VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4518 VkDevice device,
4519 const VkSamplerCreateInfo* pCreateInfo,
4520 VkSampler* pSampler)
4521{
4522 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004523
Jeremy Hayes99a96322015-06-26 12:48:09 -06004524 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4525
4526 PostCreateSampler(device, pSampler, result);
4527
4528 return result;
4529}
4530
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004531bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 VkDevice device,
4533 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4534{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004535 if(pCreateInfo != nullptr)
4536 {
4537 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004538 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004539 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004540 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004541 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004543 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004545 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4546 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4547 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004548 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004549 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004550 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004551 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004552 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004553 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004554 }
4555 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004556 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004557
4558 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559}
4560
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004561bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004562 VkDevice device,
4563 VkDescriptorSetLayout* pSetLayout,
4564 VkResult result)
4565{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004566
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004567 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004568 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 }
4570
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004571 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004572 {
4573 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004576 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004577
4578 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004579}
4580
4581VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4582 VkDevice device,
4583 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4584 VkDescriptorSetLayout* pSetLayout)
4585{
4586 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004587
Jeremy Hayes99a96322015-06-26 12:48:09 -06004588 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4589
4590 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4591
4592 return result;
4593}
4594
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004595bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004596 VkDevice device,
4597 const VkDescriptorPoolCreateInfo* pCreateInfo)
4598{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004599 if(pCreateInfo != nullptr)
4600 {
4601 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004602 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004604 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004605 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004606 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004607 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004608 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004609 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4610 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4611 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004613 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004614 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004615 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004616 }
4617 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004618
4619 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004620}
4621
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004622bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004623 VkDevice device,
4624 VkDescriptorPoolUsage poolUsage,
4625 uint32_t maxSets,
4626 VkDescriptorPool* pDescriptorPool,
4627 VkResult result)
4628{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004629
4630 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4631 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4632 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004633 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004634 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004635 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004636 }
4637
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004638 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004639
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004640 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004641 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004642 }
4643
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004644 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004645 {
4646 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004647 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4648 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004650
4651 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004652}
4653
4654VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4655 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004656 const VkDescriptorPoolCreateInfo* pCreateInfo,
4657 VkDescriptorPool* pDescriptorPool)
4658{
4659 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004660
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004661 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004662
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004663 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004664
4665 return result;
4666}
4667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004668bool PostResetDescriptorPool(
4669 VkDevice device,
4670 VkDescriptorPool descriptorPool,
4671 VkResult result)
4672{
4673
Jeremy Hayes99a96322015-06-26 12:48:09 -06004674
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004675 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004676 {
4677 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004678 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4679 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004680 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004681
4682 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004683}
4684
4685VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4686 VkDevice device,
4687 VkDescriptorPool descriptorPool)
4688{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004689 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4690
4691 PostResetDescriptorPool(device, descriptorPool, result);
4692
4693 return result;
4694}
4695
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004696bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004697 VkDevice device,
4698 const VkDescriptorSetLayout* pSetLayouts)
4699{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004700 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004701 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004702 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004703
4704 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004705}
4706
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004707bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004708 VkDevice device,
4709 VkDescriptorPool descriptorPool,
4710 VkDescriptorSetUsage setUsage,
4711 uint32_t count,
4712 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004713 VkResult result)
4714{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004715
Jeremy Hayes99a96322015-06-26 12:48:09 -06004716
4717 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4718 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4719 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004720 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004721 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004722 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004723 }
4724
4725
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004726 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004727 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004728 }
4729
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004730 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004731 {
4732 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004733 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4734 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004735 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004736
4737 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004738}
4739
4740VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4741 VkDevice device,
4742 VkDescriptorPool descriptorPool,
4743 VkDescriptorSetUsage setUsage,
4744 uint32_t count,
4745 const VkDescriptorSetLayout* pSetLayouts,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004746 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004747{
4748 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004749
Cody Northrop1e4f8022015-08-03 12:47:29 -06004750 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004751
Cody Northrop1e4f8022015-08-03 12:47:29 -06004752 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004753
4754 return result;
4755}
4756
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004757bool PreFreeDescriptorSets(
4758 VkDevice device,
4759 const VkDescriptorSet* pDescriptorSets)
4760{
4761 if(pDescriptorSets != nullptr)
4762 {
4763 }
4764
4765 return true;
4766}
4767
4768bool PostFreeDescriptorSets(
4769 VkDevice device,
4770 VkDescriptorPool descriptorPool,
4771 uint32_t count,
4772 VkResult result)
4773{
4774
4775
4776
4777 if(result < VK_SUCCESS)
4778 {
4779 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4781 return false;
4782 }
4783
4784 return true;
4785}
4786
4787VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4788 VkDevice device,
4789 VkDescriptorPool descriptorPool,
4790 uint32_t count,
4791 const VkDescriptorSet* pDescriptorSets)
4792{
4793 PreFreeDescriptorSets(device, pDescriptorSets);
4794
4795 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4796
4797 PostFreeDescriptorSets(device, descriptorPool, count, result);
4798
4799 return result;
4800}
4801
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004802bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004803 VkDevice device,
4804 const VkWriteDescriptorSet* pDescriptorWrites,
4805 const VkCopyDescriptorSet* pDescriptorCopies)
4806{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807 if(pDescriptorWrites != nullptr)
4808 {
4809 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004810 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004812 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004813 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004814 }
4815 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4816 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4817 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004818 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004819 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004820 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004821 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004822 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004823 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004824 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4825 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4826 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004827 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004828 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004829 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004830 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004831 }
4832 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004833
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004834 if(pDescriptorCopies != nullptr)
4835 {
4836 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004837 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004839 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004840 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004841 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004842 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004843
4844 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004845}
4846
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004847VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004848 VkDevice device,
4849 uint32_t writeCount,
4850 const VkWriteDescriptorSet* pDescriptorWrites,
4851 uint32_t copyCount,
4852 const VkCopyDescriptorSet* pDescriptorCopies)
4853{
4854 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004855
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004856 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004857}
4858
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004859bool PreCreateFramebuffer(
4860 VkDevice device,
4861 const VkFramebufferCreateInfo* pCreateInfo)
4862{
4863 if(pCreateInfo != nullptr)
4864 {
4865 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4866 {
4867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4868 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4869 return false;
4870 }
4871 if(pCreateInfo->pAttachments != nullptr)
4872 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873 }
4874 }
4875
4876 return true;
4877}
4878
4879bool PostCreateFramebuffer(
4880 VkDevice device,
4881 VkFramebuffer* pFramebuffer,
4882 VkResult result)
4883{
4884
4885 if(pFramebuffer != nullptr)
4886 {
4887 }
4888
4889 if(result < VK_SUCCESS)
4890 {
4891 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4893 return false;
4894 }
4895
4896 return true;
4897}
4898
4899VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4900 VkDevice device,
4901 const VkFramebufferCreateInfo* pCreateInfo,
4902 VkFramebuffer* pFramebuffer)
4903{
4904 PreCreateFramebuffer(device, pCreateInfo);
4905
4906 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4907
4908 PostCreateFramebuffer(device, pFramebuffer, result);
4909
4910 return result;
4911}
4912
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004913bool PreCreateRenderPass(
4914 VkDevice device,
4915 const VkRenderPassCreateInfo* pCreateInfo)
4916{
4917 if(pCreateInfo != nullptr)
4918 {
4919 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4920 {
4921 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4922 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4923 return false;
4924 }
4925 if(pCreateInfo->pAttachments != nullptr)
4926 {
4927 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4928 {
4929 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4930 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4931 return false;
4932 }
4933 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4934 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4935 {
4936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4937 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4938 return false;
4939 }
4940 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4941 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4942 {
4943 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4944 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4945 return false;
4946 }
4947 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4948 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4949 {
4950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4951 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4952 return false;
4953 }
4954 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4955 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4956 {
4957 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4958 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4959 return false;
4960 }
4961 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4962 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4963 {
4964 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4965 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4966 return false;
4967 }
4968 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4969 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4970 {
4971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4972 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4973 return false;
4974 }
4975 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4976 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4977 {
4978 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4979 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4980 return false;
4981 }
4982 }
4983 if(pCreateInfo->pSubpasses != nullptr)
4984 {
4985 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4986 {
4987 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4988 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4989 return false;
4990 }
4991 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4992 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4993 {
4994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4995 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4996 return false;
4997 }
Cody Northropa505dda2015-08-04 11:16:41 -06004998 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004999 {
Cody Northropa505dda2015-08-04 11:16:41 -06005000 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5001 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005002 {
5003 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005004 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005005 return false;
5006 }
5007 }
Cody Northropa505dda2015-08-04 11:16:41 -06005008 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005009 {
Cody Northropa505dda2015-08-04 11:16:41 -06005010 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5011 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005012 {
5013 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005014 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005015 return false;
5016 }
5017 }
Cody Northropa505dda2015-08-04 11:16:41 -06005018 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005019 {
Cody Northropa505dda2015-08-04 11:16:41 -06005020 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5021 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005022 {
5023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005024 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005025 return false;
5026 }
5027 }
5028 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5029 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5030 {
5031 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5032 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5033 return false;
5034 }
Cody Northropa505dda2015-08-04 11:16:41 -06005035 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005036 {
Cody Northropa505dda2015-08-04 11:16:41 -06005037 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5038 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005039 {
5040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005041 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005042 return false;
5043 }
5044 }
5045 }
5046 if(pCreateInfo->pDependencies != nullptr)
5047 {
5048 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5049 {
5050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5051 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5052 return false;
5053 }
5054 }
5055 }
5056
5057 return true;
5058}
5059
5060bool PostCreateRenderPass(
5061 VkDevice device,
5062 VkRenderPass* pRenderPass,
5063 VkResult result)
5064{
5065
5066 if(pRenderPass != nullptr)
5067 {
5068 }
5069
5070 if(result < VK_SUCCESS)
5071 {
5072 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5074 return false;
5075 }
5076
5077 return true;
5078}
5079
5080VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5081 VkDevice device,
5082 const VkRenderPassCreateInfo* pCreateInfo,
5083 VkRenderPass* pRenderPass)
5084{
5085 PreCreateRenderPass(device, pCreateInfo);
5086
5087 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5088
5089 PostCreateRenderPass(device, pRenderPass, result);
5090
5091 return result;
5092}
5093
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005094bool PostGetRenderAreaGranularity(
5095 VkDevice device,
5096 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005097 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005098{
5099
5100
5101 if(pGranularity != nullptr)
5102 {
5103 }
5104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005105 return true;
5106}
5107
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005108VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005109 VkDevice device,
5110 VkRenderPass renderPass,
5111 VkExtent2D* pGranularity)
5112{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005113 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005114
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005115 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005116}
5117
5118bool PreCreateCommandPool(
5119 VkDevice device,
5120 const VkCmdPoolCreateInfo* pCreateInfo)
5121{
5122 if(pCreateInfo != nullptr)
5123 {
5124 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5125 {
5126 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5127 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5128 return false;
5129 }
5130 }
5131
5132 return true;
5133}
5134
5135bool PostCreateCommandPool(
5136 VkDevice device,
5137 VkCmdPool* pCmdPool,
5138 VkResult result)
5139{
5140
5141 if(pCmdPool != nullptr)
5142 {
5143 }
5144
5145 if(result < VK_SUCCESS)
5146 {
5147 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5148 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5149 return false;
5150 }
5151
5152 return true;
5153}
5154
5155VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5156 VkDevice device,
5157 const VkCmdPoolCreateInfo* pCreateInfo,
5158 VkCmdPool* pCmdPool)
5159{
5160 PreCreateCommandPool(device, pCreateInfo);
5161
5162 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5163
5164 PostCreateCommandPool(device, pCmdPool, result);
5165
5166 return result;
5167}
5168
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005169bool PostResetCommandPool(
5170 VkDevice device,
5171 VkCmdPool cmdPool,
5172 VkCmdPoolResetFlags flags,
5173 VkResult result)
5174{
5175
5176
5177
5178 if(result < VK_SUCCESS)
5179 {
5180 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5182 return false;
5183 }
5184
5185 return true;
5186}
5187
5188VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5189 VkDevice device,
5190 VkCmdPool cmdPool,
5191 VkCmdPoolResetFlags flags)
5192{
5193 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5194
5195 PostResetCommandPool(device, cmdPool, flags, result);
5196
5197 return result;
5198}
5199
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005200bool PreCreateCommandBuffer(
5201 VkDevice device,
5202 const VkCmdBufferCreateInfo* pCreateInfo)
5203{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005204 if(pCreateInfo != nullptr)
5205 {
5206 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005209 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005210 return false;
5211 }
5212 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5213 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5214 {
5215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005216 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005217 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005218 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005219 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005221 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005222}
5223
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005224bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005225 VkDevice device,
5226 VkCmdBuffer* pCmdBuffer,
5227 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005228{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005229
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005230 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005232 }
5233
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005234 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235 {
5236 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005237 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5238 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005239 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005240
5241 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005242}
5243
5244VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5245 VkDevice device,
5246 const VkCmdBufferCreateInfo* pCreateInfo,
5247 VkCmdBuffer* pCmdBuffer)
5248{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005249 PreCreateCommandBuffer(device, pCreateInfo);
5250
Jeremy Hayes99a96322015-06-26 12:48:09 -06005251 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5252
5253 PostCreateCommandBuffer(device, pCmdBuffer, result);
5254
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005255 return result;
5256}
5257
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005258bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005259 VkCmdBuffer cmdBuffer,
5260 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005261{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005262 if(pBeginInfo != nullptr)
5263 {
5264 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005265 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005266 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005267 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005268 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005269 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005270 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005271
5272 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005273}
5274
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005275bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005276 VkCmdBuffer cmdBuffer,
5277 VkResult result)
5278{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005279
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005280 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005281 {
5282 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005283 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5284 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005285 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005286
5287 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005288}
5289
5290VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5291 VkCmdBuffer cmdBuffer,
5292 const VkCmdBufferBeginInfo* pBeginInfo)
5293{
5294 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005295
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5297
5298 PostBeginCommandBuffer(cmdBuffer, result);
5299
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005300 return result;
5301}
5302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005303bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 VkCmdBuffer cmdBuffer,
5305 VkResult result)
5306{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005307
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005308 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 {
5310 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005311 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5312 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005314
5315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316}
5317
5318VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5319 VkCmdBuffer cmdBuffer)
5320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005321 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5322
5323 PostEndCommandBuffer(cmdBuffer, result);
5324
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005325 return result;
5326}
5327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005328bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005329 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005330 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005331 VkResult result)
5332{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005333
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005334
5335 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005336 {
5337 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005338 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5339 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005340 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005341
5342 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343}
5344
5345VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005346 VkCmdBuffer cmdBuffer,
5347 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005348{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005349 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005350
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005351 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005352
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005353 return result;
5354}
5355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005357 VkCmdBuffer cmdBuffer,
5358 VkPipelineBindPoint pipelineBindPoint,
5359 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005360{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005361
5362 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5363 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5364 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005365 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005366 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005367 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368 }
5369
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005370
5371 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005372}
5373
Jeremy Hayes99a96322015-06-26 12:48:09 -06005374VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5375 VkCmdBuffer cmdBuffer,
5376 VkPipelineBindPoint pipelineBindPoint,
5377 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5380
5381 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5382}
5383
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005384VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005385{
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5387}
5388
5389VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5390{
5391 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392}
5393
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005394VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005396 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005397}
5398
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005399VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005400{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005401 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005402}
5403
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005404VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005405{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005406 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northrop12365112015-08-17 11:10:49 -06005407}
5408
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005409VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005410{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005411 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005412}
5413
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005414VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005415{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005416 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005417}
5418
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005419VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005420{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005421 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005422}
5423
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005424VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005425{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005426 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005427}
5428
5429bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430 VkCmdBuffer cmdBuffer,
5431 const VkDescriptorSet* pDescriptorSets,
5432 const uint32_t* pDynamicOffsets)
5433{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005434 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005437
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005438 if(pDynamicOffsets != nullptr)
5439 {
5440 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005441
5442 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005443}
5444
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005445bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446 VkCmdBuffer cmdBuffer,
5447 VkPipelineBindPoint pipelineBindPoint,
5448 VkPipelineLayout layout,
5449 uint32_t firstSet,
5450 uint32_t setCount,
5451 uint32_t dynamicOffsetCount)
5452{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005453
5454 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5455 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5456 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005458 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005459 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 }
5461
5462
5463
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005464
5465
5466 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467}
5468
5469VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5470 VkCmdBuffer cmdBuffer,
5471 VkPipelineBindPoint pipelineBindPoint,
5472 VkPipelineLayout layout,
5473 uint32_t firstSet,
5474 uint32_t setCount,
5475 const VkDescriptorSet* pDescriptorSets,
5476 uint32_t dynamicOffsetCount,
5477 const uint32_t* pDynamicOffsets)
5478{
5479 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005480
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5482
5483 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5484}
5485
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005486bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005487 VkCmdBuffer cmdBuffer,
5488 VkBuffer buffer,
5489 VkDeviceSize offset,
5490 VkIndexType indexType)
5491{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005492
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493
5494
5495 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5496 indexType > VK_INDEX_TYPE_END_RANGE)
5497 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005498 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005499 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005500 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005502
5503 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504}
5505
5506VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5507 VkCmdBuffer cmdBuffer,
5508 VkBuffer buffer,
5509 VkDeviceSize offset,
5510 VkIndexType indexType)
5511{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005512 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5513
5514 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5515}
5516
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005517bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005518 VkCmdBuffer cmdBuffer,
5519 const VkBuffer* pBuffers,
5520 const VkDeviceSize* pOffsets)
5521{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005522 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524 }
5525
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005526 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005527 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005529
5530 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531}
5532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 VkCmdBuffer cmdBuffer,
5535 uint32_t startBinding,
5536 uint32_t bindingCount)
5537{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538
5539
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005540
5541 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005542}
5543
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005544VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545 VkCmdBuffer cmdBuffer,
5546 uint32_t startBinding,
5547 uint32_t bindingCount,
5548 const VkBuffer* pBuffers,
5549 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005550{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005552
Jeremy Hayes99a96322015-06-26 12:48:09 -06005553 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5554
5555 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005556}
5557
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005558bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559 VkCmdBuffer cmdBuffer,
5560 uint32_t firstVertex,
5561 uint32_t vertexCount,
5562 uint32_t firstInstance,
5563 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005564{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565
5566
5567
5568
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005569
5570 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005571}
5572
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5574 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005575 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005576 uint32_t instanceCount,
5577 uint32_t firstVertex,
5578 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005579{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005580 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005581
5582 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005583}
5584
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005585bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005586 VkCmdBuffer cmdBuffer,
5587 uint32_t firstIndex,
5588 uint32_t indexCount,
5589 int32_t vertexOffset,
5590 uint32_t firstInstance,
5591 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005592{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593
5594
5595
5596
5597
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005598
5599 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005600}
5601
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5603 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005604 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005605 uint32_t instanceCount,
5606 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005607 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005608 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005609{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005610 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611
5612 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5613}
5614
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005615bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616 VkCmdBuffer cmdBuffer,
5617 VkBuffer buffer,
5618 VkDeviceSize offset,
5619 uint32_t count,
5620 uint32_t stride)
5621{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005622
5623
5624
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005625
5626
5627 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628}
5629
5630VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5631 VkCmdBuffer cmdBuffer,
5632 VkBuffer buffer,
5633 VkDeviceSize offset,
5634 uint32_t count,
5635 uint32_t stride)
5636{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5638
5639 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5640}
5641
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005642bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 VkCmdBuffer cmdBuffer,
5644 VkBuffer buffer,
5645 VkDeviceSize offset,
5646 uint32_t count,
5647 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005648{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649
5650
5651
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005652
5653
5654 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005655}
5656
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5658 VkCmdBuffer cmdBuffer,
5659 VkBuffer buffer,
5660 VkDeviceSize offset,
5661 uint32_t count,
5662 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005663{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5665
5666 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5667}
5668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005669bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005670 VkCmdBuffer cmdBuffer,
5671 uint32_t x,
5672 uint32_t y,
5673 uint32_t z)
5674{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675
5676
5677
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005678
5679 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680}
5681
5682VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5683 VkCmdBuffer cmdBuffer,
5684 uint32_t x,
5685 uint32_t y,
5686 uint32_t z)
5687{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005688 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5689
5690 PostCmdDispatch(cmdBuffer, x, y, z);
5691}
5692
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005693bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694 VkCmdBuffer cmdBuffer,
5695 VkBuffer buffer,
5696 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005697{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005698
Jeremy Hayes99a96322015-06-26 12:48:09 -06005699
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005700
5701 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005702}
5703
Jeremy Hayes99a96322015-06-26 12:48:09 -06005704VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5705 VkCmdBuffer cmdBuffer,
5706 VkBuffer buffer,
5707 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005708{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5710
5711 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005712}
5713
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005715 VkCmdBuffer cmdBuffer,
5716 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005717{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005718 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005719 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005721
5722 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005723}
5724
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005725bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726 VkCmdBuffer cmdBuffer,
5727 VkBuffer srcBuffer,
5728 VkBuffer destBuffer,
5729 uint32_t regionCount)
5730{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005731
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005734
5735 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005736}
5737
5738VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5739 VkCmdBuffer cmdBuffer,
5740 VkBuffer srcBuffer,
5741 VkBuffer destBuffer,
5742 uint32_t regionCount,
5743 const VkBufferCopy* pRegions)
5744{
5745 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005746
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5748
5749 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5750}
5751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005752bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 VkCmdBuffer cmdBuffer,
5754 const VkImageCopy* pRegions)
5755{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005756 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005757 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005758 if ((pRegions->srcSubresource.aspect &
5759 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005761 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005762 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005765 if ((pRegions->destSubresource.aspect &
5766 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005768 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005769 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005770 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005772 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005773
5774 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775}
5776
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005777bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005778 VkCmdBuffer cmdBuffer,
5779 VkImage srcImage,
5780 VkImageLayout srcImageLayout,
5781 VkImage destImage,
5782 VkImageLayout destImageLayout,
5783 uint32_t regionCount)
5784{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786
5787 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5788 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5789 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005790 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005791 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005792 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793 }
5794
Jeremy Hayes99a96322015-06-26 12:48:09 -06005795
5796 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5797 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5798 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005799 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005800 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005801 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005802 }
5803
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005804
5805 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806}
5807
5808VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5809 VkCmdBuffer cmdBuffer,
5810 VkImage srcImage,
5811 VkImageLayout srcImageLayout,
5812 VkImage destImage,
5813 VkImageLayout destImageLayout,
5814 uint32_t regionCount,
5815 const VkImageCopy* pRegions)
5816{
5817 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005818
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5820
5821 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5822}
5823
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005824bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825 VkCmdBuffer cmdBuffer,
5826 const VkImageBlit* pRegions)
5827{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005828 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005829 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005830 if ((pRegions->srcSubresource.aspect &
5831 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005833 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005834 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005835 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005837 if ((pRegions->destSubresource.aspect &
5838 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005840 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005841 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005842 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005844 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005845
5846 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847}
5848
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005849bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005850 VkCmdBuffer cmdBuffer,
5851 VkImage srcImage,
5852 VkImageLayout srcImageLayout,
5853 VkImage destImage,
5854 VkImageLayout destImageLayout,
5855 uint32_t regionCount,
5856 VkTexFilter filter)
5857{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005858
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859
5860 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5861 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5862 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005864 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005865 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005866 }
5867
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868
5869 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5870 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5871 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005873 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005874 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005875 }
5876
5877
5878 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5879 filter > VK_TEX_FILTER_END_RANGE)
5880 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005881 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005882 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005883 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005884 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005885
5886 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887}
5888
5889VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5890 VkCmdBuffer cmdBuffer,
5891 VkImage srcImage,
5892 VkImageLayout srcImageLayout,
5893 VkImage destImage,
5894 VkImageLayout destImageLayout,
5895 uint32_t regionCount,
5896 const VkImageBlit* pRegions,
5897 VkTexFilter filter)
5898{
5899 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005900
Jeremy Hayes99a96322015-06-26 12:48:09 -06005901 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5902
5903 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5904}
5905
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005906bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907 VkCmdBuffer cmdBuffer,
5908 const VkBufferImageCopy* pRegions)
5909{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005910 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005911 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005912 if ((pRegions->imageSubresource.aspect &
5913 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005916 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005917 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005918 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005919 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005920
5921 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922}
5923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005924bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005925 VkCmdBuffer cmdBuffer,
5926 VkBuffer srcBuffer,
5927 VkImage destImage,
5928 VkImageLayout destImageLayout,
5929 uint32_t regionCount)
5930{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931
Jeremy Hayes99a96322015-06-26 12:48:09 -06005932
Jeremy Hayes99a96322015-06-26 12:48:09 -06005933
5934 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5935 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5936 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005937 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005938 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005939 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005940 }
5941
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005942
5943 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005944}
5945
5946VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5947 VkCmdBuffer cmdBuffer,
5948 VkBuffer srcBuffer,
5949 VkImage destImage,
5950 VkImageLayout destImageLayout,
5951 uint32_t regionCount,
5952 const VkBufferImageCopy* pRegions)
5953{
5954 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005955
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5957
5958 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5959}
5960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005961bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005962 VkCmdBuffer cmdBuffer,
5963 const VkBufferImageCopy* pRegions)
5964{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005965 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005967 if ((pRegions->imageSubresource.aspect &
5968 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005969 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005970 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005971 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005972 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005974 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005975
5976 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005977}
5978
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005979bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005980 VkCmdBuffer cmdBuffer,
5981 VkImage srcImage,
5982 VkImageLayout srcImageLayout,
5983 VkBuffer destBuffer,
5984 uint32_t regionCount)
5985{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986
Jeremy Hayes99a96322015-06-26 12:48:09 -06005987
5988 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5989 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5990 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005991 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005992 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005993 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994 }
5995
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005997
5998 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005999}
6000
6001VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6002 VkCmdBuffer cmdBuffer,
6003 VkImage srcImage,
6004 VkImageLayout srcImageLayout,
6005 VkBuffer destBuffer,
6006 uint32_t regionCount,
6007 const VkBufferImageCopy* pRegions)
6008{
6009 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006010
Jeremy Hayes99a96322015-06-26 12:48:09 -06006011 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6012
6013 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6014}
6015
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006016bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017 VkCmdBuffer cmdBuffer,
6018 const uint32_t* pData)
6019{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006020 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006021 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006023
6024 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006025}
6026
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006027bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028 VkCmdBuffer cmdBuffer,
6029 VkBuffer destBuffer,
6030 VkDeviceSize destOffset,
6031 VkDeviceSize dataSize)
6032{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033
6034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035
6036
6037 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038}
6039
6040VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6041 VkCmdBuffer cmdBuffer,
6042 VkBuffer destBuffer,
6043 VkDeviceSize destOffset,
6044 VkDeviceSize dataSize,
6045 const uint32_t* pData)
6046{
6047 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006048
Jeremy Hayes99a96322015-06-26 12:48:09 -06006049 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6050
6051 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6052}
6053
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006054bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055 VkCmdBuffer cmdBuffer,
6056 VkBuffer destBuffer,
6057 VkDeviceSize destOffset,
6058 VkDeviceSize fillSize,
6059 uint32_t data)
6060{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006061
6062
6063
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006064
6065
6066 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067}
6068
6069VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6070 VkCmdBuffer cmdBuffer,
6071 VkBuffer destBuffer,
6072 VkDeviceSize destOffset,
6073 VkDeviceSize fillSize,
6074 uint32_t data)
6075{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006076 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6077
6078 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6079}
6080
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006081bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12006083 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084 const VkImageSubresourceRange* pRanges)
6085{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006086 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006087 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088 }
6089
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006090 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006092 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006093 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006094
6095 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006096}
6097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006098bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099 VkCmdBuffer cmdBuffer,
6100 VkImage image,
6101 VkImageLayout imageLayout,
6102 uint32_t rangeCount)
6103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105
6106 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6107 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6108 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006109 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006110 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006111 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112 }
6113
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006114
6115 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006116}
6117
6118VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6119 VkCmdBuffer cmdBuffer,
6120 VkImage image,
6121 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12006122 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006123 uint32_t rangeCount,
6124 const VkImageSubresourceRange* pRanges)
6125{
6126 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006127
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6129
6130 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6131}
6132
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006133bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006134 VkCmdBuffer cmdBuffer,
6135 const VkImageSubresourceRange* pRanges)
6136{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006137 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006139 /*
6140 * TODO: How do we validation pRanges->aspectMask?
6141 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6142 * VK_IMAGE_ASPECT_STENCIL_BIT.
6143 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006145
6146 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006147}
6148
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006149bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006150 VkCmdBuffer cmdBuffer,
6151 VkImage image,
6152 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006153 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154 uint32_t rangeCount)
6155{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006156
Jeremy Hayes99a96322015-06-26 12:48:09 -06006157
6158 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6159 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6160 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006161 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006162 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006163 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164 }
6165
6166
6167
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006168
6169 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006170}
6171
Chris Forbesd9be82b2015-06-22 17:21:59 +12006172VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173 VkCmdBuffer cmdBuffer,
6174 VkImage image,
6175 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006176 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006177 uint32_t rangeCount,
6178 const VkImageSubresourceRange* pRanges)
6179{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006180 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006181
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006182 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006184 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006185}
6186
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006187bool PreCmdClearAttachments(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006188 VkCmdBuffer cmdBuffer,
6189 const VkClearColorValue* pColor,
6190 const VkRect3D* pRects)
6191{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006192 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006193 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006194 }
6195
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006196 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006197 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006198 }
6199
6200 return true;
6201}
6202
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006203VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6204 VkCmdBuffer cmdBuffer,
6205 uint32_t attachmentCount,
6206 const VkClearAttachment* pAttachments,
6207 uint32_t rectCount,
6208 const VkRect3D* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006209{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006210 for (uint32_t i = 0; i < attachmentCount; i++) {
6211 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006212 }
6213
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006214 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006215}
6216
6217bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218 VkCmdBuffer cmdBuffer,
6219 const VkImageResolve* pRegions)
6220{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006221 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006223 if ((pRegions->srcSubresource.aspect &
6224 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006225 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006226 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006227 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006228 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006229 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006230 if ((pRegions->destSubresource.aspect &
6231 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006233 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006234 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006235 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006236 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006237 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006238
6239 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006240}
6241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006242bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243 VkCmdBuffer cmdBuffer,
6244 VkImage srcImage,
6245 VkImageLayout srcImageLayout,
6246 VkImage destImage,
6247 VkImageLayout destImageLayout,
6248 uint32_t regionCount)
6249{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251
6252 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6253 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6254 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006255 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006256 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006258 }
6259
Jeremy Hayes99a96322015-06-26 12:48:09 -06006260
6261 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6262 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6263 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006264 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006265 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006266 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267 }
6268
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006269
6270 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006271}
6272
6273VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6274 VkCmdBuffer cmdBuffer,
6275 VkImage srcImage,
6276 VkImageLayout srcImageLayout,
6277 VkImage destImage,
6278 VkImageLayout destImageLayout,
6279 uint32_t regionCount,
6280 const VkImageResolve* pRegions)
6281{
6282 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006283
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6285
6286 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6287}
6288
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006289bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006290 VkCmdBuffer cmdBuffer,
6291 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006292 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294
Jeremy Hayes99a96322015-06-26 12:48:09 -06006295
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006296
6297 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298}
6299
6300VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6301 VkCmdBuffer cmdBuffer,
6302 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006303 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006305 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006306
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006307 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006308}
6309
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006310bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006311 VkCmdBuffer cmdBuffer,
6312 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006313 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006315
Jeremy Hayes99a96322015-06-26 12:48:09 -06006316
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006317
6318 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006319}
6320
6321VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6322 VkCmdBuffer cmdBuffer,
6323 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006324 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006325{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006326 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006328 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006329}
6330
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006331bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006332 VkCmdBuffer cmdBuffer,
6333 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006334 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006335{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006336 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006337 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338 }
6339
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006340 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006341 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006343
6344 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006345}
6346
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006347bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006348 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006349 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006350 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006351 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006352 uint32_t memBarrierCount)
6353{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006354
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006355
Jeremy Hayes99a96322015-06-26 12:48:09 -06006356
6357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006358
6359 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006360}
6361
6362VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6363 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006364 uint32_t eventCount,
6365 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006366 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006367 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006368 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006369 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006370{
6371 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006372
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006373 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006374
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006375 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006376}
6377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006378bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006379 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006380 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006381{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006382 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006384 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385
6386 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006387}
6388
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006389bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006390 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006391 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006392 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006393 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006394 uint32_t memBarrierCount)
6395{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006396
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006397
Jeremy Hayes99a96322015-06-26 12:48:09 -06006398
6399
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006400
6401 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006402}
6403
6404VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6405 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006406 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006407 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006408 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006409 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006410 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006411{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006412 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006413
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006414 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006415
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006416 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417}
6418
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006420 VkCmdBuffer cmdBuffer,
6421 VkQueryPool queryPool,
6422 uint32_t slot,
6423 VkQueryControlFlags flags)
6424{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006425
Jeremy Hayes99a96322015-06-26 12:48:09 -06006426
6427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006428
6429 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430}
6431
6432VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6433 VkCmdBuffer cmdBuffer,
6434 VkQueryPool queryPool,
6435 uint32_t slot,
6436 VkQueryControlFlags flags)
6437{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006438 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6439
6440 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6441}
6442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006444 VkCmdBuffer cmdBuffer,
6445 VkQueryPool queryPool,
6446 uint32_t slot)
6447{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448
Jeremy Hayes99a96322015-06-26 12:48:09 -06006449
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006450
6451 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452}
6453
6454VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6455 VkCmdBuffer cmdBuffer,
6456 VkQueryPool queryPool,
6457 uint32_t slot)
6458{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6460
6461 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6462}
6463
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006464bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 VkCmdBuffer cmdBuffer,
6466 VkQueryPool queryPool,
6467 uint32_t startQuery,
6468 uint32_t queryCount)
6469{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006471
6472
6473
6474 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475}
6476
6477VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6478 VkCmdBuffer cmdBuffer,
6479 VkQueryPool queryPool,
6480 uint32_t startQuery,
6481 uint32_t queryCount)
6482{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6484
6485 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6486}
6487
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006488bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 VkCmdBuffer cmdBuffer,
6490 VkTimestampType timestampType,
6491 VkBuffer destBuffer,
6492 VkDeviceSize destOffset)
6493{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494
6495 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6496 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6497 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006498 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006499 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006500 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501 }
6502
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006504
6505 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506}
6507
6508VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6509 VkCmdBuffer cmdBuffer,
6510 VkTimestampType timestampType,
6511 VkBuffer destBuffer,
6512 VkDeviceSize destOffset)
6513{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6515
6516 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6517}
6518
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006519bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006520 VkCmdBuffer cmdBuffer,
6521 VkQueryPool queryPool,
6522 uint32_t startQuery,
6523 uint32_t queryCount,
6524 VkBuffer destBuffer,
6525 VkDeviceSize destOffset,
6526 VkDeviceSize destStride,
6527 VkQueryResultFlags flags)
6528{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529
6530
6531
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006532
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533
6534
6535
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006536
6537 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006538}
6539
Jeremy Hayesad367152015-04-17 10:36:53 -06006540VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006541 VkCmdBuffer cmdBuffer,
6542 VkQueryPool queryPool,
6543 uint32_t startQuery,
6544 uint32_t queryCount,
6545 VkBuffer destBuffer,
6546 VkDeviceSize destOffset,
6547 VkDeviceSize destStride,
6548 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006549{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6551
6552 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006553}
6554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006555bool PreCmdPushConstants(
6556 VkCmdBuffer cmdBuffer,
6557 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006559 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006562
6563 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564}
6565
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006566bool PostCmdPushConstants(
6567 VkCmdBuffer cmdBuffer,
6568 VkPipelineLayout layout,
6569 VkShaderStageFlags stageFlags,
6570 uint32_t start,
6571 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006575
6576
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006577
6578 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579}
6580
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006581VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6582 VkCmdBuffer cmdBuffer,
6583 VkPipelineLayout layout,
6584 VkShaderStageFlags stageFlags,
6585 uint32_t start,
6586 uint32_t length,
6587 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006589 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006590
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006591 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006593 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006594}
6595
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006596bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006598 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006599{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006600 if(pRenderPassBegin != nullptr)
6601 {
6602 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006604 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006605 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006606 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006607 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006608 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006610 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006611 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006612
6613 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006614}
6615
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006616bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006617 VkCmdBuffer cmdBuffer,
6618 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006619{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006620
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006621 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6622 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6623 {
6624 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6625 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6626 return false;
6627 }
6628
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006629 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006630}
6631
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6633 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006634 const VkRenderPassBeginInfo* pRenderPassBegin,
6635 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006636{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006637 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6638
Chia-I Wu08accc62015-07-07 11:50:03 +08006639 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006641 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006642}
6643
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006644bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006645 VkCmdBuffer cmdBuffer,
6646 VkRenderPassContents contents)
6647{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006648
6649 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006650 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006651 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006652 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006653 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6654 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006655 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006656
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006657 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006658}
6659
6660VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6661 VkCmdBuffer cmdBuffer,
6662 VkRenderPassContents contents)
6663{
Chia-I Wu08accc62015-07-07 11:50:03 +08006664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6665
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006666 PostCmdNextSubpass(cmdBuffer, contents);
6667}
6668
6669bool PostCmdEndRenderPass(
6670 VkCmdBuffer cmdBuffer)
6671{
6672
6673 return true;
6674}
6675
6676VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6677 VkCmdBuffer cmdBuffer)
6678{
6679 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6680
6681 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006682}
6683
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006684bool PreCmdExecuteCommands(
6685 VkCmdBuffer cmdBuffer,
6686 const VkCmdBuffer* pCmdBuffers)
6687{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006688 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006689 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006690 }
6691
6692 return true;
6693}
6694
6695bool PostCmdExecuteCommands(
6696 VkCmdBuffer cmdBuffer,
6697 uint32_t cmdBuffersCount)
6698{
6699
6700
6701 return true;
6702}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006703
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006704VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006705 VkCmdBuffer cmdBuffer,
6706 uint32_t cmdBuffersCount,
6707 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006708{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006709 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6710
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006711 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6712
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006713 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006714}
6715
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006716VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006717{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006718 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006719 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006720 }
6721
Jon Ashburn8fd08252015-05-28 16:25:02 -06006722 /* loader uses this to force layer initialization; device object is wrapped */
6723 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006724 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006726 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006727
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006728 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006729 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006735 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006736 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006738 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006739 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006740 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006741 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006742 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006743 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006744 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006745 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006746 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006747 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006748 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006749 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006750 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006751 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006752 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006753 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006754 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006755 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006756 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006757 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006758 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006759 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006760 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006761 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006762 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006763 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006764 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006765 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006766 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006767 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006768 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006769 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006770 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006771 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006772 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006773 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006774 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006775 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006776 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006777 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006778 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006779 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006780 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006781 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006782 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006783 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006784 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006785 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006786 if (!strcmp(funcName, "vkCreateShaderModule"))
6787 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006788 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006789 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006790 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006791 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006792 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006793 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006794 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006795 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006796 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006797 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006798 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006799 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006800 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006801 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006802 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006803 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006804 if (!strcmp(funcName, "vkCmdSetViewport"))
6805 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006806 if (!strcmp(funcName, "vkCmdSetScissor"))
6807 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006808 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6809 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6810 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6811 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6812 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6813 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6814 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6815 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6816 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6817 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6818 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6819 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6820 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6821 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006822 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006823 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006824 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006825 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006826 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006827 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006828 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006829 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006830 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006831 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006832 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006833 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006834 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006835 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006836 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006837 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006838 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006839 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006840 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006841 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006842 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006843 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006844 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006845 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006846 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006847 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006848 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006849 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006850 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006851 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006852 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006853 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006854 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006855 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006856 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006857 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006858 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006859 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006860 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006861 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006862 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006863 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006864 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006865 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006866 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006867 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006868 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006869 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006870 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006871 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006872 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006873 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006874 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006875 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006876 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006877 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006878 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006879 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006880 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006881 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006882 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006883 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006884 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006885 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006886 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006887 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006888 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006889 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006890 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006891 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006892 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006893 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006894
Jon Ashburneab34492015-06-01 09:37:38 -06006895 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006896 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006897 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006898 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006899 }
6900}
6901
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006902VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006903{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006904 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006905 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006906 }
6907
Jon Ashburn8fd08252015-05-28 16:25:02 -06006908 /* loader uses this to force layer initialization; instance object is wrapped */
6909 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006910 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006911 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006912 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006913
Jeremy Hayes99a96322015-06-26 12:48:09 -06006914 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006915 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006916 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006917 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006918 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006919 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006920 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006921 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006922 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006923 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006924 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006925 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006926 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6927 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6928 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6929 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6930 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6931 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6932 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6933 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006934
Jeremy Hayes99a96322015-06-26 12:48:09 -06006935 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006936 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006937 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006938 return fptr;
6939
Jeremy Hayes99a96322015-06-26 12:48:09 -06006940 {
6941 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6942 return NULL;
6943 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6944 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006945}