blob: 3d3ad0cef343ebbb8bbbf1520d6835a19f9d7b8a [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060034
Tobin Ehlis7a51d902015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlis7a51d902015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060042
Tobin Ehlis56d204a2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060047
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski3723c512015-05-26 10:58:40 -050052
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060056
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060059{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060061 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060062#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060065 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060066
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060078 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060079 return data->report_data;
80}
81
82static void InitParamChecker(layer_data *data)
83{
84 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
85
86 uint32_t debug_action = 0;
87 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
88 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
89 {
90 FILE *log_output = NULL;
91 const char* option_str = getLayerOption("ParamCheckerLogFilename");
92 if(option_str)
93 {
94 log_output = fopen(option_str, "w");
95 }
Tobin Ehlisaf14e9f2015-09-01 11:59:36 -060096 if (log_output == NULL) {
97 if (option_str)
98 std::cout << std::endl << "ParamChecker ERROR: Bad output filename specified: " << option_str << ". Writing to STDOUT instead" << std::endl << std::endl;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060099 log_output = stdout;
100 }
101
102 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
103 }
104}
105
106VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
107 VkInstance instance,
108 VkFlags msgFlags,
109 const PFN_vkDbgMsgCallback pfnMsgCallback,
110 void* pUserData,
111 VkDbgMsgCallback* pMsgCallback)
112{
113 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
114 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
115
116 if (result == VK_SUCCESS)
117 {
118 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
119 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
120 }
121
122 return result;
123}
124
125VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
126 VkInstance instance,
127 VkDbgMsgCallback msgCallback)
128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
130 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
131
132 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
133 layer_destroy_msg_callback(data->report_data, msgCallback);
134
135 return result;
136}
137
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600138static const VkLayerProperties pc_global_layers[] = {
139 {
140 "ParamChecker",
141 VK_API_VERSION,
142 VK_MAKE_VERSION(0, 1, 0),
143 "Validation layer: ParamChecker",
144 }
145};
Tony Barbour426b9052015-06-24 16:06:58 -0600146
147VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600148 const char *pLayerName,
149 uint32_t *pCount,
150 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600151{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600152 /* ParamChecker does not have any global extensions */
153 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600154}
155
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600156VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
157 uint32_t *pCount,
158 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600159{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600160 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
161 pc_global_layers,
162 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600163}
164
165VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600166 VkPhysicalDevice physicalDevice,
167 const char* pLayerName,
168 uint32_t* pCount,
169 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600170{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600171 /* ParamChecker does not have any physical device extensions */
172 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600173}
174
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600175VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
176 VkPhysicalDevice physicalDevice,
177 uint32_t* pCount,
178 VkLayerProperties* pProperties)
179{
180 /* ParamChecker's physical device layers are the same as global */
181 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
182 pCount, pProperties);
183}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600184
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600185// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600186
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600187static
188std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600189{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600190 switch(enumerator)
191 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600192 case VK_RESULT_MAX_ENUM:
193 {
194 return "VK_RESULT_MAX_ENUM";
195 break;
196 }
197 case VK_ERROR_INVALID_LAYER:
198 {
199 return "VK_ERROR_INVALID_LAYER";
200 break;
201 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600202 case VK_ERROR_MEMORY_NOT_BOUND:
203 {
204 return "VK_ERROR_MEMORY_NOT_BOUND";
205 break;
206 }
207 case VK_ERROR_BUILDING_COMMAND_BUFFER:
208 {
209 return "VK_ERROR_BUILDING_COMMAND_BUFFER";
210 break;
211 }
212 case VK_ERROR_INCOMPATIBLE_DRIVER:
213 {
214 return "VK_ERROR_INCOMPATIBLE_DRIVER";
215 break;
216 }
217 case VK_ERROR_MEMORY_UNMAP_FAILED:
218 {
219 return "VK_ERROR_MEMORY_UNMAP_FAILED";
220 break;
221 }
222 case VK_ERROR_MEMORY_MAP_FAILED:
223 {
224 return "VK_ERROR_MEMORY_MAP_FAILED";
225 break;
226 }
227 case VK_ERROR_BAD_PIPELINE_DATA:
228 {
229 return "VK_ERROR_BAD_PIPELINE_DATA";
230 break;
231 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600232 case VK_ERROR_INVALID_QUEUE_TYPE:
233 {
234 return "VK_ERROR_INVALID_QUEUE_TYPE";
235 break;
236 }
237 case VK_ERROR_BAD_SHADER_CODE:
238 {
239 return "VK_ERROR_BAD_SHADER_CODE";
240 break;
241 }
242 case VK_ERROR_INVALID_IMAGE:
243 {
244 return "VK_ERROR_INVALID_IMAGE";
245 break;
246 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600247 case VK_ERROR_INVALID_FORMAT:
248 {
249 return "VK_ERROR_INVALID_FORMAT";
250 break;
251 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600252 case VK_ERROR_UNAVAILABLE:
253 {
254 return "VK_ERROR_UNAVAILABLE";
255 break;
256 }
257 case VK_INCOMPLETE:
258 {
259 return "VK_INCOMPLETE";
260 break;
261 }
262 case VK_ERROR_OUT_OF_HOST_MEMORY:
263 {
264 return "VK_ERROR_OUT_OF_HOST_MEMORY";
265 break;
266 }
267 case VK_ERROR_UNKNOWN:
268 {
269 return "VK_ERROR_UNKNOWN";
270 break;
271 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600272 case VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION:
273 {
274 return "VK_ERROR_UNSUPPORTED_SHADER_IL_VERSION";
275 break;
276 }
277 case VK_ERROR_INITIALIZATION_FAILED:
278 {
279 return "VK_ERROR_INITIALIZATION_FAILED";
280 break;
281 }
282 case VK_NOT_READY:
283 {
284 return "VK_NOT_READY";
285 break;
286 }
287 case VK_ERROR_INVALID_POINTER:
288 {
289 return "VK_ERROR_INVALID_POINTER";
290 break;
291 }
292 case VK_ERROR_INVALID_VALUE:
293 {
294 return "VK_ERROR_INVALID_VALUE";
295 break;
296 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600297 case VK_ERROR_NOT_MAPPABLE:
298 {
299 return "VK_ERROR_NOT_MAPPABLE";
300 break;
301 }
302 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
303 {
304 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
305 break;
306 }
307 case VK_EVENT_SET:
308 {
309 return "VK_EVENT_SET";
310 break;
311 }
312 case VK_TIMEOUT:
313 {
314 return "VK_TIMEOUT";
315 break;
316 }
317 case VK_ERROR_INVALID_FLAGS:
318 {
319 return "VK_ERROR_INVALID_FLAGS";
320 break;
321 }
322 case VK_EVENT_RESET:
323 {
324 return "VK_EVENT_RESET";
325 break;
326 }
327 case VK_ERROR_INVALID_DESCRIPTOR_SET_DATA:
328 {
329 return "VK_ERROR_INVALID_DESCRIPTOR_SET_DATA";
330 break;
331 }
332 case VK_UNSUPPORTED:
333 {
334 return "VK_UNSUPPORTED";
335 break;
336 }
337 case VK_ERROR_INVALID_HANDLE:
338 {
339 return "VK_ERROR_INVALID_HANDLE";
340 break;
341 }
342 case VK_ERROR_INCOMPATIBLE_DEVICE:
343 {
344 return "VK_ERROR_INCOMPATIBLE_DEVICE";
345 break;
346 }
347 case VK_SUCCESS:
348 {
349 return "VK_SUCCESS";
350 break;
351 }
352 case VK_ERROR_INCOMPATIBLE_QUEUE:
353 {
354 return "VK_ERROR_INCOMPATIBLE_QUEUE";
355 break;
356 }
357 case VK_ERROR_INVALID_EXTENSION:
358 {
359 return "VK_ERROR_INVALID_EXTENSION";
360 break;
361 }
362 case VK_ERROR_DEVICE_ALREADY_CREATED:
363 {
364 return "VK_ERROR_DEVICE_ALREADY_CREATED";
365 break;
366 }
367 case VK_ERROR_DEVICE_LOST:
368 {
369 return "VK_ERROR_DEVICE_LOST";
370 break;
371 }
372 case VK_ERROR_INVALID_ORDINAL:
373 {
374 return "VK_ERROR_INVALID_ORDINAL";
375 break;
376 }
377 case VK_ERROR_INVALID_MEMORY_SIZE:
378 {
379 return "VK_ERROR_INVALID_MEMORY_SIZE";
380 break;
381 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600382 case VK_ERROR_INCOMPLETE_COMMAND_BUFFER:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600383 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600384 return "VK_ERROR_INCOMPLETE_COMMAND_BUFFER";
385 break;
386 }
387 case VK_ERROR_INVALID_ALIGNMENT:
388 {
389 return "VK_ERROR_INVALID_ALIGNMENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600390 break;
391 }
392 default:
393 {
394 return "unrecognized enumerator";
395 break;
396 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600397 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600398}
399
400static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600401bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
402{
403 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
404 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
405 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
406 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
407 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
408 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
409 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
410 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
411 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
412 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600413 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
414 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
415 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600416 if(enumerator & (~allFlags))
417 {
418 return false;
419 }
420
421 return true;
422}
423
424static
425std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
426{
427 if(!ValidateEnumerator(enumerator))
428 {
429 return "unrecognized enumerator";
430 }
431
432 std::vector<std::string> strings;
433 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
434 {
435 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
436 }
437 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
438 {
439 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
440 }
441 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
442 {
443 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
444 }
445 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
446 {
447 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
448 }
449 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
450 {
451 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
452 }
453 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
454 {
455 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
456 }
457 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
458 {
459 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
460 }
461 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
462 {
463 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
464 }
465 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
466 {
467 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
468 }
469 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
470 {
471 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
472 }
473 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
474 {
475 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
476 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600477 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
478 {
479 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
480 }
481 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
482 {
483 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
484 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600485
486 std::string enumeratorString;
487 for(auto const& string : strings)
488 {
489 enumeratorString += string;
490
491 if(string != strings.back())
492 {
493 enumeratorString += '|';
494 }
495 }
496
497 return enumeratorString;
498}
499
500static
501bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
502{
503 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
504 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
505 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
506 VK_IMAGE_USAGE_STORAGE_BIT |
507 VK_IMAGE_USAGE_SAMPLED_BIT |
508 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
509 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600510 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600511 if(enumerator & (~allFlags))
512 {
513 return false;
514 }
515
516 return true;
517}
518
519static
520std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
521{
522 if(!ValidateEnumerator(enumerator))
523 {
524 return "unrecognized enumerator";
525 }
526
527 std::vector<std::string> strings;
528 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
529 {
530 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
531 }
532 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
533 {
534 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
535 }
536 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
537 {
538 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
539 }
540 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
541 {
542 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
543 }
544 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
545 {
546 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
547 }
548 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
549 {
550 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
551 }
552 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
553 {
554 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
555 }
556 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
557 {
558 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
559 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600560
561 std::string enumeratorString;
562 for(auto const& string : strings)
563 {
564 enumeratorString += string;
565
566 if(string != strings.back())
567 {
568 enumeratorString += '|';
569 }
570 }
571
572 return enumeratorString;
573}
574
575static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600576bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
577{
578 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
579 VK_QUEUE_DMA_BIT |
580 VK_QUEUE_COMPUTE_BIT |
581 VK_QUEUE_SPARSE_MEMMGR_BIT |
582 VK_QUEUE_GRAPHICS_BIT);
583 if(enumerator & (~allFlags))
584 {
585 return false;
586 }
587
588 return true;
589}
590
591static
592std::string EnumeratorString(VkQueueFlagBits const& enumerator)
593{
594 if(!ValidateEnumerator(enumerator))
595 {
596 return "unrecognized enumerator";
597 }
598
599 std::vector<std::string> strings;
600 if(enumerator & VK_QUEUE_EXTENDED_BIT)
601 {
602 strings.push_back("VK_QUEUE_EXTENDED_BIT");
603 }
604 if(enumerator & VK_QUEUE_DMA_BIT)
605 {
606 strings.push_back("VK_QUEUE_DMA_BIT");
607 }
608 if(enumerator & VK_QUEUE_COMPUTE_BIT)
609 {
610 strings.push_back("VK_QUEUE_COMPUTE_BIT");
611 }
612 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
613 {
614 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
615 }
616 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
617 {
618 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
619 }
620
621 std::string enumeratorString;
622 for(auto const& string : strings)
623 {
624 enumeratorString += string;
625
626 if(string != strings.back())
627 {
628 enumeratorString += '|';
629 }
630 }
631
632 return enumeratorString;
633}
634
635static
636bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
637{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600638 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
639 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600640 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
641 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
642 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
643 VK_MEMORY_PROPERTY_DEVICE_ONLY);
644 if(enumerator & (~allFlags))
645 {
646 return false;
647 }
648
649 return true;
650}
651
652static
653std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
654{
655 if(!ValidateEnumerator(enumerator))
656 {
657 return "unrecognized enumerator";
658 }
659
660 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600661 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
662 {
663 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
664 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600665 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
666 {
667 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
668 }
669 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
670 {
671 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
672 }
673 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
674 {
675 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
676 }
677 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
678 {
679 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
680 }
681 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
682 {
683 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
684 }
685
686 std::string enumeratorString;
687 for(auto const& string : strings)
688 {
689 enumeratorString += string;
690
691 if(string != strings.back())
692 {
693 enumeratorString += '|';
694 }
695 }
696
697 return enumeratorString;
698}
699
700static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600701bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600702{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600703 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600704 if(enumerator & (~allFlags))
705 {
706 return false;
707 }
708
709 return true;
710}
711
712static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600713std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600714{
715 if(!ValidateEnumerator(enumerator))
716 {
717 return "unrecognized enumerator";
718 }
719
720 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600721 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600722 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600723 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600724 }
725
726 std::string enumeratorString;
727 for(auto const& string : strings)
728 {
729 enumeratorString += string;
730
731 if(string != strings.back())
732 {
733 enumeratorString += '|';
734 }
735 }
736
737 return enumeratorString;
738}
739
740static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600741bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
742{
743 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
744 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
745 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
746 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600747 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600748 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600749 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600750
751 return true;
752}
753
754static
755std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
756{
757 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600758 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600759 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600760 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600761
762 std::vector<std::string> strings;
763 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600764 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600765 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600766 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600767 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600768 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600770 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600774 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775
776 std::string enumeratorString;
777 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600778 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600779 enumeratorString += string;
780
781 if(string != strings.back())
782 {
783 enumeratorString += '|';
784 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600785 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600786
787 return enumeratorString;
788}
789
790static
791bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
792{
793 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
794 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600795 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600796 return false;
797 }
798
799 return true;
800}
801
802static
803std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
804{
805 if(!ValidateEnumerator(enumerator))
806 {
807 return "unrecognized enumerator";
808 }
809
810 std::vector<std::string> strings;
811 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
812 {
813 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
814 }
815
816 std::string enumeratorString;
817 for(auto const& string : strings)
818 {
819 enumeratorString += string;
820
821 if(string != strings.back())
822 {
823 enumeratorString += '|';
824 }
825 }
826
827 return enumeratorString;
828}
829
830static
831bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
832{
833 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
834 if(enumerator & (~allFlags))
835 {
836 return false;
837 }
838
839 return true;
840}
841
842static
843std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
844{
845 if(!ValidateEnumerator(enumerator))
846 {
847 return "unrecognized enumerator";
848 }
849
850 std::vector<std::string> strings;
851 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
852 {
853 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
854 }
855
856 std::string enumeratorString;
857 for(auto const& string : strings)
858 {
859 enumeratorString += string;
860
861 if(string != strings.back())
862 {
863 enumeratorString += '|';
864 }
865 }
866
867 return enumeratorString;
868}
869
870static
871bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
872{
873 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
874 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
875 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
876 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
877 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
878 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
879 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
880 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
881 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
882 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
883 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
884 if(enumerator & (~allFlags))
885 {
886 return false;
887 }
888
889 return true;
890}
891
892static
893std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
894{
895 if(!ValidateEnumerator(enumerator))
896 {
897 return "unrecognized enumerator";
898 }
899
900 std::vector<std::string> strings;
901 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
902 {
903 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
904 }
905 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
906 {
907 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
908 }
909 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
910 {
911 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
912 }
913 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
914 {
915 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
916 }
917 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
918 {
919 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
920 }
921 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
922 {
923 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
924 }
925 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
926 {
927 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
928 }
929 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
930 {
931 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
932 }
933 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
934 {
935 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
936 }
937 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
938 {
939 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
940 }
941 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
942 {
943 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
944 }
945
946 std::string enumeratorString;
947 for(auto const& string : strings)
948 {
949 enumeratorString += string;
950
951 if(string != strings.back())
952 {
953 enumeratorString += '|';
954 }
955 }
956
957 return enumeratorString;
958}
959
960static
961bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
962{
963 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
964 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
965 VK_QUERY_RESULT_WAIT_BIT |
966 VK_QUERY_RESULT_64_BIT |
967 VK_QUERY_RESULT_DEFAULT);
968 if(enumerator & (~allFlags))
969 {
970 return false;
971 }
972
973 return true;
974}
975
976static
977std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
978{
979 if(!ValidateEnumerator(enumerator))
980 {
981 return "unrecognized enumerator";
982 }
983
984 std::vector<std::string> strings;
985 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
986 {
987 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
988 }
989 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
990 {
991 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
992 }
993 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
994 {
995 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
996 }
997 if(enumerator & VK_QUERY_RESULT_64_BIT)
998 {
999 strings.push_back("VK_QUERY_RESULT_64_BIT");
1000 }
1001 if(enumerator & VK_QUERY_RESULT_DEFAULT)
1002 {
1003 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001004 }
1005
1006 std::string enumeratorString;
1007 for(auto const& string : strings)
1008 {
1009 enumeratorString += string;
1010
1011 if(string != strings.back())
1012 {
1013 enumeratorString += '|';
1014 }
1015 }
1016
1017 return enumeratorString;
1018}
1019
1020static
1021bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
1022{
1023 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
1024 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
1025 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
1026 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
1027 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
1028 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
1029 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
1030 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -06001031 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001032 if(enumerator & (~allFlags))
1033 {
1034 return false;
1035 }
1036
1037 return true;
1038}
1039
1040static
1041std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
1042{
1043 if(!ValidateEnumerator(enumerator))
1044 {
1045 return "unrecognized enumerator";
1046 }
1047
1048 std::vector<std::string> strings;
1049 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
1050 {
1051 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
1052 }
1053 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
1054 {
1055 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
1056 }
1057 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
1058 {
1059 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
1060 }
1061 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
1062 {
1063 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
1064 }
1065 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
1066 {
1067 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
1068 }
1069 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
1070 {
1071 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
1072 }
1073 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
1074 {
1075 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
1076 }
1077 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
1078 {
1079 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
1080 }
1081 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
1082 {
1083 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
1084 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001085
1086 std::string enumeratorString;
1087 for(auto const& string : strings)
1088 {
1089 enumeratorString += string;
1090
1091 if(string != strings.back())
1092 {
1093 enumeratorString += '|';
1094 }
1095 }
1096
1097 return enumeratorString;
1098}
1099
1100static
1101bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
1102{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001103 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
1104 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1105 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001106 if(enumerator & (~allFlags))
1107 {
1108 return false;
1109 }
1110
1111 return true;
1112}
1113
1114static
1115std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1116{
1117 if(!ValidateEnumerator(enumerator))
1118 {
1119 return "unrecognized enumerator";
1120 }
1121
1122 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001123 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1124 {
1125 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1126 }
1127 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1128 {
1129 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1130 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001131 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1132 {
1133 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1134 }
1135
1136 std::string enumeratorString;
1137 for(auto const& string : strings)
1138 {
1139 enumeratorString += string;
1140
1141 if(string != strings.back())
1142 {
1143 enumeratorString += '|';
1144 }
1145 }
1146
1147 return enumeratorString;
1148}
1149
1150static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001151bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1152{
1153 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001154 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1155 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1156 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001157 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001158 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001159 if(enumerator & (~allFlags))
1160 {
1161 return false;
1162 }
1163
1164 return true;
1165}
1166
1167static
1168std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1169{
1170 if(!ValidateEnumerator(enumerator))
1171 {
1172 return "unrecognized enumerator";
1173 }
1174
1175 std::vector<std::string> strings;
1176 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1177 {
1178 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001180 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1181 {
1182 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1183 }
1184 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1185 {
1186 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1187 }
1188 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1189 {
1190 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1191 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001192 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1193 {
1194 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1195 }
1196 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1197 {
1198 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1199 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001200
1201 std::string enumeratorString;
1202 for(auto const& string : strings)
1203 {
1204 enumeratorString += string;
1205
1206 if(string != strings.back())
1207 {
1208 enumeratorString += '|';
1209 }
1210 }
1211
1212 return enumeratorString;
1213}
1214
1215static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001216bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001217{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001218 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1219 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001220 if(enumerator & (~allFlags))
1221 {
1222 return false;
1223 }
1224
1225 return true;
1226}
1227
1228static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001229std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001230{
1231 if(!ValidateEnumerator(enumerator))
1232 {
1233 return "unrecognized enumerator";
1234 }
1235
1236 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001237 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001238 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001239 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001240 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001241 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001242 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001243 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001244 }
1245
1246 std::string enumeratorString;
1247 for(auto const& string : strings)
1248 {
1249 enumeratorString += string;
1250
1251 if(string != strings.back())
1252 {
1253 enumeratorString += '|';
1254 }
1255 }
1256
1257 return enumeratorString;
1258}
1259
1260static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001261bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1262{
1263 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1264 VK_CHANNEL_B_BIT |
1265 VK_CHANNEL_G_BIT |
1266 VK_CHANNEL_R_BIT);
1267 if(enumerator & (~allFlags))
1268 {
1269 return false;
1270 }
1271
1272 return true;
1273}
1274
1275static
1276std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1277{
1278 if(!ValidateEnumerator(enumerator))
1279 {
1280 return "unrecognized enumerator";
1281 }
1282
1283 std::vector<std::string> strings;
1284 if(enumerator & VK_CHANNEL_A_BIT)
1285 {
1286 strings.push_back("VK_CHANNEL_A_BIT");
1287 }
1288 if(enumerator & VK_CHANNEL_B_BIT)
1289 {
1290 strings.push_back("VK_CHANNEL_B_BIT");
1291 }
1292 if(enumerator & VK_CHANNEL_G_BIT)
1293 {
1294 strings.push_back("VK_CHANNEL_G_BIT");
1295 }
1296 if(enumerator & VK_CHANNEL_R_BIT)
1297 {
1298 strings.push_back("VK_CHANNEL_R_BIT");
1299 }
1300
1301 std::string enumeratorString;
1302 for(auto const& string : strings)
1303 {
1304 enumeratorString += string;
1305
1306 if(string != strings.back())
1307 {
1308 enumeratorString += '|';
1309 }
1310 }
1311
1312 return enumeratorString;
1313}
1314
1315static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001316bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001317{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001318 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1319 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1320 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001321 if(enumerator & (~allFlags))
1322 {
1323 return false;
1324 }
1325
1326 return true;
1327}
1328
1329static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001330std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001331{
1332 if(!ValidateEnumerator(enumerator))
1333 {
1334 return "unrecognized enumerator";
1335 }
1336
1337 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001338 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001339 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001340 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1341 }
1342 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1343 {
1344 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1345 }
1346 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1347 {
1348 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001349 }
1350
1351 std::string enumeratorString;
1352 for(auto const& string : strings)
1353 {
1354 enumeratorString += string;
1355
1356 if(string != strings.back())
1357 {
1358 enumeratorString += '|';
1359 }
1360 }
1361
1362 return enumeratorString;
1363}
1364
1365static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001366bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001367{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001368 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1369 VK_SHADER_STAGE_FRAGMENT_BIT |
1370 VK_SHADER_STAGE_GEOMETRY_BIT |
1371 VK_SHADER_STAGE_COMPUTE_BIT |
1372 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1373 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1374 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001375 if(enumerator & (~allFlags))
1376 {
1377 return false;
1378 }
1379
1380 return true;
1381}
1382
1383static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001384std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001385{
1386 if(!ValidateEnumerator(enumerator))
1387 {
1388 return "unrecognized enumerator";
1389 }
1390
1391 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001392 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001393 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001394 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001395 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001396 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001397 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001398 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001399 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001400 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001401 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001402 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1403 }
1404 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1405 {
1406 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1407 }
1408 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1409 {
1410 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1411 }
1412 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1413 {
1414 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1415 }
1416 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1417 {
1418 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001419 }
1420
1421 std::string enumeratorString;
1422 for(auto const& string : strings)
1423 {
1424 enumeratorString += string;
1425
1426 if(string != strings.back())
1427 {
1428 enumeratorString += '|';
1429 }
1430 }
1431
1432 return enumeratorString;
1433}
1434
1435static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001436bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001437{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001438 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001439 if(enumerator & (~allFlags))
1440 {
1441 return false;
1442 }
1443
1444 return true;
1445}
1446
1447static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001448std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001449{
1450 if(!ValidateEnumerator(enumerator))
1451 {
1452 return "unrecognized enumerator";
1453 }
1454
1455 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001456 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001457 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001458 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001459 }
1460
1461 std::string enumeratorString;
1462 for(auto const& string : strings)
1463 {
1464 enumeratorString += string;
1465
1466 if(string != strings.back())
1467 {
1468 enumeratorString += '|';
1469 }
1470 }
1471
1472 return enumeratorString;
1473}
1474
1475static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001476bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001477{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001478 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1479 VK_PIPELINE_STAGE_HOST_BIT |
1480 VK_PIPELINE_STAGE_TRANSFER_BIT |
1481 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1482 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1483 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1484 VK_PIPELINE_STAGE_TRANSITION_BIT |
1485 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1486 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1487 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1488 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1489 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1490 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1491 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1492 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1493 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1494 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001495 if(enumerator & (~allFlags))
1496 {
1497 return false;
1498 }
1499
1500 return true;
1501}
1502
1503static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001504std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001505{
1506 if(!ValidateEnumerator(enumerator))
1507 {
1508 return "unrecognized enumerator";
1509 }
1510
1511 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001512 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001513 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001514 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001515 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001516 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001517 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001518 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001519 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001520 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001521 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001522 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001523 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001524 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001525 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001526 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001527 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001528 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001529 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001530 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001531 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001532 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001533 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001534 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001535 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001536 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001537 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001538 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001539 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001540 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001541 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001542 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001543 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001544 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001545 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001546 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001547 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001548 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001549 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001550 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001551 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001552 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001553 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001554 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1555 }
1556 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1557 {
1558 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1559 }
1560 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1561 {
1562 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1563 }
1564 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1565 {
1566 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1567 }
1568 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1569 {
1570 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1571 }
1572 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1573 {
1574 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1575 }
1576 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1577 {
1578 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001579 }
1580
1581 std::string enumeratorString;
1582 for(auto const& string : strings)
1583 {
1584 enumeratorString += string;
1585
1586 if(string != strings.back())
1587 {
1588 enumeratorString += '|';
1589 }
1590 }
1591
1592 return enumeratorString;
1593}
1594
1595static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001596bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001598 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1599 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1600 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1601 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1602 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001603 if(enumerator & (~allFlags))
1604 {
1605 return false;
1606 }
1607
1608 return true;
1609}
1610
1611static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001612std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001613{
1614 if(!ValidateEnumerator(enumerator))
1615 {
1616 return "unrecognized enumerator";
1617 }
1618
1619 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001620 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001621 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001622 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001623 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001624 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001625 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001626 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001627 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001628 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001629 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001630 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1631 }
1632 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1633 {
1634 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1635 }
1636 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1637 {
1638 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001639 }
1640
1641 std::string enumeratorString;
1642 for(auto const& string : strings)
1643 {
1644 enumeratorString += string;
1645
1646 if(string != strings.back())
1647 {
1648 enumeratorString += '|';
1649 }
1650 }
1651
1652 return enumeratorString;
1653}
1654
1655static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001656bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001657{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001658 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1659 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1660 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1661 VK_MEMORY_INPUT_SHADER_READ_BIT |
1662 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1663 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1664 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1665 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1666 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1667 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001668 if(enumerator & (~allFlags))
1669 {
1670 return false;
1671 }
1672
1673 return true;
1674}
1675
1676static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001677std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001678{
1679 if(!ValidateEnumerator(enumerator))
1680 {
1681 return "unrecognized enumerator";
1682 }
1683
1684 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001685 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001686 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001687 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1688 }
1689 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1690 {
1691 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1692 }
1693 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1694 {
1695 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1696 }
1697 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1698 {
1699 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1700 }
1701 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1702 {
1703 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1704 }
1705 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1706 {
1707 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1708 }
1709 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1710 {
1711 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1712 }
1713 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1714 {
1715 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1716 }
1717 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1718 {
1719 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1720 }
1721 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1722 {
1723 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001724 }
1725
1726 std::string enumeratorString;
1727 for(auto const& string : strings)
1728 {
1729 enumeratorString += string;
1730
1731 if(string != strings.back())
1732 {
1733 enumeratorString += '|';
1734 }
1735 }
1736
1737 return enumeratorString;
1738}
1739
1740static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001741bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001742{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001743 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1744 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001745 if(enumerator & (~allFlags))
1746 {
1747 return false;
1748 }
1749
1750 return true;
1751}
1752
1753static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001754std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001755{
1756 if(!ValidateEnumerator(enumerator))
1757 {
1758 return "unrecognized enumerator";
1759 }
1760
1761 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001762 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001763 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001764 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001765 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001766 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001767 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001768 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001769 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001770
1771 std::string enumeratorString;
1772 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001773 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001774 enumeratorString += string;
1775
1776 if(string != strings.back())
1777 {
1778 enumeratorString += '|';
1779 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001780 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001781
1782 return enumeratorString;
1783}
1784
1785static
1786bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1787{
1788 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1789 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001790 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001791 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001792 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793
1794 return true;
1795}
1796
1797static
1798std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1799{
1800 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001801 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001802 return "unrecognized enumerator";
1803 }
1804
1805 std::vector<std::string> strings;
1806 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1807 {
1808 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001809 }
1810
1811 std::string enumeratorString;
1812 for(auto const& string : strings)
1813 {
1814 enumeratorString += string;
1815
1816 if(string != strings.back())
1817 {
1818 enumeratorString += '|';
1819 }
1820 }
1821
1822 return enumeratorString;
1823}
1824
1825static
1826bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1827{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001828 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1829 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001830 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1831 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1832 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1833 if(enumerator & (~allFlags))
1834 {
1835 return false;
1836 }
1837
1838 return true;
1839}
1840
1841static
1842std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1843{
1844 if(!ValidateEnumerator(enumerator))
1845 {
1846 return "unrecognized enumerator";
1847 }
1848
1849 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001850 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1851 {
1852 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1853 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001854 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1855 {
1856 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1857 }
1858 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1859 {
1860 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1861 }
1862 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1863 {
1864 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1865 }
1866 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1867 {
1868 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1869 }
1870
1871 std::string enumeratorString;
1872 for(auto const& string : strings)
1873 {
1874 enumeratorString += string;
1875
1876 if(string != strings.back())
1877 {
1878 enumeratorString += '|';
1879 }
1880 }
1881
1882 return enumeratorString;
1883}
1884
1885static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001886bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001887{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001888 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889 if(enumerator & (~allFlags))
1890 {
1891 return false;
1892 }
1893
1894 return true;
1895}
1896
1897static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001898std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001899{
1900 if(!ValidateEnumerator(enumerator))
1901 {
1902 return "unrecognized enumerator";
1903 }
1904
1905 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001906 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001907 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001908 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001909 }
1910
1911 std::string enumeratorString;
1912 for(auto const& string : strings)
1913 {
1914 enumeratorString += string;
1915
1916 if(string != strings.back())
1917 {
1918 enumeratorString += '|';
1919 }
1920 }
1921
1922 return enumeratorString;
1923}
1924
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001925static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001926bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001927{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001928 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1929 VK_IMAGE_ASPECT_STENCIL_BIT |
1930 VK_IMAGE_ASPECT_DEPTH_BIT |
1931 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001932 if(enumerator & (~allFlags))
1933 {
1934 return false;
1935 }
1936
1937 return true;
1938}
1939
1940static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001941std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001942{
1943 if(!ValidateEnumerator(enumerator))
1944 {
1945 return "unrecognized enumerator";
1946 }
1947
1948 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001949 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001950 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001951 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1952 }
1953 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1954 {
1955 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1956 }
1957 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1958 {
1959 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1960 }
1961 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1962 {
1963 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1964 }
1965
1966 std::string enumeratorString;
1967 for(auto const& string : strings)
1968 {
1969 enumeratorString += string;
1970
1971 if(string != strings.back())
1972 {
1973 enumeratorString += '|';
1974 }
1975 }
1976
1977 return enumeratorString;
1978}
1979
1980static
1981bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1982{
1983 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1984 if(enumerator & (~allFlags))
1985 {
1986 return false;
1987 }
1988
1989 return true;
1990}
1991
1992static
1993std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1994{
1995 if(!ValidateEnumerator(enumerator))
1996 {
1997 return "unrecognized enumerator";
1998 }
1999
2000 std::vector<std::string> strings;
2001 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
2002 {
2003 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002004 }
2005
2006 std::string enumeratorString;
2007 for(auto const& string : strings)
2008 {
2009 enumeratorString += string;
2010
2011 if(string != strings.back())
2012 {
2013 enumeratorString += '|';
2014 }
2015 }
2016
2017 return enumeratorString;
2018}
2019
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002020VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
2021 const VkInstanceCreateInfo* pCreateInfo,
2022 VkInstance* pInstance)
2023{
2024 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
2025 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
2026
2027 if (result == VK_SUCCESS) {
2028 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
2029 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06002030 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002031
2032 InitParamChecker(data);
2033 }
2034
2035 return result;
2036}
2037
2038VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(
2039 VkInstance instance)
2040{
2041 // Grab the key before the instance is destroyed.
2042 dispatch_key key = get_dispatch_key(instance);
2043 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
2044 VkResult result = pTable->DestroyInstance(instance);
2045
2046 // Clean up logging callback, if any
2047 layer_data *data = get_my_data_ptr(key, layer_data_map);
2048 if(data->logging_callback)
2049 {
2050 layer_destroy_msg_callback(data->report_data, data->logging_callback);
2051 }
2052
2053 layer_debug_report_destroy_instance(mid(instance));
2054 layer_data_map.erase(pTable);
2055
2056 pc_instance_table_map.erase(key);
2057 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2058
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002059 return result;
2060}
2061
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002062bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002063 VkInstance instance,
2064 uint32_t* pPhysicalDeviceCount,
2065 VkPhysicalDevice* pPhysicalDevices,
2066 VkResult result)
2067{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002068
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002069 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002070 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002071 }
2072
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002073 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002074 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002075 }
2076
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002077 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002078 {
2079 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002080 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2081 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002082 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002083
2084 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002085}
2086
2087VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
2088 VkInstance instance,
2089 uint32_t* pPhysicalDeviceCount,
2090 VkPhysicalDevice* pPhysicalDevices)
2091{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002092 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
2093
2094 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
2095
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002096 return result;
2097}
2098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002099bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002100 VkPhysicalDevice physicalDevice,
2101 VkPhysicalDeviceFeatures* pFeatures,
2102 VkResult result)
2103{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002104
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002105 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002106 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002107 }
2108
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002109 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002110 {
2111 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002112 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2113 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002114 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002115
2116 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002117}
2118
2119VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2120 VkPhysicalDevice physicalDevice,
2121 VkPhysicalDeviceFeatures* pFeatures)
2122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002123 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2124
2125 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2126
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002127 return result;
2128}
2129
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002130bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002131 VkPhysicalDevice physicalDevice,
2132 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002133 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002134 VkResult result)
2135{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002136
2137 if(format < VK_FORMAT_BEGIN_RANGE ||
2138 format > VK_FORMAT_END_RANGE)
2139 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002140 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002141 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002142 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002143 }
2144
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002145 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002146 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002147 }
2148
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002149 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002150 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002151 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002152 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2153 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002154 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002155
2156 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002157}
2158
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002159VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002160 VkPhysicalDevice physicalDevice,
2161 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002162 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002163{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002164 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002165
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002166 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2167
2168 return result;
2169}
2170
2171bool PostGetPhysicalDeviceImageFormatProperties(
2172 VkPhysicalDevice physicalDevice,
2173 VkFormat format,
2174 VkImageType type,
2175 VkImageTiling tiling,
2176 VkImageUsageFlags usage,
2177 VkImageFormatProperties* pImageFormatProperties,
2178 VkResult result)
2179{
2180
2181 if(format < VK_FORMAT_BEGIN_RANGE ||
2182 format > VK_FORMAT_END_RANGE)
2183 {
2184 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2185 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2186 return false;
2187 }
2188
2189 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2190 type > VK_IMAGE_TYPE_END_RANGE)
2191 {
2192 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2193 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2194 return false;
2195 }
2196
2197 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2198 tiling > VK_IMAGE_TILING_END_RANGE)
2199 {
2200 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2201 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2202 return false;
2203 }
2204
2205
2206 if(pImageFormatProperties != nullptr)
2207 {
2208 }
2209
2210 if(result < VK_SUCCESS)
2211 {
2212 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2213 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2214 return false;
2215 }
2216
2217 return true;
2218}
2219
2220VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2221 VkPhysicalDevice physicalDevice,
2222 VkFormat format,
2223 VkImageType type,
2224 VkImageTiling tiling,
2225 VkImageUsageFlags usage,
2226 VkImageFormatProperties* pImageFormatProperties)
2227{
2228 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2229
2230 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002231
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002232 return result;
2233}
2234
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002235bool PostGetPhysicalDeviceLimits(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236 VkPhysicalDevice physicalDevice,
2237 VkPhysicalDeviceLimits* pLimits,
2238 VkResult result)
2239{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002240
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002241 if(pLimits != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002242 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002243 }
2244
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002245 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002246 {
2247 std::string reason = "vkGetPhysicalDeviceLimits parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002248 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2249 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002250 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002251
2252 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002253}
2254
2255VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLimits(
2256 VkPhysicalDevice physicalDevice,
2257 VkPhysicalDeviceLimits* pLimits)
2258{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceLimits(physicalDevice, pLimits);
2260
2261 PostGetPhysicalDeviceLimits(physicalDevice, pLimits, result);
2262
2263 return result;
2264}
2265
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002266bool PostGetPhysicalDeviceProperties(
2267 VkPhysicalDevice physicalDevice,
2268 VkPhysicalDeviceProperties* pProperties,
2269 VkResult result)
2270{
2271
2272 if(pProperties != nullptr)
2273 {
2274 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2275 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2276 {
2277 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2278 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2279 return false;
2280 }
2281 }
2282
2283 if(result < VK_SUCCESS)
2284 {
2285 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2286 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2287 return false;
2288 }
2289
2290 return true;
2291}
2292
2293VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2294 VkPhysicalDevice physicalDevice,
2295 VkPhysicalDeviceProperties* pProperties)
2296{
2297 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2298
2299 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2300
2301 return result;
2302}
2303
Cody Northropef72e2a2015-08-03 17:04:53 -06002304bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002305 VkPhysicalDevice physicalDevice,
2306 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002307 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002308 VkResult result)
2309{
2310
Cody Northropef72e2a2015-08-03 17:04:53 -06002311 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002312 {
2313 }
2314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002315 if(pQueueProperties != nullptr)
2316 {
2317 }
2318
2319 if(result < VK_SUCCESS)
2320 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002321 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002322 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2323 return false;
2324 }
2325
2326 return true;
2327}
2328
2329VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2330 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002331 uint32_t* pCount,
2332 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002333{
Cody Northropef72e2a2015-08-03 17:04:53 -06002334 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002335
Cody Northropef72e2a2015-08-03 17:04:53 -06002336 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002337
2338 return result;
2339}
2340
2341bool PostGetPhysicalDeviceMemoryProperties(
2342 VkPhysicalDevice physicalDevice,
2343 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2344 VkResult result)
2345{
2346
2347 if(pMemoryProperties != nullptr)
2348 {
2349 }
2350
2351 if(result < VK_SUCCESS)
2352 {
2353 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2354 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2355 return false;
2356 }
2357
2358 return true;
2359}
2360
2361VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2362 VkPhysicalDevice physicalDevice,
2363 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2364{
2365 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2366
2367 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2368
2369 return result;
2370}
2371
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002372VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2373 VkPhysicalDevice physicalDevice,
2374 const VkDeviceCreateInfo* pCreateInfo,
2375 VkDevice* pDevice)
2376{
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002377 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002378 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2379 if(result == VK_SUCCESS)
2380 {
2381 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2382 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2383 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2384 }
2385
2386 return result;
2387}
2388
2389VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(
2390 VkDevice device)
2391{
2392 layer_debug_report_destroy_device(device);
2393
2394 dispatch_key key = get_dispatch_key(device);
2395#if DISPATCH_MAP_DEBUG
2396 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2397#endif
2398
2399 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
2400 pc_device_table_map.erase(key);
2401 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
2402
2403 return result;
2404}
2405
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002406bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002407 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002408 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409 uint32_t queueIndex,
2410 VkQueue* pQueue,
2411 VkResult result)
2412{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002413
2414
2415
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002416 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002418 }
2419
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002420 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002421 {
2422 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002425 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002426
2427 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002428}
2429
2430VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2431 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002432 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 uint32_t queueIndex,
2434 VkQueue* pQueue)
2435{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002436 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002438 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002439
2440 return result;
2441}
2442
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002443bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002444 VkQueue queue,
2445 const VkCmdBuffer* pCmdBuffers)
2446{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002447 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002448 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002449 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002450
2451 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002452}
2453
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002454bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002455 VkQueue queue,
2456 uint32_t cmdBufferCount,
2457 VkFence fence,
2458 VkResult result)
2459{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002460
2461
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002462
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002463 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002464 {
2465 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002466 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2467 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002469
2470 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002471}
2472
2473VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2474 VkQueue queue,
2475 uint32_t cmdBufferCount,
2476 const VkCmdBuffer* pCmdBuffers,
2477 VkFence fence)
2478{
2479 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002480
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002481 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2482
2483 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2484
2485 return result;
2486}
2487
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002488bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 VkQueue queue,
2490 VkResult result)
2491{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002493 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002494 {
2495 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002496 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002498 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499
2500 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002501}
2502
2503VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2504 VkQueue queue)
2505{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2507
2508 PostQueueWaitIdle(queue, result);
2509
2510 return result;
2511}
2512
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002513bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002514 VkDevice device,
2515 VkResult result)
2516{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002517
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002518 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002519 {
2520 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2522 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002523 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002524
2525 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002526}
2527
2528VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2529 VkDevice device)
2530{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002531 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2532
2533 PostDeviceWaitIdle(device, result);
2534
2535 return result;
2536}
2537
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002538bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002539 VkDevice device,
2540 const VkMemoryAllocInfo* pAllocInfo)
2541{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002542 if(pAllocInfo != nullptr)
2543 {
2544 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002545 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002546 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002547 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002548 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002549 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002550 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002551
2552 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002553}
2554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002555bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002556 VkDevice device,
2557 VkDeviceMemory* pMem,
2558 VkResult result)
2559{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002560
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002561 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002563 }
2564
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002565 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002566 {
2567 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002568 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2569 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002570 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002571
2572 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002573}
2574
2575VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2576 VkDevice device,
2577 const VkMemoryAllocInfo* pAllocInfo,
2578 VkDeviceMemory* pMem)
2579{
2580 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002581
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002582 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2583
2584 PostAllocMemory(device, pMem, result);
2585
2586 return result;
2587}
2588
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002589bool PostFreeMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002590 VkDevice device,
2591 VkDeviceMemory mem,
2592 VkResult result)
2593{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002595
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002596 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002597 {
2598 std::string reason = "vkFreeMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2600 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002601 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002602
2603 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002604}
2605
2606VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(
2607 VkDevice device,
2608 VkDeviceMemory mem)
2609{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002610 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeMemory(device, mem);
2611
2612 PostFreeMemory(device, mem, result);
2613
2614 return result;
2615}
2616
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002617bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002618 VkDevice device,
2619 VkDeviceMemory mem,
2620 VkDeviceSize offset,
2621 VkDeviceSize size,
2622 VkMemoryMapFlags flags,
2623 void** ppData,
2624 VkResult result)
2625{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002626
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002627
2628
2629
2630
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002631 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002633 }
2634
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002635 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636 {
2637 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2639 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002640 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002641
2642 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002643}
2644
2645VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2646 VkDevice device,
2647 VkDeviceMemory mem,
2648 VkDeviceSize offset,
2649 VkDeviceSize size,
2650 VkMemoryMapFlags flags,
2651 void** ppData)
2652{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002653 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2654
2655 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2656
2657 return result;
2658}
2659
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002660bool PostUnmapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002661 VkDevice device,
2662 VkDeviceMemory mem,
2663 VkResult result)
2664{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002665
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002666
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002667 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002668 {
2669 std::string reason = "vkUnmapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002670 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2671 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002672 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002673
2674 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002675}
2676
2677VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(
2678 VkDevice device,
2679 VkDeviceMemory mem)
2680{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002681 VkResult result = get_dispatch_table(pc_device_table_map, device)->UnmapMemory(device, mem);
2682
2683 PostUnmapMemory(device, mem, result);
2684
2685 return result;
2686}
2687
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002688bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002689 VkDevice device,
2690 const VkMappedMemoryRange* pMemRanges)
2691{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002692 if(pMemRanges != nullptr)
2693 {
2694 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002695 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002697 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002698 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002699 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002700 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002701
2702 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002703}
2704
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002706 VkDevice device,
2707 uint32_t memRangeCount,
2708 VkResult result)
2709{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002710
2711
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002712 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002713 {
2714 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002715 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2716 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002717 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002718
2719 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002720}
2721
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002722VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002723 VkDevice device,
2724 uint32_t memRangeCount,
2725 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002726{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002727 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002728
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002729 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002730
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002731 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2732
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002733 return result;
2734}
2735
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002736bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002737 VkDevice device,
2738 const VkMappedMemoryRange* pMemRanges)
2739{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002740 if(pMemRanges != nullptr)
2741 {
2742 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002743 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002744 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002745 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002746 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002747 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002748 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002749
2750 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002751}
2752
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002753bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002754 VkDevice device,
2755 uint32_t memRangeCount,
2756 VkResult result)
2757{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002758
2759
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002760 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002761 {
2762 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002763 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2764 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002765 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002766
2767 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002768}
2769
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002770VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002771 VkDevice device,
2772 uint32_t memRangeCount,
2773 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002774{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002775 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002776
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002777 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002778
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002779 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2780
Tony Barbour859ceab2015-04-16 19:23:13 -06002781 return result;
2782}
2783
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002784bool PostGetDeviceMemoryCommitment(
2785 VkDevice device,
2786 VkDeviceMemory memory,
2787 VkDeviceSize* pCommittedMemoryInBytes,
2788 VkResult result)
2789{
2790
2791
2792 if(pCommittedMemoryInBytes != nullptr)
2793 {
2794 }
2795
2796 if(result < VK_SUCCESS)
2797 {
2798 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2799 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2800 return false;
2801 }
2802
2803 return true;
2804}
2805
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002806VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002807 VkDevice device,
2808 VkDeviceMemory memory,
2809 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002810{
2811 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2812
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002813 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2814
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002815 return result;
2816}
2817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002818bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002819 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002820 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002821 VkDeviceMemory mem,
2822 VkDeviceSize memOffset,
2823 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002824{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002825
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002826
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002827
2828
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002829 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002830 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002831 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2832 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2833 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002834 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002835
2836 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002837}
2838
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002839VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002840 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002842 VkDeviceMemory mem,
2843 VkDeviceSize memOffset)
2844{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002845 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002846
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002847 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002848
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002849 return result;
2850}
2851
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002852bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002854 VkImage image,
2855 VkDeviceMemory mem,
2856 VkDeviceSize memOffset,
2857 VkResult result)
2858{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002859
2860
2861
2862
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002863 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002864 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002865 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2867 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002868 }
2869
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002870 return true;
2871}
2872
2873VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2874 VkDevice device,
2875 VkImage image,
2876 VkDeviceMemory mem,
2877 VkDeviceSize memOffset)
2878{
2879 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2880
2881 PostBindImageMemory(device, image, mem, memOffset, result);
2882
2883 return result;
2884}
2885
2886bool PostGetBufferMemoryRequirements(
2887 VkDevice device,
2888 VkBuffer buffer,
2889 VkMemoryRequirements* pMemoryRequirements,
2890 VkResult result)
2891{
2892
2893
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002894 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002895 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002896 }
2897
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002898 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002899 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002900 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2901 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002903 }
2904
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002905 return true;
2906}
2907
2908VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2909 VkDevice device,
2910 VkBuffer buffer,
2911 VkMemoryRequirements* pMemoryRequirements)
2912{
2913 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2914
2915 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2916
2917 return result;
2918}
2919
2920bool PostGetImageMemoryRequirements(
2921 VkDevice device,
2922 VkImage image,
2923 VkMemoryRequirements* pMemoryRequirements,
2924 VkResult result)
2925{
2926
2927
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002928 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002929 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002930 }
2931
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002932 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002933 {
2934 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2936 return false;
2937 }
2938
2939 return true;
2940}
2941
2942VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2943 VkDevice device,
2944 VkImage image,
2945 VkMemoryRequirements* pMemoryRequirements)
2946{
2947 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2948
2949 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2950
2951 return result;
2952}
2953
2954bool PostGetImageSparseMemoryRequirements(
2955 VkDevice device,
2956 VkImage image,
2957 uint32_t* pNumRequirements,
2958 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2959 VkResult result)
2960{
2961
2962
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002963 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002965 }
2966
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002967 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002968 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002969 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2970 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2971 {
2972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002973 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002974 return false;
2975 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002976 }
2977
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002978 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002979 {
2980 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2981 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2982 return false;
2983 }
2984
2985 return true;
2986}
2987
2988VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2989 VkDevice device,
2990 VkImage image,
2991 uint32_t* pNumRequirements,
2992 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2993{
2994 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2995
2996 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2997
2998 return result;
2999}
3000
3001bool PostGetPhysicalDeviceSparseImageFormatProperties(
3002 VkPhysicalDevice physicalDevice,
3003 VkFormat format,
3004 VkImageType type,
3005 uint32_t samples,
3006 VkImageUsageFlags usage,
3007 VkImageTiling tiling,
3008 uint32_t* pNumProperties,
3009 VkSparseImageFormatProperties* pProperties,
3010 VkResult result)
3011{
3012
3013 if(format < VK_FORMAT_BEGIN_RANGE ||
3014 format > VK_FORMAT_END_RANGE)
3015 {
3016 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003017 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003018 return false;
3019 }
3020
3021 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
3022 type > VK_IMAGE_TYPE_END_RANGE)
3023 {
3024 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003025 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003026 return false;
3027 }
3028
3029
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003030
3031 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3032 tiling > VK_IMAGE_TILING_END_RANGE)
3033 {
3034 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003035 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003036 return false;
3037 }
3038
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003039 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003040 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003041 }
3042
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003043 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003044 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003045 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3046 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
3047 {
3048 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003049 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003050 return false;
3051 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003052 }
3053
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003054 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003055 {
3056 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
3057 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3058 return false;
3059 }
3060
3061 return true;
3062}
3063
3064VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
3065 VkPhysicalDevice physicalDevice,
3066 VkFormat format,
3067 VkImageType type,
3068 uint32_t samples,
3069 VkImageUsageFlags usage,
3070 VkImageTiling tiling,
3071 uint32_t* pNumProperties,
3072 VkSparseImageFormatProperties* pProperties)
3073{
3074 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
3075
3076 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
3077
3078 return result;
3079}
3080
3081bool PreQueueBindSparseBufferMemory(
3082 VkQueue queue,
3083 const VkSparseMemoryBindInfo* pBindInfo)
3084{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003085 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003086 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003087 }
3088
3089 return true;
3090}
3091
3092bool PostQueueBindSparseBufferMemory(
3093 VkQueue queue,
3094 VkBuffer buffer,
3095 uint32_t numBindings,
3096 VkResult result)
3097{
3098
3099
3100
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003101 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003102 {
3103 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
3104 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3105 return false;
3106 }
3107
3108 return true;
3109}
3110
3111VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
3112 VkQueue queue,
3113 VkBuffer buffer,
3114 uint32_t numBindings,
3115 const VkSparseMemoryBindInfo* pBindInfo)
3116{
3117 PreQueueBindSparseBufferMemory(queue, pBindInfo);
3118
3119 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
3120
3121 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
3122
3123 return result;
3124}
3125
3126bool PreQueueBindSparseImageOpaqueMemory(
3127 VkQueue queue,
3128 const VkSparseMemoryBindInfo* pBindInfo)
3129{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003130 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003131 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003132 }
3133
3134 return true;
3135}
3136
3137bool PostQueueBindSparseImageOpaqueMemory(
3138 VkQueue queue,
3139 VkImage image,
3140 uint32_t numBindings,
3141 VkResult result)
3142{
3143
3144
3145
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003146 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003147 {
3148 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
3149 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3150 return false;
3151 }
3152
3153 return true;
3154}
3155
3156VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
3157 VkQueue queue,
3158 VkImage image,
3159 uint32_t numBindings,
3160 const VkSparseMemoryBindInfo* pBindInfo)
3161{
3162 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
3163
3164 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
3165
3166 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
3167
3168 return result;
3169}
3170
3171bool PreQueueBindSparseImageMemory(
3172 VkQueue queue,
3173 const VkSparseImageMemoryBindInfo* pBindInfo)
3174{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003175 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003176 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003177 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3178 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
3179 {
3180 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003181 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003182 return false;
3183 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003184 }
3185
3186 return true;
3187}
3188
3189bool PostQueueBindSparseImageMemory(
3190 VkQueue queue,
3191 VkImage image,
3192 uint32_t numBindings,
3193 VkResult result)
3194{
3195
3196
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003197
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003198 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003199 {
3200 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003201 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3202 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003203 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003204
3205 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003206}
3207
3208VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003209 VkQueue queue,
3210 VkImage image,
3211 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003212 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003213{
3214 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003215
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003216 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003217
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003218 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003219
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003220 return result;
3221}
3222
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003223bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003224 VkDevice device,
3225 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003226{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003227 if(pCreateInfo != nullptr)
3228 {
3229 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003230 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003232 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003233 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003234 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003235 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003236
3237 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003238}
3239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003240bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241 VkDevice device,
3242 VkFence* pFence,
3243 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003244{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003246 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003248 }
3249
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003250 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003251 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3254 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003255 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003256
3257 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258}
3259
3260VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3261 VkDevice device,
3262 const VkFenceCreateInfo* pCreateInfo,
3263 VkFence* pFence)
3264{
3265 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003266
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003267 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3268
3269 PostCreateFence(device, pFence, result);
3270
3271 return result;
3272}
3273
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003274bool PostDestroyFence(
3275 VkDevice device,
3276 VkFence fence,
3277 VkResult result)
3278{
3279
3280
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003281 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282 {
3283 std::string reason = "vkDestroyFence parameter, VkResult result, is " + EnumeratorString(result);
3284 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3285 return false;
3286 }
3287
3288 return true;
3289}
3290
3291VK_LAYER_EXPORT VkResult VKAPI vkDestroyFence(
3292 VkDevice device,
3293 VkFence fence)
3294{
3295 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFence(device, fence);
3296
3297 PostDestroyFence(device, fence, result);
3298
3299 return result;
3300}
3301
3302bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 VkDevice device,
3304 const VkFence* pFences)
3305{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003306 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003307 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003308 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003309
3310 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311}
3312
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003313bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003314 VkDevice device,
3315 uint32_t fenceCount,
3316 VkResult result)
3317{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003318
3319
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003320 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003321 {
3322 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3324 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003326
3327 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328}
3329
3330VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3331 VkDevice device,
3332 uint32_t fenceCount,
3333 const VkFence* pFences)
3334{
3335 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003336
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003337 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3338
3339 PostResetFences(device, fenceCount, result);
3340
3341 return result;
3342}
3343
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003344bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003345 VkDevice device,
3346 VkFence fence,
3347 VkResult result)
3348{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003349
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003350
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003351 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003352 {
3353 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3355 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003356 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357
3358 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003359}
3360
3361VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3362 VkDevice device,
3363 VkFence fence)
3364{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003365 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3366
3367 PostGetFenceStatus(device, fence, result);
3368
3369 return result;
3370}
3371
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003372bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003373 VkDevice device,
3374 const VkFence* pFences)
3375{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003376 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003377 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003378 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003379
3380 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003381}
3382
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003383bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003384 VkDevice device,
3385 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003386 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003387 uint64_t timeout,
3388 VkResult result)
3389{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003390
3391
3392
3393
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003394 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003395 {
3396 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003397 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3398 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003400
3401 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003402}
3403
3404VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3405 VkDevice device,
3406 uint32_t fenceCount,
3407 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003408 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003409 uint64_t timeout)
3410{
3411 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003412
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003413 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3414
3415 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3416
3417 return result;
3418}
3419
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003420bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003421 VkDevice device,
3422 const VkSemaphoreCreateInfo* pCreateInfo)
3423{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003424 if(pCreateInfo != nullptr)
3425 {
3426 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003427 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003429 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003431 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003433
3434 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003435}
3436
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003437bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 VkDevice device,
3439 VkSemaphore* pSemaphore,
3440 VkResult result)
3441{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003442
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003443 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 }
3446
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003447 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448 {
3449 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003450 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3451 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003453
3454 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003455}
3456
3457VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3458 VkDevice device,
3459 const VkSemaphoreCreateInfo* pCreateInfo,
3460 VkSemaphore* pSemaphore)
3461{
3462 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003463
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003464 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3465
3466 PostCreateSemaphore(device, pSemaphore, result);
3467
3468 return result;
3469}
3470
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003471bool PostDestroySemaphore(
3472 VkDevice device,
3473 VkSemaphore semaphore,
3474 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003475{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003476
3477
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003478 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003479 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003480 std::string reason = "vkDestroySemaphore parameter, VkResult result, is " + EnumeratorString(result);
3481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3482 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003483 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003484
3485 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003486}
3487
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003488VK_LAYER_EXPORT VkResult VKAPI vkDestroySemaphore(
3489 VkDevice device,
3490 VkSemaphore semaphore)
3491{
3492 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySemaphore(device, semaphore);
3493
3494 PostDestroySemaphore(device, semaphore, result);
3495
3496 return result;
3497}
3498
3499bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003500 VkQueue queue,
3501 VkSemaphore semaphore,
3502 VkResult result)
3503{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003505
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003506 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507 {
3508 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003509 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3510 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003512
3513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514}
3515
3516VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3517 VkQueue queue,
3518 VkSemaphore semaphore)
3519{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3521
3522 PostQueueSignalSemaphore(queue, semaphore, result);
3523
3524 return result;
3525}
3526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003527bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003528 VkQueue queue,
3529 VkSemaphore semaphore,
3530 VkResult result)
3531{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003532
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003533
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003534 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003535 {
3536 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003537 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3538 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003539 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003540
3541 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003542}
3543
3544VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3545 VkQueue queue,
3546 VkSemaphore semaphore)
3547{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003548 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3549
3550 PostQueueWaitSemaphore(queue, semaphore, result);
3551
3552 return result;
3553}
3554
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003555bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003556 VkDevice device,
3557 const VkEventCreateInfo* pCreateInfo)
3558{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003559 if(pCreateInfo != nullptr)
3560 {
3561 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003562 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003564 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003565 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003567 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003568
3569 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003570}
3571
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003572bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573 VkDevice device,
3574 VkEvent* pEvent,
3575 VkResult result)
3576{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003578 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003579 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003580 }
3581
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003582 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003583 {
3584 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3586 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003587 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003588
3589 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003590}
3591
3592VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3593 VkDevice device,
3594 const VkEventCreateInfo* pCreateInfo,
3595 VkEvent* pEvent)
3596{
3597 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003598
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003599 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3600
3601 PostCreateEvent(device, pEvent, result);
3602
3603 return result;
3604}
3605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003606bool PostDestroyEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003607 VkDevice device,
3608 VkEvent event,
3609 VkResult result)
3610{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003611
3612
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003613 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003614 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003615 std::string reason = "vkDestroyEvent parameter, VkResult result, is " + EnumeratorString(result);
3616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3617 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003618 }
3619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003620 return true;
3621}
3622
3623VK_LAYER_EXPORT VkResult VKAPI vkDestroyEvent(
3624 VkDevice device,
3625 VkEvent event)
3626{
3627 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyEvent(device, event);
3628
3629 PostDestroyEvent(device, event, result);
3630
3631 return result;
3632}
3633
3634bool PostGetEventStatus(
3635 VkDevice device,
3636 VkEvent event,
3637 VkResult result)
3638{
3639
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003640
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003641 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003642 {
3643 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003644 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3645 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003646 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003647
3648 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003649}
3650
3651VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3652 VkDevice device,
3653 VkEvent event)
3654{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3656
3657 PostGetEventStatus(device, event, result);
3658
3659 return result;
3660}
3661
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003662bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003663 VkDevice device,
3664 VkEvent event,
3665 VkResult result)
3666{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003667
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003668
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003669 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003670 {
3671 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003672 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3673 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003674 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003675
3676 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003677}
3678
3679VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3680 VkDevice device,
3681 VkEvent event)
3682{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003683 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3684
3685 PostSetEvent(device, event, result);
3686
3687 return result;
3688}
3689
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003690bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003691 VkDevice device,
3692 VkEvent event,
3693 VkResult result)
3694{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003696
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003697 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003698 {
3699 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3701 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003702 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003703
3704 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003705}
3706
3707VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3708 VkDevice device,
3709 VkEvent event)
3710{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003711 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3712
3713 PostResetEvent(device, event, result);
3714
3715 return result;
3716}
3717
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003718bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003719 VkDevice device,
3720 const VkQueryPoolCreateInfo* pCreateInfo)
3721{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003722 if(pCreateInfo != nullptr)
3723 {
3724 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003725 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003727 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003728 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003729 }
3730 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3731 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3732 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003733 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003734 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003735 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003736 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003737 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003738
3739 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003740}
3741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003742bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003743 VkDevice device,
3744 VkQueryPool* pQueryPool,
3745 VkResult result)
3746{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003747
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003748 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003750 }
3751
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003752 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003753 {
3754 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003755 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3756 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003757 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003758
3759 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003760}
3761
3762VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3763 VkDevice device,
3764 const VkQueryPoolCreateInfo* pCreateInfo,
3765 VkQueryPool* pQueryPool)
3766{
3767 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003768
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003769 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3770
3771 PostCreateQueryPool(device, pQueryPool, result);
3772
3773 return result;
3774}
3775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003776bool PostDestroyQueryPool(
3777 VkDevice device,
3778 VkQueryPool queryPool,
3779 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003780{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781
3782
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003783 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003785 std::string reason = "vkDestroyQueryPool parameter, VkResult result, is " + EnumeratorString(result);
3786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3787 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003788 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003789
3790 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003791}
3792
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793VK_LAYER_EXPORT VkResult VKAPI vkDestroyQueryPool(
3794 VkDevice device,
3795 VkQueryPool queryPool)
3796{
3797 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyQueryPool(device, queryPool);
3798
3799 PostDestroyQueryPool(device, queryPool, result);
3800
3801 return result;
3802}
3803
3804bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003805 VkDevice device,
3806 VkQueryPool queryPool,
3807 uint32_t startQuery,
3808 uint32_t queryCount,
3809 size_t* pDataSize,
3810 void* pData,
3811 VkQueryResultFlags flags,
3812 VkResult result)
3813{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003814
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003815
3816
3817
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003818 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003819 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003820 }
3821
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003822 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003823 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 }
3825
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003826
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003827 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003828 {
3829 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3831 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003832 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003833
3834 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003835}
3836
3837VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3838 VkDevice device,
3839 VkQueryPool queryPool,
3840 uint32_t startQuery,
3841 uint32_t queryCount,
3842 size_t* pDataSize,
3843 void* pData,
3844 VkQueryResultFlags flags)
3845{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003846 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3847
3848 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3849
3850 return result;
3851}
3852
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003853bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003854 VkDevice device,
3855 const VkBufferCreateInfo* pCreateInfo)
3856{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003857 if(pCreateInfo != nullptr)
3858 {
3859 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003860 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003862 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003863 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003864 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003865 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3866 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003867 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003869 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003870 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003871 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003872 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003873 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003874 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003875 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003876
3877 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003878}
3879
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003880bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003881 VkDevice device,
3882 VkBuffer* pBuffer,
3883 VkResult result)
3884{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003885
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003886 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003888 }
3889
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003890 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003891 {
3892 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3894 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003895 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003896
3897 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003898}
3899
3900VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3901 VkDevice device,
3902 const VkBufferCreateInfo* pCreateInfo,
3903 VkBuffer* pBuffer)
3904{
3905 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003906
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003907 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3908
3909 PostCreateBuffer(device, pBuffer, result);
3910
3911 return result;
3912}
3913
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003914bool PostDestroyBuffer(
3915 VkDevice device,
3916 VkBuffer buffer,
3917 VkResult result)
3918{
3919
3920
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003921 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003922 {
3923 std::string reason = "vkDestroyBuffer parameter, VkResult result, is " + EnumeratorString(result);
3924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3925 return false;
3926 }
3927
3928 return true;
3929}
3930
3931VK_LAYER_EXPORT VkResult VKAPI vkDestroyBuffer(
3932 VkDevice device,
3933 VkBuffer buffer)
3934{
3935 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBuffer(device, buffer);
3936
3937 PostDestroyBuffer(device, buffer, result);
3938
3939 return result;
3940}
3941
3942bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003943 VkDevice device,
3944 const VkBufferViewCreateInfo* pCreateInfo)
3945{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003946 if(pCreateInfo != nullptr)
3947 {
3948 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003949 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003951 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003952 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003953 }
3954 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3955 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3956 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003957 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003958 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003959 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003960 }
3961 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3962 pCreateInfo->format > VK_FORMAT_END_RANGE)
3963 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003964 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003965 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003966 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003967 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003968 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003969
3970 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003971}
3972
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003973bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003974 VkDevice device,
3975 VkBufferView* pView,
3976 VkResult result)
3977{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003978
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003979 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003980 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003981 }
3982
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003983 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003984 {
3985 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003986 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3987 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003988 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003989
3990 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003991}
3992
3993VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3994 VkDevice device,
3995 const VkBufferViewCreateInfo* pCreateInfo,
3996 VkBufferView* pView)
3997{
3998 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003999
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004000 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
4001
4002 PostCreateBufferView(device, pView, result);
4003
4004 return result;
4005}
4006
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004007bool PostDestroyBufferView(
4008 VkDevice device,
4009 VkBufferView bufferView,
4010 VkResult result)
4011{
4012
4013
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004014 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004015 {
4016 std::string reason = "vkDestroyBufferView parameter, VkResult result, is " + EnumeratorString(result);
4017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4018 return false;
4019 }
4020
4021 return true;
4022}
4023
4024VK_LAYER_EXPORT VkResult VKAPI vkDestroyBufferView(
4025 VkDevice device,
4026 VkBufferView bufferView)
4027{
4028 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyBufferView(device, bufferView);
4029
4030 PostDestroyBufferView(device, bufferView, result);
4031
4032 return result;
4033}
4034
4035bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004036 VkDevice device,
4037 const VkImageCreateInfo* pCreateInfo)
4038{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004039 if(pCreateInfo != nullptr)
4040 {
4041 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004042 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004044 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004045 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004046 }
4047 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
4048 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
4049 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004051 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004052 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004053 }
4054 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4055 pCreateInfo->format > VK_FORMAT_END_RANGE)
4056 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004058 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004059 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004060 }
4061 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
4062 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
4063 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004065 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004066 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004067 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004068 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
4069 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004070 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4072 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004073 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004074 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004075 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004076 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004077 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004078 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004079
4080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004081}
4082
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004083bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004084 VkDevice device,
4085 VkImage* pImage,
4086 VkResult result)
4087{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004088
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004089 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004090 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004091 }
4092
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004093 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004094 {
4095 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004096 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4097 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004098 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004099
4100 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004101}
4102
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004103VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
4104 VkDevice device,
4105 const VkImageCreateInfo* pCreateInfo,
4106 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004107{
4108 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004109
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004110 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
4111
4112 PostCreateImage(device, pImage, result);
4113
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004114 return result;
4115}
4116
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004117bool PostDestroyImage(
4118 VkDevice device,
4119 VkImage image,
4120 VkResult result)
4121{
4122
4123
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004124 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004125 {
4126 std::string reason = "vkDestroyImage parameter, VkResult result, is " + EnumeratorString(result);
4127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4128 return false;
4129 }
4130
4131 return true;
4132}
4133
4134VK_LAYER_EXPORT VkResult VKAPI vkDestroyImage(
4135 VkDevice device,
4136 VkImage image)
4137{
4138 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImage(device, image);
4139
4140 PostDestroyImage(device, image, result);
4141
4142 return result;
4143}
4144
4145bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004146 VkDevice device,
4147 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004148{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004149 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004150 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004151 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4152 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
4153 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004155 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004156 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004157 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004158 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004159
4160 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004161}
4162
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004163bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004164 VkDevice device,
4165 VkImage image,
4166 VkSubresourceLayout* pLayout,
4167 VkResult result)
4168{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004169
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004170
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004171 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004173 }
4174
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004175 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004176 {
4177 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4179 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004180 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004181
4182 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004183}
4184
4185VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
4186 VkDevice device,
4187 VkImage image,
4188 const VkImageSubresource* pSubresource,
4189 VkSubresourceLayout* pLayout)
4190{
4191 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004192
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004193 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
4194
4195 PostGetImageSubresourceLayout(device, image, pLayout, result);
4196
4197 return result;
4198}
4199
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004200bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004201 VkDevice device,
4202 const VkImageViewCreateInfo* pCreateInfo)
4203{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004204 if(pCreateInfo != nullptr)
4205 {
4206 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004207 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004209 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004210 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004211 }
4212 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
4213 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
4214 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004216 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004217 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004218 }
4219 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
4220 pCreateInfo->format > VK_FORMAT_END_RANGE)
4221 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004223 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004224 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004225 }
4226 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4227 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
4228 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004229 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004230 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004231 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004232 }
4233 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4234 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
4235 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004237 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004238 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004239 }
4240 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4241 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
4242 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004244 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004245 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004246 }
4247 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
4248 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
4249 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004251 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004252 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004253 }
4254 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
4255 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
4256 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004258 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004259 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004260 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004262
4263 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004264}
4265
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004266bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004267 VkDevice device,
4268 VkImageView* pView,
4269 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004271
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004272 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004273 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004274 }
4275
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004276 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004277 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004278 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4280 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004282
4283 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004284}
4285
4286VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
4287 VkDevice device,
4288 const VkImageViewCreateInfo* pCreateInfo,
4289 VkImageView* pView)
4290{
4291 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004292
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004293 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
4294
4295 PostCreateImageView(device, pView, result);
4296
4297 return result;
4298}
4299
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004300bool PostDestroyImageView(
4301 VkDevice device,
4302 VkImageView imageView,
4303 VkResult result)
4304{
4305
4306
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004307 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004308 {
4309 std::string reason = "vkDestroyImageView parameter, VkResult result, is " + EnumeratorString(result);
4310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4311 return false;
4312 }
4313
4314 return true;
4315}
4316
4317VK_LAYER_EXPORT VkResult VKAPI vkDestroyImageView(
4318 VkDevice device,
4319 VkImageView imageView)
4320{
4321 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyImageView(device, imageView);
4322
4323 PostDestroyImageView(device, imageView, result);
4324
4325 return result;
4326}
4327
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004328bool PostDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004329 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004330 VkShaderModule shaderModule,
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004331 VkResult result)
4332{
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004333
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004334
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004335 if(result < VK_SUCCESS)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004336 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004337 std::string reason = "vkDestroyShaderModule parameter, VkResult result, is " + EnumeratorString(result);
4338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4339 return false;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004340 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004341
4342 return true;
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004343}
4344
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004345VK_LAYER_EXPORT VkResult VKAPI vkDestroyShaderModule(
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004346 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004347 VkShaderModule shaderModule)
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004348{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004349 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShaderModule(device, shaderModule);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004350
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004351 PostDestroyShaderModule(device, shaderModule, result);
Courtney Goeltzenleuchter2d034fd2015-06-28 13:01:17 -06004352
4353 return result;
4354}
4355
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004356bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004357 VkDevice device,
4358 const VkShaderCreateInfo* pCreateInfo)
4359{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004360 if(pCreateInfo != nullptr)
4361 {
4362 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004363 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004365 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004367 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004368 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004370 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004372
4373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004374}
4375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004376bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004377 VkDevice device,
4378 VkShader* pShader,
4379 VkResult result)
4380{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004381
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004382 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004383 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004384 }
4385
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004386 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004387 {
4388 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4390 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004391 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004392
4393 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004394}
4395
4396VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
4397 VkDevice device,
4398 const VkShaderCreateInfo* pCreateInfo,
4399 VkShader* pShader)
4400{
4401 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004402
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004403 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
4404
4405 PostCreateShader(device, pShader, result);
4406
4407 return result;
4408}
4409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004410bool PostDestroyShader(
4411 VkDevice device,
4412 VkShader shader,
4413 VkResult result)
4414{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004415
4416
4417 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004418 {
4419 std::string reason = "vkDestroyShader parameter, VkResult result, is " + EnumeratorString(result);
4420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4421 return false;
4422 }
4423
4424 return true;
4425}
4426
4427VK_LAYER_EXPORT VkResult VKAPI vkDestroyShader(
4428 VkDevice device,
4429 VkShader shader)
4430{
4431 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyShader(device, shader);
4432
4433 PostDestroyShader(device, shader, result);
4434
4435 return result;
4436}
4437
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004438bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004439 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004440 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004441{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004442 if(pCreateInfo != nullptr)
4443 {
4444 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004445 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004447 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004449 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004450 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004451 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004452 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004453 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004454
4455 return true;
4456}
4457
4458bool PostCreatePipelineCache(
4459 VkDevice device,
4460 VkPipelineCache* pPipelineCache,
4461 VkResult result)
4462{
4463
4464 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004465 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004466 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004467
4468 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004470 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4472 return false;
4473 }
4474
4475 return true;
4476}
4477
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004478VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004479 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004480 const VkPipelineCacheCreateInfo* pCreateInfo,
4481 VkPipelineCache* pPipelineCache)
4482{
4483 PreCreatePipelineCache(device, pCreateInfo);
4484
4485 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4486
4487 PostCreatePipelineCache(device, pPipelineCache, result);
4488
4489 return result;
4490}
4491
4492bool PostDestroyPipelineCache(
4493 VkDevice device,
4494 VkPipelineCache pipelineCache,
Tony Barboure307f582015-07-10 15:29:03 -06004495 VkResult result)
4496{
4497
Tony Barboure307f582015-07-10 15:29:03 -06004498
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004499 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06004500 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004501 std::string reason = "vkDestroyPipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4503 return false;
4504 }
4505
4506 return true;
4507}
4508
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004509VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineCache(
4510 VkDevice device,
4511 VkPipelineCache pipelineCache)
4512{
4513 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineCache(device, pipelineCache);
4514
4515 PostDestroyPipelineCache(device, pipelineCache, result);
4516
4517 return result;
4518}
4519
4520bool PostGetPipelineCacheSize(
4521 VkDevice device,
4522 VkPipelineCache pipelineCache)
4523{
4524
4525
4526 return true;
4527}
4528
4529VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4530 VkDevice device,
4531 VkPipelineCache pipelineCache)
4532{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004533 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004534
4535 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004536
4537 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004538}
4539
4540bool PostGetPipelineCacheData(
4541 VkDevice device,
4542 VkPipelineCache pipelineCache,
4543 void* pData,
4544 VkResult result)
4545{
4546
4547
4548 if(pData != nullptr)
4549 {
4550 }
4551
4552 if(result < VK_SUCCESS)
4553 {
4554 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4556 return false;
4557 }
4558
4559 return true;
4560}
4561
4562VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4563 VkDevice device,
4564 VkPipelineCache pipelineCache,
4565 void* pData)
4566{
4567 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4568
4569 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4570
4571 return result;
4572}
4573
4574bool PreMergePipelineCaches(
4575 VkDevice device,
4576 const VkPipelineCache* pSrcCaches)
4577{
4578 if(pSrcCaches != nullptr)
4579 {
4580 }
4581
4582 return true;
4583}
4584
4585bool PostMergePipelineCaches(
4586 VkDevice device,
4587 VkPipelineCache destCache,
4588 uint32_t srcCacheCount,
4589 VkResult result)
4590{
4591
4592
4593
4594 if(result < VK_SUCCESS)
4595 {
4596 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4597 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4598 return false;
4599 }
4600
4601 return true;
4602}
4603
4604VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4605 VkDevice device,
4606 VkPipelineCache destCache,
4607 uint32_t srcCacheCount,
4608 const VkPipelineCache* pSrcCaches)
4609{
4610 PreMergePipelineCaches(device, pSrcCaches);
4611
4612 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4613
4614 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4615
4616 return result;
4617}
4618
4619bool PreCreateGraphicsPipelines(
4620 VkDevice device,
4621 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4622{
4623 if(pCreateInfos != nullptr)
4624 {
4625 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4626 {
4627 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4628 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4629 return false;
4630 }
4631 if(pCreateInfos->pStages != nullptr)
4632 {
4633 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4634 {
4635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4636 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4637 return false;
4638 }
4639 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4640 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4641 {
4642 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4643 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4644 return false;
4645 }
4646 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4647 {
4648 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4649 {
4650 }
4651 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4652 {
4653 }
4654 }
4655 }
4656 if(pCreateInfos->pVertexInputState != nullptr)
4657 {
4658 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4659 {
4660 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4661 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4662 return false;
4663 }
4664 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4665 {
4666 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4667 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4668 {
4669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4670 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4671 return false;
4672 }
4673 }
4674 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4675 {
4676 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4677 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4678 {
4679 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4680 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4681 return false;
4682 }
4683 }
4684 }
4685 if(pCreateInfos->pInputAssemblyState != nullptr)
4686 {
4687 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4688 {
4689 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4690 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4691 return false;
4692 }
4693 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4694 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4695 {
4696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4697 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4698 return false;
4699 }
4700 }
4701 if(pCreateInfos->pTessellationState != nullptr)
4702 {
4703 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4704 {
4705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4706 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4707 return false;
4708 }
4709 }
4710 if(pCreateInfos->pViewportState != nullptr)
4711 {
4712 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4713 {
4714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4715 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4716 return false;
4717 }
4718 }
4719 if(pCreateInfos->pRasterState != nullptr)
4720 {
4721 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4722 {
4723 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4724 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4725 return false;
4726 }
4727 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4728 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4729 {
4730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4731 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4732 return false;
4733 }
4734 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4735 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4736 {
4737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4738 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4739 return false;
4740 }
4741 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4742 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4743 {
4744 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4745 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4746 return false;
4747 }
4748 }
4749 if(pCreateInfos->pMultisampleState != nullptr)
4750 {
4751 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4752 {
4753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4754 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4755 return false;
4756 }
4757 }
4758 if(pCreateInfos->pDepthStencilState != nullptr)
4759 {
4760 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4761 {
4762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4763 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4764 return false;
4765 }
4766 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4767 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4768 {
4769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4770 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4771 return false;
4772 }
4773 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4774 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4775 {
4776 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4777 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4778 return false;
4779 }
4780 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4781 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4782 {
4783 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4784 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4785 return false;
4786 }
4787 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4788 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4789 {
4790 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4791 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4792 return false;
4793 }
4794 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4795 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4796 {
4797 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4798 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4799 return false;
4800 }
4801 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4802 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4803 {
4804 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4805 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4806 return false;
4807 }
4808 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4809 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4810 {
4811 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4812 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4813 return false;
4814 }
4815 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4816 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4817 {
4818 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4819 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4820 return false;
4821 }
4822 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4823 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4824 {
4825 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4826 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4827 return false;
4828 }
4829 }
4830 if(pCreateInfos->pColorBlendState != nullptr)
4831 {
4832 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4833 {
4834 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4835 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4836 return false;
4837 }
4838 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4839 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4840 {
4841 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4842 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4843 return false;
4844 }
4845 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4846 {
4847 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4848 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4849 {
4850 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4851 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4852 return false;
4853 }
4854 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4855 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4856 {
4857 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4858 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4859 return false;
4860 }
4861 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4862 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4863 {
4864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4865 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4866 return false;
4867 }
4868 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4869 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4870 {
4871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4872 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4873 return false;
4874 }
4875 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4876 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4877 {
4878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4879 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4880 return false;
4881 }
4882 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4883 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4884 {
4885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4886 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4887 return false;
4888 }
4889 }
4890 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004891 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4892 {
4893 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4894 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4895 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004896 }
4897
4898 return true;
4899}
4900
4901bool PostCreateGraphicsPipelines(
4902 VkDevice device,
4903 VkPipelineCache pipelineCache,
4904 uint32_t count,
4905 VkPipeline* pPipelines,
4906 VkResult result)
4907{
4908
4909
4910
4911 if(pPipelines != nullptr)
4912 {
4913 }
4914
4915 if(result < VK_SUCCESS)
4916 {
4917 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4918 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4919 return false;
4920 }
4921
4922 return true;
4923}
4924
4925VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4926 VkDevice device,
4927 VkPipelineCache pipelineCache,
4928 uint32_t count,
4929 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4930 VkPipeline* pPipelines)
4931{
4932 PreCreateGraphicsPipelines(device, pCreateInfos);
4933
4934 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4935
4936 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4937
4938 return result;
4939}
4940
4941bool PreCreateComputePipelines(
4942 VkDevice device,
4943 const VkComputePipelineCreateInfo* pCreateInfos)
4944{
4945 if(pCreateInfos != nullptr)
4946 {
4947 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4948 {
4949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4950 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4951 return false;
4952 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004953 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004954 {
4955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4956 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4957 return false;
4958 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004959 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4960 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004961 {
4962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4963 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4964 return false;
4965 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004966 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004967 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004968 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004969 {
4970 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004971 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004972 {
4973 }
4974 }
4975 }
4976
4977 return true;
4978}
4979
4980bool PostCreateComputePipelines(
4981 VkDevice device,
4982 VkPipelineCache pipelineCache,
4983 uint32_t count,
4984 VkPipeline* pPipelines,
4985 VkResult result)
4986{
4987
4988
4989
4990 if(pPipelines != nullptr)
4991 {
4992 }
4993
4994 if(result < VK_SUCCESS)
4995 {
4996 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4997 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4998 return false;
4999 }
5000
5001 return true;
5002}
5003
5004VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
5005 VkDevice device,
5006 VkPipelineCache pipelineCache,
5007 uint32_t count,
5008 const VkComputePipelineCreateInfo* pCreateInfos,
5009 VkPipeline* pPipelines)
5010{
5011 PreCreateComputePipelines(device, pCreateInfos);
5012
5013 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
5014
5015 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
5016
5017 return result;
5018}
5019
Tony Barboure307f582015-07-10 15:29:03 -06005020bool PostDestroyPipeline(
5021 VkDevice device,
5022 VkPipeline pipeline,
5023 VkResult result)
5024{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005025
5026
5027 if(result < VK_SUCCESS)
Tony Barboure307f582015-07-10 15:29:03 -06005028 {
5029 std::string reason = "vkDestroyPipeline parameter, VkResult result, is " + EnumeratorString(result);
5030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5031 return false;
5032 }
5033
5034 return true;
5035}
5036
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005037VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipeline(
5038 VkDevice device,
5039 VkPipeline pipeline)
5040{
5041 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipeline(device, pipeline);
5042
5043 PostDestroyPipeline(device, pipeline, result);
5044
5045 return result;
5046}
5047
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005048bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005049 VkDevice device,
5050 const VkPipelineLayoutCreateInfo* pCreateInfo)
5051{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005052 if(pCreateInfo != nullptr)
5053 {
5054 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005055 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005057 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5058 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005059 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005060 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005061 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005062 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005063 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005064 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005065 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005066 }
5067
5068 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005069}
5070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005071bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005072 VkDevice device,
5073 VkPipelineLayout* pPipelineLayout,
5074 VkResult result)
5075{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005076
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005077 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005078 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005079 }
5080
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005081 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005082 {
5083 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5085 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005086 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005087
5088 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005089}
5090
5091VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
5092 VkDevice device,
5093 const VkPipelineLayoutCreateInfo* pCreateInfo,
5094 VkPipelineLayout* pPipelineLayout)
5095{
5096 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005097
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005098 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
5099
5100 PostCreatePipelineLayout(device, pPipelineLayout, result);
5101
5102 return result;
5103}
5104
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005105bool PostDestroyPipelineLayout(
5106 VkDevice device,
5107 VkPipelineLayout pipelineLayout,
5108 VkResult result)
5109{
5110
5111
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005112 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005113 {
5114 std::string reason = "vkDestroyPipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
5115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5116 return false;
5117 }
5118
5119 return true;
5120}
5121
5122VK_LAYER_EXPORT VkResult VKAPI vkDestroyPipelineLayout(
5123 VkDevice device,
5124 VkPipelineLayout pipelineLayout)
5125{
5126 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyPipelineLayout(device, pipelineLayout);
5127
5128 PostDestroyPipelineLayout(device, pipelineLayout, result);
5129
5130 return result;
5131}
5132
5133bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005134 VkDevice device,
5135 const VkSamplerCreateInfo* pCreateInfo)
5136{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005137 if(pCreateInfo != nullptr)
5138 {
5139 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005142 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005144 }
5145 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5146 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
5147 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005148 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005149 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005150 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005151 }
5152 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
5153 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
5154 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005156 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005157 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005158 }
5159 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
5160 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
5161 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005163 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005164 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005165 }
5166 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
5167 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
5168 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005170 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005171 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005172 }
5173 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
5174 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
5175 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005177 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005178 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005179 }
5180 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
5181 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
5182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005184 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005186 }
5187 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
5188 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
5189 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005191 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005193 }
5194 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
5195 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
5196 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005198 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005199 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005200 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005201 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005202
5203 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005204}
5205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005207 VkDevice device,
5208 VkSampler* pSampler,
5209 VkResult result)
5210{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005212 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005213 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005214 }
5215
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005216 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005217 {
5218 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005219 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5220 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005221 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005222
5223 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224}
5225
5226VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
5227 VkDevice device,
5228 const VkSamplerCreateInfo* pCreateInfo,
5229 VkSampler* pSampler)
5230{
5231 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005232
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005233 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
5234
5235 PostCreateSampler(device, pSampler, result);
5236
5237 return result;
5238}
5239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005240bool PostDestroySampler(
5241 VkDevice device,
5242 VkSampler sampler,
5243 VkResult result)
5244{
5245
5246
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005247 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005248 {
5249 std::string reason = "vkDestroySampler parameter, VkResult result, is " + EnumeratorString(result);
5250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5251 return false;
5252 }
5253
5254 return true;
5255}
5256
5257VK_LAYER_EXPORT VkResult VKAPI vkDestroySampler(
5258 VkDevice device,
5259 VkSampler sampler)
5260{
5261 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroySampler(device, sampler);
5262
5263 PostDestroySampler(device, sampler, result);
5264
5265 return result;
5266}
5267
5268bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005269 VkDevice device,
5270 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
5271{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005272 if(pCreateInfo != nullptr)
5273 {
5274 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005275 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005276 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005277 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005278 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005279 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005280 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005281 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005282 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5283 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5284 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005286 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005287 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005288 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005289 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005290 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005291 }
5292 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005293 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005294
5295 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005296}
5297
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005298bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005299 VkDevice device,
5300 VkDescriptorSetLayout* pSetLayout,
5301 VkResult result)
5302{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005303
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005304 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005305 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306 }
5307
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005308 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005309 {
5310 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005311 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5312 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005313 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005314
5315 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316}
5317
5318VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
5319 VkDevice device,
5320 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
5321 VkDescriptorSetLayout* pSetLayout)
5322{
5323 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005324
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005325 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
5326
5327 PostCreateDescriptorSetLayout(device, pSetLayout, result);
5328
5329 return result;
5330}
5331
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005332bool PostDestroyDescriptorSetLayout(
5333 VkDevice device,
5334 VkDescriptorSetLayout descriptorSetLayout,
5335 VkResult result)
5336{
5337
5338
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005339 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005340 {
5341 std::string reason = "vkDestroyDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
5342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5343 return false;
5344 }
5345
5346 return true;
5347}
5348
5349VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorSetLayout(
5350 VkDevice device,
5351 VkDescriptorSetLayout descriptorSetLayout)
5352{
5353 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorSetLayout(device, descriptorSetLayout);
5354
5355 PostDestroyDescriptorSetLayout(device, descriptorSetLayout, result);
5356
5357 return result;
5358}
5359
5360bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361 VkDevice device,
5362 const VkDescriptorPoolCreateInfo* pCreateInfo)
5363{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005364 if(pCreateInfo != nullptr)
5365 {
5366 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005368 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005369 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005370 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005371 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005372 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5375 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
5376 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005377 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005378 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005379 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005380 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005381 }
5382 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005383
5384 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005385}
5386
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005387bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388 VkDevice device,
5389 VkDescriptorPoolUsage poolUsage,
5390 uint32_t maxSets,
5391 VkDescriptorPool* pDescriptorPool,
5392 VkResult result)
5393{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394
5395 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
5396 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
5397 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005399 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401 }
5402
5403
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005404 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005406 }
5407
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005408 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005409 {
5410 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005411 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5412 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005414
5415 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005416}
5417
5418VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
5419 VkDevice device,
5420 VkDescriptorPoolUsage poolUsage,
5421 uint32_t maxSets,
5422 const VkDescriptorPoolCreateInfo* pCreateInfo,
5423 VkDescriptorPool* pDescriptorPool)
5424{
5425 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005426
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005427 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
5428
5429 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
5430
5431 return result;
5432}
5433
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005434bool PostDestroyDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005435 VkDevice device,
5436 VkDescriptorPool descriptorPool,
5437 VkResult result)
5438{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005439
5440
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005441 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005442 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005443 std::string reason = "vkDestroyDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
5444 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5445 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005446 }
5447
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005448 return true;
5449}
5450
5451VK_LAYER_EXPORT VkResult VKAPI vkDestroyDescriptorPool(
5452 VkDevice device,
5453 VkDescriptorPool descriptorPool)
5454{
5455 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDescriptorPool(device, descriptorPool);
5456
5457 PostDestroyDescriptorPool(device, descriptorPool, result);
5458
5459 return result;
5460}
5461
5462bool PostResetDescriptorPool(
5463 VkDevice device,
5464 VkDescriptorPool descriptorPool,
5465 VkResult result)
5466{
5467
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005469 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005470 {
5471 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005472 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5473 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005474 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475
5476 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005477}
5478
5479VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
5480 VkDevice device,
5481 VkDescriptorPool descriptorPool)
5482{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005483 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
5484
5485 PostResetDescriptorPool(device, descriptorPool, result);
5486
5487 return result;
5488}
5489
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005490bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005491 VkDevice device,
5492 const VkDescriptorSetLayout* pSetLayouts)
5493{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005494 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005495 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005496 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005497
5498 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005499}
5500
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005501bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005502 VkDevice device,
5503 VkDescriptorPool descriptorPool,
5504 VkDescriptorSetUsage setUsage,
5505 uint32_t count,
5506 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005507 VkResult result)
5508{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510
5511 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
5512 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
5513 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005515 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 }
5518
5519
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005520 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005521 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 }
5523
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005524 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005525 {
5526 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5528 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005530
5531 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005532}
5533
5534VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
5535 VkDevice device,
5536 VkDescriptorPool descriptorPool,
5537 VkDescriptorSetUsage setUsage,
5538 uint32_t count,
5539 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06005540 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005541{
5542 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005543
Cody Northropc8aa4a52015-08-03 12:47:29 -06005544 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005545
Cody Northropc8aa4a52015-08-03 12:47:29 -06005546 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005547
5548 return result;
5549}
5550
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005551bool PreFreeDescriptorSets(
5552 VkDevice device,
5553 const VkDescriptorSet* pDescriptorSets)
5554{
5555 if(pDescriptorSets != nullptr)
5556 {
5557 }
5558
5559 return true;
5560}
5561
5562bool PostFreeDescriptorSets(
5563 VkDevice device,
5564 VkDescriptorPool descriptorPool,
5565 uint32_t count,
5566 VkResult result)
5567{
5568
5569
5570
5571 if(result < VK_SUCCESS)
5572 {
5573 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
5574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5575 return false;
5576 }
5577
5578 return true;
5579}
5580
5581VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
5582 VkDevice device,
5583 VkDescriptorPool descriptorPool,
5584 uint32_t count,
5585 const VkDescriptorSet* pDescriptorSets)
5586{
5587 PreFreeDescriptorSets(device, pDescriptorSets);
5588
5589 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
5590
5591 PostFreeDescriptorSets(device, descriptorPool, count, result);
5592
5593 return result;
5594}
5595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005597 VkDevice device,
5598 const VkWriteDescriptorSet* pDescriptorWrites,
5599 const VkCopyDescriptorSet* pDescriptorCopies)
5600{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005601 if(pDescriptorWrites != nullptr)
5602 {
5603 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005604 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005605 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005606 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005607 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608 }
5609 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
5610 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
5611 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005612 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005613 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005614 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005615 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005616 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005618 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5619 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5620 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005621 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005622 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005623 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005625 }
5626 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005627
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005628 if(pDescriptorCopies != nullptr)
5629 {
5630 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005631 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005633 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005634 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005636 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005637
5638 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005639}
5640
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005641bool PostUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005642 VkDevice device,
5643 uint32_t writeCount,
5644 uint32_t copyCount,
5645 VkResult result)
5646{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647
5648
5649
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005650 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005651 {
5652 std::string reason = "vkUpdateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005653 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5654 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005655 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005656
5657 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005658}
5659
5660VK_LAYER_EXPORT VkResult VKAPI vkUpdateDescriptorSets(
5661 VkDevice device,
5662 uint32_t writeCount,
5663 const VkWriteDescriptorSet* pDescriptorWrites,
5664 uint32_t copyCount,
5665 const VkCopyDescriptorSet* pDescriptorCopies)
5666{
5667 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005668
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005669 VkResult result = get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
5670
5671 PostUpdateDescriptorSets(device, writeCount, copyCount, result);
5672
5673 return result;
5674}
5675
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005676bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005679{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005680 if(pCreateInfo != nullptr)
5681 {
5682 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005683 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005684 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005685 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005686 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005687 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005688 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005690 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005691 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005692 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005693 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005694 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005695
5696 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005697}
5698
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005699bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005700 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005702 VkResult result)
5703{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005704
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005705 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005706 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005707 }
5708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005709 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710 {
5711 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5713 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005714 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005715
5716 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005717}
5718
5719VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5720 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005721 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5722 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723{
5724 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005725
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005726 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5727
5728 PostCreateDynamicViewportState(device, pState, result);
5729
5730 return result;
5731}
5732
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005733bool PostDestroyDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005734 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005735 VkDynamicViewportState dynamicViewportState,
5736 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005737{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005738
5739
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005740 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005741 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005742 std::string reason = "vkDestroyDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
5743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5744 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005745 }
5746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005747 return true;
5748}
5749
5750VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicViewportState(
5751 VkDevice device,
5752 VkDynamicViewportState dynamicViewportState)
5753{
5754 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicViewportState(device, dynamicViewportState);
5755
5756 PostDestroyDynamicViewportState(device, dynamicViewportState, result);
5757
5758 return result;
5759}
5760
Cody Northrope4bc6942015-08-26 10:01:32 -06005761bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005763 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005764{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005765 if(pCreateInfo != nullptr)
5766 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005767 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005768 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005770 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005771 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005773 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005774
5775 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005776}
5777
Cody Northrope4bc6942015-08-26 10:01:32 -06005778bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005780 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781 VkResult result)
5782{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005784 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005785 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786 }
5787
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005788 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005790 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5792 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005793 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005794
5795 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005796}
5797
Cody Northrope4bc6942015-08-26 10:01:32 -06005798VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005799 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005800 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5801 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802{
Cody Northrope4bc6942015-08-26 10:01:32 -06005803 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005804
Cody Northrope4bc6942015-08-26 10:01:32 -06005805 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005806
Cody Northrope4bc6942015-08-26 10:01:32 -06005807 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808
5809 return result;
5810}
5811
Cody Northrope4bc6942015-08-26 10:01:32 -06005812bool PostDestroyDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005813 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005814 VkDynamicLineWidthState dynamicLineWidthState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005815 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005816{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005817
5818
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005819 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005820 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005821 std::string reason = "vkDestroyDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5823 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824 }
5825
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005826 return true;
5827}
5828
Cody Northrope4bc6942015-08-26 10:01:32 -06005829VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005830 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005831 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832{
Cody Northrope4bc6942015-08-26 10:01:32 -06005833 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicLineWidthState(device, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005834
Cody Northrope4bc6942015-08-26 10:01:32 -06005835 PostDestroyDynamicLineWidthState(device, dynamicLineWidthState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005836
5837 return result;
5838}
5839
Cody Northrope4bc6942015-08-26 10:01:32 -06005840bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005841 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005842 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005843{
5844 if(pCreateInfo != nullptr)
5845 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005846 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005847 {
5848 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005849 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005850 return false;
5851 }
5852 }
5853
5854 return true;
5855}
5856
Cody Northrope4bc6942015-08-26 10:01:32 -06005857bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005858 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005859 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005860 VkResult result)
5861{
5862
5863 if(pState != nullptr)
5864 {
5865 }
5866
5867 if(result < VK_SUCCESS)
5868 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005869 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005870 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5871 return false;
5872 }
5873
5874 return true;
5875}
5876
Cody Northrope4bc6942015-08-26 10:01:32 -06005877VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005878 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005879 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5880 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005881{
Cody Northrope4bc6942015-08-26 10:01:32 -06005882 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005883
Cody Northrope4bc6942015-08-26 10:01:32 -06005884 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005885
Cody Northrope4bc6942015-08-26 10:01:32 -06005886 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005887
5888 return result;
5889}
5890
Cody Northrope4bc6942015-08-26 10:01:32 -06005891bool PostDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005892 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005893 VkDynamicDepthBiasState dynamicDepthBiasState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005894 VkResult result)
5895{
5896
5897
5898 if(result < VK_SUCCESS)
5899 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005900 std::string reason = "vkDestroyDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005901 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5902 return false;
5903 }
5904
5905 return true;
5906}
5907
Cody Northrope4bc6942015-08-26 10:01:32 -06005908VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005909 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005910 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005911{
Cody Northrope4bc6942015-08-26 10:01:32 -06005912 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBiasState(device, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005913
Cody Northrope4bc6942015-08-26 10:01:32 -06005914 PostDestroyDynamicDepthBiasState(device, dynamicDepthBiasState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005915
5916 return result;
5917}
5918
Cody Northrope4bc6942015-08-26 10:01:32 -06005919bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005920 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005921 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005922{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005923 if(pCreateInfo != nullptr)
5924 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005925 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005928 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005929 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005931 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932
5933 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005934}
5935
Cody Northrope4bc6942015-08-26 10:01:32 -06005936bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005937 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005938 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005939 VkResult result)
5940{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005942 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005943 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005944 }
5945
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005946 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005947 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005948 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5950 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005952
5953 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005954}
5955
Cody Northrope4bc6942015-08-26 10:01:32 -06005956VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005958 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5959 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005960{
Cody Northrope4bc6942015-08-26 10:01:32 -06005961 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005962
Cody Northrope4bc6942015-08-26 10:01:32 -06005963 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005964
Cody Northrope4bc6942015-08-26 10:01:32 -06005965 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005966
5967 return result;
5968}
5969
Cody Northrope4bc6942015-08-26 10:01:32 -06005970bool PostDestroyDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005971 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005972 VkDynamicBlendState dynamicBlendState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005973 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005974{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005975
5976
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005977 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005978 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005979 std::string reason = "vkDestroyDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5981 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005982 }
5983
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005984 return true;
5985}
5986
Cody Northrope4bc6942015-08-26 10:01:32 -06005987VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005988 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005989 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005990{
Cody Northrope4bc6942015-08-26 10:01:32 -06005991 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicBlendState(device, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005992
Cody Northrope4bc6942015-08-26 10:01:32 -06005993 PostDestroyDynamicBlendState(device, dynamicBlendState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005994
5995 return result;
5996}
5997
Cody Northrope4bc6942015-08-26 10:01:32 -06005998bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005999 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006000 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006001{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006002 if(pCreateInfo != nullptr)
6003 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006004 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06006007 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006008 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006009 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006010 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006011
6012 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006013}
6014
Cody Northrope4bc6942015-08-26 10:01:32 -06006015bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006017 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006018 VkResult result)
6019{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006020
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006021 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006022 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006023 }
6024
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006025 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006026 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006027 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006028 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6029 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006030 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006031
6032 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006033}
6034
Cody Northrope4bc6942015-08-26 10:01:32 -06006035VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006036 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006037 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
6038 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006039{
Cody Northrope4bc6942015-08-26 10:01:32 -06006040 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006041
Cody Northrope4bc6942015-08-26 10:01:32 -06006042 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006043
Cody Northrope4bc6942015-08-26 10:01:32 -06006044 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006045
6046 return result;
6047}
6048
Cody Northrope4bc6942015-08-26 10:01:32 -06006049bool PostDestroyDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006050 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006051 VkDynamicDepthBoundsState dynamicDepthBoundsState,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052 VkResult result)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006053{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006054 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006055 {
Cody Northrope4bc6942015-08-26 10:01:32 -06006056 std::string reason = "vkDestroyDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6058 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059 }
6060
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006061 return true;
6062}
6063
Cody Northrope4bc6942015-08-26 10:01:32 -06006064VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006065 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06006066 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006067{
Cody Northrope4bc6942015-08-26 10:01:32 -06006068 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006069
Cody Northrope4bc6942015-08-26 10:01:32 -06006070 PostDestroyDynamicDepthBoundsState(device, dynamicDepthBoundsState, result);
Cody Northrop2605cb02015-08-18 15:21:16 -06006071
6072 return result;
6073}
6074
6075bool PreCreateDynamicStencilState(
6076 VkDevice device,
6077 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6078 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
6079{
6080 if(pCreateInfoFront != nullptr)
6081 {
6082 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6083 {
6084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6085 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
6086 return false;
6087 }
6088 }
6089
6090 if(pCreateInfoBack != nullptr)
6091 {
6092 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
6093 {
6094 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6095 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
6096 return false;
6097 }
6098 }
6099
6100 return true;
6101}
6102
6103bool PostCreateDynamicStencilState(
6104 VkDevice device,
6105 VkDynamicStencilState* pState,
6106 VkResult result)
6107{
6108
6109 if(pState != nullptr)
6110 {
6111 }
6112
6113 if(result < VK_SUCCESS)
6114 {
6115 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6117 return false;
6118 }
6119
6120 return true;
6121}
6122
6123VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
6124 VkDevice device,
6125 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
6126 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
6127 VkDynamicStencilState* pState)
6128{
6129 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
6130
6131 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
6132
6133 PostCreateDynamicStencilState(device, pState, result);
6134
6135 return result;
6136}
6137
6138bool PostDestroyDynamicStencilState(
6139 VkDevice device,
6140 VkDynamicStencilState dynamicStencilState,
6141 VkResult result)
6142{
6143 if(result < VK_SUCCESS)
6144 {
6145 std::string reason = "vkDestroyDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
6146 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6147 return false;
6148 }
6149
6150 return true;
6151}
6152
6153VK_LAYER_EXPORT VkResult VKAPI vkDestroyDynamicStencilState(
6154 VkDevice device,
6155 VkDynamicStencilState dynamicStencilState)
6156{
6157 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyDynamicStencilState(device, dynamicStencilState);
6158
6159 PostDestroyDynamicStencilState(device, dynamicStencilState, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006160
6161 return result;
6162}
6163
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006164bool PreCreateFramebuffer(
6165 VkDevice device,
6166 const VkFramebufferCreateInfo* pCreateInfo)
6167{
6168 if(pCreateInfo != nullptr)
6169 {
6170 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
6171 {
6172 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6173 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6174 return false;
6175 }
6176 if(pCreateInfo->pAttachments != nullptr)
6177 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006178 }
6179 }
6180
6181 return true;
6182}
6183
6184bool PostCreateFramebuffer(
6185 VkDevice device,
6186 VkFramebuffer* pFramebuffer,
6187 VkResult result)
6188{
6189
6190 if(pFramebuffer != nullptr)
6191 {
6192 }
6193
6194 if(result < VK_SUCCESS)
6195 {
6196 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6198 return false;
6199 }
6200
6201 return true;
6202}
6203
6204VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
6205 VkDevice device,
6206 const VkFramebufferCreateInfo* pCreateInfo,
6207 VkFramebuffer* pFramebuffer)
6208{
6209 PreCreateFramebuffer(device, pCreateInfo);
6210
6211 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
6212
6213 PostCreateFramebuffer(device, pFramebuffer, result);
6214
6215 return result;
6216}
6217
6218bool PostDestroyFramebuffer(
6219 VkDevice device,
6220 VkFramebuffer framebuffer,
6221 VkResult result)
6222{
6223
6224
6225 if(result < VK_SUCCESS)
6226 {
6227 std::string reason = "vkDestroyFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
6228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6229 return false;
6230 }
6231
6232 return true;
6233}
6234
6235VK_LAYER_EXPORT VkResult VKAPI vkDestroyFramebuffer(
6236 VkDevice device,
6237 VkFramebuffer framebuffer)
6238{
6239 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyFramebuffer(device, framebuffer);
6240
6241 PostDestroyFramebuffer(device, framebuffer, result);
6242
6243 return result;
6244}
6245
6246bool PreCreateRenderPass(
6247 VkDevice device,
6248 const VkRenderPassCreateInfo* pCreateInfo)
6249{
6250 if(pCreateInfo != nullptr)
6251 {
6252 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
6253 {
6254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6255 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6256 return false;
6257 }
6258 if(pCreateInfo->pAttachments != nullptr)
6259 {
6260 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
6261 {
6262 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6263 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
6264 return false;
6265 }
6266 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
6267 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
6268 {
6269 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6270 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
6271 return false;
6272 }
6273 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6274 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6275 {
6276 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6277 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
6278 return false;
6279 }
6280 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6281 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6282 {
6283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6284 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
6285 return false;
6286 }
6287 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
6288 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
6289 {
6290 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6291 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
6292 return false;
6293 }
6294 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
6295 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
6296 {
6297 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6298 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
6299 return false;
6300 }
6301 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6302 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
6303 {
6304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6305 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
6306 return false;
6307 }
6308 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6309 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
6310 {
6311 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6312 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
6313 return false;
6314 }
6315 }
6316 if(pCreateInfo->pSubpasses != nullptr)
6317 {
6318 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
6319 {
6320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6321 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
6322 return false;
6323 }
6324 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6325 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6326 {
6327 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6328 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
6329 return false;
6330 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006331 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006332 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006333 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6334 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006335 {
6336 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006337 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006338 return false;
6339 }
6340 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006341 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006342 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006343 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6344 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006345 {
6346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006347 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006348 return false;
6349 }
6350 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006351 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006352 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006353 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6354 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006355 {
6356 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006357 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006358 return false;
6359 }
6360 }
6361 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6362 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
6363 {
6364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6365 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
6366 return false;
6367 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006368 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006369 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006370 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6371 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006372 {
6373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06006374 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006375 return false;
6376 }
6377 }
6378 }
6379 if(pCreateInfo->pDependencies != nullptr)
6380 {
6381 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
6382 {
6383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6384 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
6385 return false;
6386 }
6387 }
6388 }
6389
6390 return true;
6391}
6392
6393bool PostCreateRenderPass(
6394 VkDevice device,
6395 VkRenderPass* pRenderPass,
6396 VkResult result)
6397{
6398
6399 if(pRenderPass != nullptr)
6400 {
6401 }
6402
6403 if(result < VK_SUCCESS)
6404 {
6405 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6407 return false;
6408 }
6409
6410 return true;
6411}
6412
6413VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
6414 VkDevice device,
6415 const VkRenderPassCreateInfo* pCreateInfo,
6416 VkRenderPass* pRenderPass)
6417{
6418 PreCreateRenderPass(device, pCreateInfo);
6419
6420 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
6421
6422 PostCreateRenderPass(device, pRenderPass, result);
6423
6424 return result;
6425}
6426
6427bool PostDestroyRenderPass(
6428 VkDevice device,
6429 VkRenderPass renderPass,
6430 VkResult result)
6431{
6432
6433
6434 if(result < VK_SUCCESS)
6435 {
6436 std::string reason = "vkDestroyRenderPass parameter, VkResult result, is " + EnumeratorString(result);
6437 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6438 return false;
6439 }
6440
6441 return true;
6442}
6443
6444VK_LAYER_EXPORT VkResult VKAPI vkDestroyRenderPass(
6445 VkDevice device,
6446 VkRenderPass renderPass)
6447{
6448 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyRenderPass(device, renderPass);
6449
6450 PostDestroyRenderPass(device, renderPass, result);
6451
6452 return result;
6453}
6454
6455bool PostGetRenderAreaGranularity(
6456 VkDevice device,
6457 VkRenderPass renderPass,
6458 VkExtent2D* pGranularity,
6459 VkResult result)
6460{
6461
6462
6463 if(pGranularity != nullptr)
6464 {
6465 }
6466
6467 if(result < VK_SUCCESS)
6468 {
6469 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
6470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6471 return false;
6472 }
6473
6474 return true;
6475}
6476
6477VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
6478 VkDevice device,
6479 VkRenderPass renderPass,
6480 VkExtent2D* pGranularity)
6481{
6482 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
6483
6484 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
6485
6486 return result;
6487}
6488
6489bool PreCreateCommandPool(
6490 VkDevice device,
6491 const VkCmdPoolCreateInfo* pCreateInfo)
6492{
6493 if(pCreateInfo != nullptr)
6494 {
6495 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
6496 {
6497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6498 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
6499 return false;
6500 }
6501 }
6502
6503 return true;
6504}
6505
6506bool PostCreateCommandPool(
6507 VkDevice device,
6508 VkCmdPool* pCmdPool,
6509 VkResult result)
6510{
6511
6512 if(pCmdPool != nullptr)
6513 {
6514 }
6515
6516 if(result < VK_SUCCESS)
6517 {
6518 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6519 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6520 return false;
6521 }
6522
6523 return true;
6524}
6525
6526VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
6527 VkDevice device,
6528 const VkCmdPoolCreateInfo* pCreateInfo,
6529 VkCmdPool* pCmdPool)
6530{
6531 PreCreateCommandPool(device, pCreateInfo);
6532
6533 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
6534
6535 PostCreateCommandPool(device, pCmdPool, result);
6536
6537 return result;
6538}
6539
6540bool PostDestroyCommandPool(
6541 VkDevice device,
6542 VkCmdPool cmdPool,
6543 VkResult result)
6544{
6545
6546
6547 if(result < VK_SUCCESS)
6548 {
6549 std::string reason = "vkDestroyCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6550 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6551 return false;
6552 }
6553
6554 return true;
6555}
6556
6557VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandPool(
6558 VkDevice device,
6559 VkCmdPool cmdPool)
6560{
6561 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandPool(device, cmdPool);
6562
6563 PostDestroyCommandPool(device, cmdPool, result);
6564
6565 return result;
6566}
6567
6568bool PostResetCommandPool(
6569 VkDevice device,
6570 VkCmdPool cmdPool,
6571 VkCmdPoolResetFlags flags,
6572 VkResult result)
6573{
6574
6575
6576
6577 if(result < VK_SUCCESS)
6578 {
6579 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
6580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6581 return false;
6582 }
6583
6584 return true;
6585}
6586
6587VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
6588 VkDevice device,
6589 VkCmdPool cmdPool,
6590 VkCmdPoolResetFlags flags)
6591{
6592 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
6593
6594 PostResetCommandPool(device, cmdPool, flags, result);
6595
6596 return result;
6597}
6598
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006599bool PreCreateCommandBuffer(
6600 VkDevice device,
6601 const VkCmdBufferCreateInfo* pCreateInfo)
6602{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006603 if(pCreateInfo != nullptr)
6604 {
6605 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006606 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006608 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006609 return false;
6610 }
6611 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
6612 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
6613 {
6614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006615 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006616 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006617 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006618 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006620 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006621}
6622
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006623bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006624 VkDevice device,
6625 VkCmdBuffer* pCmdBuffer,
6626 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006627{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006628
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006629 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006630 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006631 }
6632
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006633 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634 {
6635 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006639
6640 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006641}
6642
6643VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
6644 VkDevice device,
6645 const VkCmdBufferCreateInfo* pCreateInfo,
6646 VkCmdBuffer* pCmdBuffer)
6647{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006648 PreCreateCommandBuffer(device, pCreateInfo);
6649
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006650 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
6651
6652 PostCreateCommandBuffer(device, pCmdBuffer, result);
6653
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006654 return result;
6655}
6656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006657bool PostDestroyCommandBuffer(
6658 VkDevice device,
6659 VkCmdBuffer commandBuffer,
6660 VkResult result)
6661{
6662
6663
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006664 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006665 {
6666 std::string reason = "vkDestroyCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
6667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6668 return false;
6669 }
6670
6671 return true;
6672}
6673
6674VK_LAYER_EXPORT VkResult VKAPI vkDestroyCommandBuffer(
6675 VkDevice device,
6676 VkCmdBuffer commandBuffer)
6677{
6678 VkResult result = get_dispatch_table(pc_device_table_map, device)->DestroyCommandBuffer(device, commandBuffer);
6679
6680 PostDestroyCommandBuffer(device, commandBuffer, result);
6681
6682 return result;
6683}
6684
6685bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006686 VkCmdBuffer cmdBuffer,
6687 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006688{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006689 if(pBeginInfo != nullptr)
6690 {
6691 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006693 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006694 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006695 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006696 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006697 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006698
6699 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006700}
6701
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006702bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006703 VkCmdBuffer cmdBuffer,
6704 VkResult result)
6705{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006707 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708 {
6709 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006710 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6711 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006712 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006713
6714 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715}
6716
6717VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
6718 VkCmdBuffer cmdBuffer,
6719 const VkCmdBufferBeginInfo* pBeginInfo)
6720{
6721 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006722
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
6724
6725 PostBeginCommandBuffer(cmdBuffer, result);
6726
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006727 return result;
6728}
6729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006730bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006731 VkCmdBuffer cmdBuffer,
6732 VkResult result)
6733{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006734
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006735 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006736 {
6737 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006738 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6739 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006740 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006741
6742 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743}
6744
6745VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
6746 VkCmdBuffer cmdBuffer)
6747{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006748 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
6749
6750 PostEndCommandBuffer(cmdBuffer, result);
6751
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006752 return result;
6753}
6754
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006755bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006756 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006757 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006758 VkResult result)
6759{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006760
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006761
6762 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006763 {
6764 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006765 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
6766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006767 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006768
6769 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006770}
6771
6772VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006773 VkCmdBuffer cmdBuffer,
6774 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006775{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06006776 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006777
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006778 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006779
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006780 return result;
6781}
6782
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006783bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006784 VkCmdBuffer cmdBuffer,
6785 VkPipelineBindPoint pipelineBindPoint,
6786 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006787{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006788
6789 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6790 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6791 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006792 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006793 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006794 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006795 }
6796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006797
6798 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006799}
6800
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006801VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
6802 VkCmdBuffer cmdBuffer,
6803 VkPipelineBindPoint pipelineBindPoint,
6804 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006805{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006806 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6807
6808 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
6809}
6810
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006811bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006812 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006813 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006814{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006815
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006816
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006817 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006818}
6819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006820VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006821 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006822 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006823{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006824 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006825
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006826 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006827}
6828
Cody Northrope4bc6942015-08-26 10:01:32 -06006829bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006830 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006831 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006832{
6833
6834
6835 return true;
6836}
6837
Cody Northrope4bc6942015-08-26 10:01:32 -06006838VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006839 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006840 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006841{
Cody Northrope4bc6942015-08-26 10:01:32 -06006842 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006843
Cody Northrope4bc6942015-08-26 10:01:32 -06006844 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006845}
6846
Cody Northrope4bc6942015-08-26 10:01:32 -06006847bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006848 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006849 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006850{
6851
6852
6853 return true;
6854}
6855
Cody Northrope4bc6942015-08-26 10:01:32 -06006856VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06006857 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006858 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06006859{
Cody Northrope4bc6942015-08-26 10:01:32 -06006860 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06006861
Cody Northrope4bc6942015-08-26 10:01:32 -06006862 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006863}
6864
Cody Northrope4bc6942015-08-26 10:01:32 -06006865bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006866 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006867 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006868{
6869
6870
6871 return true;
6872}
6873
Cody Northrope4bc6942015-08-26 10:01:32 -06006874VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006875 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006876 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006877{
Cody Northrope4bc6942015-08-26 10:01:32 -06006878 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006879
Cody Northrope4bc6942015-08-26 10:01:32 -06006880 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006881}
6882
Cody Northrope4bc6942015-08-26 10:01:32 -06006883bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006884 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006885 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006886{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006887 return true;
6888}
6889
Cody Northrope4bc6942015-08-26 10:01:32 -06006890VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006891 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06006892 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006893{
Cody Northrope4bc6942015-08-26 10:01:32 -06006894 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006895
Cody Northrope4bc6942015-08-26 10:01:32 -06006896 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06006897}
6898
6899bool PostCmdBindDynamicStencilState(
6900 VkCmdBuffer cmdBuffer,
6901 VkDynamicStencilState dynamicStencilState)
6902{
6903 return true;
6904}
6905
6906VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
6907 VkCmdBuffer cmdBuffer,
6908 VkDynamicStencilState dynamicStencilState)
6909{
6910 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
6911
6912 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006913}
6914
6915bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 VkCmdBuffer cmdBuffer,
6917 const VkDescriptorSet* pDescriptorSets,
6918 const uint32_t* pDynamicOffsets)
6919{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006920 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006921 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006922 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006923
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006924 if(pDynamicOffsets != nullptr)
6925 {
6926 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006927
6928 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006929}
6930
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006931bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006932 VkCmdBuffer cmdBuffer,
6933 VkPipelineBindPoint pipelineBindPoint,
6934 VkPipelineLayout layout,
6935 uint32_t firstSet,
6936 uint32_t setCount,
6937 uint32_t dynamicOffsetCount)
6938{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006939
6940 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6941 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6942 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006943 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006944 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006945 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006946 }
6947
6948
6949
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006950
6951
6952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006953}
6954
6955VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6956 VkCmdBuffer cmdBuffer,
6957 VkPipelineBindPoint pipelineBindPoint,
6958 VkPipelineLayout layout,
6959 uint32_t firstSet,
6960 uint32_t setCount,
6961 const VkDescriptorSet* pDescriptorSets,
6962 uint32_t dynamicOffsetCount,
6963 const uint32_t* pDynamicOffsets)
6964{
6965 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006966
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6968
6969 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6970}
6971
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006972bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006973 VkCmdBuffer cmdBuffer,
6974 VkBuffer buffer,
6975 VkDeviceSize offset,
6976 VkIndexType indexType)
6977{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006979
6980
6981 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6982 indexType > VK_INDEX_TYPE_END_RANGE)
6983 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006984 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006985 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006986 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006987 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006988
6989 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006990}
6991
6992VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6993 VkCmdBuffer cmdBuffer,
6994 VkBuffer buffer,
6995 VkDeviceSize offset,
6996 VkIndexType indexType)
6997{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006998 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6999
7000 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
7001}
7002
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007003bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007004 VkCmdBuffer cmdBuffer,
7005 const VkBuffer* pBuffers,
7006 const VkDeviceSize* pOffsets)
7007{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007008 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007009 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007010 }
7011
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007012 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007013 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007015
7016 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007017}
7018
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007019bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007020 VkCmdBuffer cmdBuffer,
7021 uint32_t startBinding,
7022 uint32_t bindingCount)
7023{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007024
7025
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007026
7027 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007028}
7029
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06007030VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007031 VkCmdBuffer cmdBuffer,
7032 uint32_t startBinding,
7033 uint32_t bindingCount,
7034 const VkBuffer* pBuffers,
7035 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007036{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007037 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007038
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007039 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
7040
7041 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007042}
7043
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007044bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007045 VkCmdBuffer cmdBuffer,
7046 uint32_t firstVertex,
7047 uint32_t vertexCount,
7048 uint32_t firstInstance,
7049 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007050{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007051
7052
7053
7054
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007055
7056 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007057}
7058
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007059VK_LAYER_EXPORT void VKAPI vkCmdDraw(
7060 VkCmdBuffer cmdBuffer,
7061 uint32_t firstVertex,
7062 uint32_t vertexCount,
7063 uint32_t firstInstance,
7064 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007065{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007066 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
7067
7068 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007069}
7070
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007071bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007072 VkCmdBuffer cmdBuffer,
7073 uint32_t firstIndex,
7074 uint32_t indexCount,
7075 int32_t vertexOffset,
7076 uint32_t firstInstance,
7077 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007078{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007079
7080
7081
7082
7083
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007084
7085 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007086}
7087
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007088VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
7089 VkCmdBuffer cmdBuffer,
7090 uint32_t firstIndex,
7091 uint32_t indexCount,
7092 int32_t vertexOffset,
7093 uint32_t firstInstance,
7094 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007095{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007096 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7097
7098 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
7099}
7100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007101bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007102 VkCmdBuffer cmdBuffer,
7103 VkBuffer buffer,
7104 VkDeviceSize offset,
7105 uint32_t count,
7106 uint32_t stride)
7107{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007108
7109
7110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007111
7112
7113 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007114}
7115
7116VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
7117 VkCmdBuffer cmdBuffer,
7118 VkBuffer buffer,
7119 VkDeviceSize offset,
7120 uint32_t count,
7121 uint32_t stride)
7122{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007123 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7124
7125 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
7126}
7127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007128bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007129 VkCmdBuffer cmdBuffer,
7130 VkBuffer buffer,
7131 VkDeviceSize offset,
7132 uint32_t count,
7133 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007134{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007135
7136
7137
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007138
7139
7140 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007141}
7142
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007143VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
7144 VkCmdBuffer cmdBuffer,
7145 VkBuffer buffer,
7146 VkDeviceSize offset,
7147 uint32_t count,
7148 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007149{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007150 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7151
7152 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
7153}
7154
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007155bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007156 VkCmdBuffer cmdBuffer,
7157 uint32_t x,
7158 uint32_t y,
7159 uint32_t z)
7160{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007161
7162
7163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007164
7165 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007166}
7167
7168VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
7169 VkCmdBuffer cmdBuffer,
7170 uint32_t x,
7171 uint32_t y,
7172 uint32_t z)
7173{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007174 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
7175
7176 PostCmdDispatch(cmdBuffer, x, y, z);
7177}
7178
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007179bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007180 VkCmdBuffer cmdBuffer,
7181 VkBuffer buffer,
7182 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007183{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007184
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007185
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007186
7187 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007188}
7189
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007190VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
7191 VkCmdBuffer cmdBuffer,
7192 VkBuffer buffer,
7193 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007194{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007195 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
7196
7197 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007198}
7199
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007200bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007201 VkCmdBuffer cmdBuffer,
7202 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007203{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007204 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007205 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007206 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007207
7208 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007209}
7210
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007211bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007212 VkCmdBuffer cmdBuffer,
7213 VkBuffer srcBuffer,
7214 VkBuffer destBuffer,
7215 uint32_t regionCount)
7216{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007218
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007219
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007220
7221 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007222}
7223
7224VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
7225 VkCmdBuffer cmdBuffer,
7226 VkBuffer srcBuffer,
7227 VkBuffer destBuffer,
7228 uint32_t regionCount,
7229 const VkBufferCopy* pRegions)
7230{
7231 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007232
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007233 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
7234
7235 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
7236}
7237
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007238bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007239 VkCmdBuffer cmdBuffer,
7240 const VkImageCopy* pRegions)
7241{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007242 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007243 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007244 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7245 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7246 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007247 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007248 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007249 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007250 }
7251 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7252 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7253 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007254 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007255 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007256 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007257 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007258 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007259
7260 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007261}
7262
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007263bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007264 VkCmdBuffer cmdBuffer,
7265 VkImage srcImage,
7266 VkImageLayout srcImageLayout,
7267 VkImage destImage,
7268 VkImageLayout destImageLayout,
7269 uint32_t regionCount)
7270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007271
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272
7273 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7274 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7275 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007276 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007277 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007278 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007279 }
7280
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007281
7282 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7283 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7284 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007285 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007286 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007287 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007288 }
7289
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007290
7291 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007292}
7293
7294VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
7295 VkCmdBuffer cmdBuffer,
7296 VkImage srcImage,
7297 VkImageLayout srcImageLayout,
7298 VkImage destImage,
7299 VkImageLayout destImageLayout,
7300 uint32_t regionCount,
7301 const VkImageCopy* pRegions)
7302{
7303 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007304
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007305 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7306
7307 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7308}
7309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007310bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007311 VkCmdBuffer cmdBuffer,
7312 const VkImageBlit* pRegions)
7313{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007314 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007316 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7317 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7318 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007319 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007320 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007321 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007322 }
7323 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7324 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7325 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007326 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007327 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007328 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007329 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007330 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007331
7332 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007333}
7334
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007335bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007336 VkCmdBuffer cmdBuffer,
7337 VkImage srcImage,
7338 VkImageLayout srcImageLayout,
7339 VkImage destImage,
7340 VkImageLayout destImageLayout,
7341 uint32_t regionCount,
7342 VkTexFilter filter)
7343{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007344
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007345
7346 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7347 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7348 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007349 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007350 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007351 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007352 }
7353
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007354
7355 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7356 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7357 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007358 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007359 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007360 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007361 }
7362
7363
7364 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
7365 filter > VK_TEX_FILTER_END_RANGE)
7366 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007367 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007368 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007369 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007370 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007371
7372 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007373}
7374
7375VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
7376 VkCmdBuffer cmdBuffer,
7377 VkImage srcImage,
7378 VkImageLayout srcImageLayout,
7379 VkImage destImage,
7380 VkImageLayout destImageLayout,
7381 uint32_t regionCount,
7382 const VkImageBlit* pRegions,
7383 VkTexFilter filter)
7384{
7385 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007386
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007387 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
7388
7389 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
7390}
7391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007392bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007393 VkCmdBuffer cmdBuffer,
7394 const VkBufferImageCopy* pRegions)
7395{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007396 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007397 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007398 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7399 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7400 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007401 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007402 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007403 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007404 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007405 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007406
7407 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007408}
7409
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007410bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007411 VkCmdBuffer cmdBuffer,
7412 VkBuffer srcBuffer,
7413 VkImage destImage,
7414 VkImageLayout destImageLayout,
7415 uint32_t regionCount)
7416{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007417
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007418
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007419
7420 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7421 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7422 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007423 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007424 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007425 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007426 }
7427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007428
7429 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007430}
7431
7432VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
7433 VkCmdBuffer cmdBuffer,
7434 VkBuffer srcBuffer,
7435 VkImage destImage,
7436 VkImageLayout destImageLayout,
7437 uint32_t regionCount,
7438 const VkBufferImageCopy* pRegions)
7439{
7440 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007441
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007442 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
7443
7444 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
7445}
7446
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007447bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007448 VkCmdBuffer cmdBuffer,
7449 const VkBufferImageCopy* pRegions)
7450{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007451 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007452 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007453 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7454 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7455 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007456 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007457 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007458 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007459 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007460 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007461
7462 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007463}
7464
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007465bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007466 VkCmdBuffer cmdBuffer,
7467 VkImage srcImage,
7468 VkImageLayout srcImageLayout,
7469 VkBuffer destBuffer,
7470 uint32_t regionCount)
7471{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007473
7474 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7475 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7476 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007477 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007478 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007479 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007480 }
7481
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007482
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007483
7484 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007485}
7486
7487VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
7488 VkCmdBuffer cmdBuffer,
7489 VkImage srcImage,
7490 VkImageLayout srcImageLayout,
7491 VkBuffer destBuffer,
7492 uint32_t regionCount,
7493 const VkBufferImageCopy* pRegions)
7494{
7495 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007496
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007497 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
7498
7499 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
7500}
7501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007502bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007503 VkCmdBuffer cmdBuffer,
7504 const uint32_t* pData)
7505{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007506 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007507 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007508 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007509
7510 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007511}
7512
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007513bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007514 VkCmdBuffer cmdBuffer,
7515 VkBuffer destBuffer,
7516 VkDeviceSize destOffset,
7517 VkDeviceSize dataSize)
7518{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007519
7520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007521
7522
7523 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007524}
7525
7526VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
7527 VkCmdBuffer cmdBuffer,
7528 VkBuffer destBuffer,
7529 VkDeviceSize destOffset,
7530 VkDeviceSize dataSize,
7531 const uint32_t* pData)
7532{
7533 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007534
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007535 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
7536
7537 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
7538}
7539
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007540bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007541 VkCmdBuffer cmdBuffer,
7542 VkBuffer destBuffer,
7543 VkDeviceSize destOffset,
7544 VkDeviceSize fillSize,
7545 uint32_t data)
7546{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007547
7548
7549
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007550
7551
7552 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007553}
7554
7555VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
7556 VkCmdBuffer cmdBuffer,
7557 VkBuffer destBuffer,
7558 VkDeviceSize destOffset,
7559 VkDeviceSize fillSize,
7560 uint32_t data)
7561{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007562 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7563
7564 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
7565}
7566
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007567bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007568 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12007569 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007570 const VkImageSubresourceRange* pRanges)
7571{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007572 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007573 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007574 }
7575
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007576 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007577 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007578 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7579 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7580 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007581 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007582 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007583 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007584 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007585 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007586
7587 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007588}
7589
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007590bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007591 VkCmdBuffer cmdBuffer,
7592 VkImage image,
7593 VkImageLayout imageLayout,
7594 uint32_t rangeCount)
7595{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007596
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007597
7598 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7599 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7600 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007601 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007602 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007603 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007604 }
7605
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007606
7607 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007608}
7609
7610VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
7611 VkCmdBuffer cmdBuffer,
7612 VkImage image,
7613 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12007614 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007615 uint32_t rangeCount,
7616 const VkImageSubresourceRange* pRanges)
7617{
7618 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007619
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007620 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
7621
7622 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
7623}
7624
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007625bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007626 VkCmdBuffer cmdBuffer,
7627 const VkImageSubresourceRange* pRanges)
7628{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007629 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007630 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007631 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7632 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
7633 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007634 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007635 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007636 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007637 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007638 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007639
7640 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007641}
7642
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007643bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007644 VkCmdBuffer cmdBuffer,
7645 VkImage image,
7646 VkImageLayout imageLayout,
7647 float depth,
7648 uint32_t stencil,
7649 uint32_t rangeCount)
7650{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007651
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007652
7653 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7654 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7655 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007656 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007657 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007659 }
7660
7661
7662
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007663
7664 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007665}
7666
Chris Forbes2951d7d2015-06-22 17:21:59 +12007667VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007668 VkCmdBuffer cmdBuffer,
7669 VkImage image,
7670 VkImageLayout imageLayout,
7671 float depth,
7672 uint32_t stencil,
7673 uint32_t rangeCount,
7674 const VkImageSubresourceRange* pRanges)
7675{
Chris Forbes2951d7d2015-06-22 17:21:59 +12007676 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007677
Chris Forbes2951d7d2015-06-22 17:21:59 +12007678 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007679
Chris Forbes2951d7d2015-06-22 17:21:59 +12007680 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007681}
7682
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007683bool PreCmdClearColorAttachment(
7684 VkCmdBuffer cmdBuffer,
7685 const VkClearColorValue* pColor,
7686 const VkRect3D* pRects)
7687{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007688 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007689 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007690 }
7691
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007692 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007693 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007694 }
7695
7696 return true;
7697}
7698
7699bool PostCmdClearColorAttachment(
7700 VkCmdBuffer cmdBuffer,
7701 uint32_t colorAttachment,
7702 VkImageLayout imageLayout,
7703 uint32_t rectCount)
7704{
7705
7706
7707 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7708 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7709 {
7710 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007711 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007712 return false;
7713 }
7714
7715
7716 return true;
7717}
7718
7719VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
7720 VkCmdBuffer cmdBuffer,
7721 uint32_t colorAttachment,
7722 VkImageLayout imageLayout,
7723 const VkClearColorValue* pColor,
7724 uint32_t rectCount,
7725 const VkRect3D* pRects)
7726{
7727 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
7728
7729 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
7730
7731 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
7732}
7733
7734bool PreCmdClearDepthStencilAttachment(
7735 VkCmdBuffer cmdBuffer,
7736 const VkRect3D* pRects)
7737{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007738 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007739 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007740 }
7741
7742 return true;
7743}
7744
7745bool PostCmdClearDepthStencilAttachment(
7746 VkCmdBuffer cmdBuffer,
7747 VkImageAspectFlags imageAspectMask,
7748 VkImageLayout imageLayout,
7749 float depth,
7750 uint32_t stencil,
7751 uint32_t rectCount)
7752{
7753
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007754
7755 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7756 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7757 {
7758 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007759 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007760 return false;
7761 }
7762
7763
7764
7765
7766 return true;
7767}
7768
7769VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
7770 VkCmdBuffer cmdBuffer,
7771 VkImageAspectFlags imageAspectMask,
7772 VkImageLayout imageLayout,
7773 float depth,
7774 uint32_t stencil,
7775 uint32_t rectCount,
7776 const VkRect3D* pRects)
7777{
7778 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
7779
7780 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
7781
7782 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
7783}
7784
7785bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007786 VkCmdBuffer cmdBuffer,
7787 const VkImageResolve* pRegions)
7788{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007789 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007790 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007791 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7792 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7793 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007794 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007795 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007796 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007797 }
7798 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
7799 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
7800 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007801 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007802 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007803 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007804 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007805 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007806
7807 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007808}
7809
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007810bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007811 VkCmdBuffer cmdBuffer,
7812 VkImage srcImage,
7813 VkImageLayout srcImageLayout,
7814 VkImage destImage,
7815 VkImageLayout destImageLayout,
7816 uint32_t regionCount)
7817{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007818
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007819
7820 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7821 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7822 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007823 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007824 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007825 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007826 }
7827
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007828
7829 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
7830 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
7831 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007832 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007833 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007834 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007835 }
7836
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007837
7838 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007839}
7840
7841VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
7842 VkCmdBuffer cmdBuffer,
7843 VkImage srcImage,
7844 VkImageLayout srcImageLayout,
7845 VkImage destImage,
7846 VkImageLayout destImageLayout,
7847 uint32_t regionCount,
7848 const VkImageResolve* pRegions)
7849{
7850 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007851
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007852 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
7853
7854 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
7855}
7856
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007857bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007858 VkCmdBuffer cmdBuffer,
7859 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007860 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007861{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007862
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007863
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007864
7865 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007866}
7867
7868VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
7869 VkCmdBuffer cmdBuffer,
7870 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007871 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007872{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007873 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007874
Tony Barbourc2e987e2015-06-29 16:20:35 -06007875 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007876}
7877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007878bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007879 VkCmdBuffer cmdBuffer,
7880 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007881 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007882{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007883
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007884
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007885
7886 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007887}
7888
7889VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
7890 VkCmdBuffer cmdBuffer,
7891 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007892 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007893{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007894 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007895
Tony Barbourc2e987e2015-06-29 16:20:35 -06007896 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007897}
7898
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007899bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007900 VkCmdBuffer cmdBuffer,
7901 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007902 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007903{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007904 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007905 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007906 }
7907
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007908 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007909 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007910 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007911
7912 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007913}
7914
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007915bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007916 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007917 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007918 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007919 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007920 uint32_t memBarrierCount)
7921{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007922
Tony Barbourc2e987e2015-06-29 16:20:35 -06007923
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007924
7925
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007926
7927 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007928}
7929
7930VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
7931 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007932 uint32_t eventCount,
7933 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007934 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007935 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007936 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007937 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007938{
7939 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007941 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007942
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007943 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007944}
7945
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007946bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007947 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007948 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007949{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007950 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007951 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007952 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007953
7954 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007955}
7956
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007957bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007958 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007959 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007960 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007961 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007962 uint32_t memBarrierCount)
7963{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007964
Tony Barbourc2e987e2015-06-29 16:20:35 -06007965
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007966
7967
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007968
7969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007970}
7971
7972VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7973 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007974 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007975 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007976 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007977 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007978 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007979{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007980 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007981
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007982 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007983
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007984 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007985}
7986
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007987bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007988 VkCmdBuffer cmdBuffer,
7989 VkQueryPool queryPool,
7990 uint32_t slot,
7991 VkQueryControlFlags flags)
7992{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007993
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007994
7995
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007996
7997 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007998}
7999
8000VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
8001 VkCmdBuffer cmdBuffer,
8002 VkQueryPool queryPool,
8003 uint32_t slot,
8004 VkQueryControlFlags flags)
8005{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008006 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8007
8008 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
8009}
8010
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008011bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008012 VkCmdBuffer cmdBuffer,
8013 VkQueryPool queryPool,
8014 uint32_t slot)
8015{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008016
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008017
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008018
8019 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008020}
8021
8022VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
8023 VkCmdBuffer cmdBuffer,
8024 VkQueryPool queryPool,
8025 uint32_t slot)
8026{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008027 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
8028
8029 PostCmdEndQuery(cmdBuffer, queryPool, slot);
8030}
8031
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008032bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008033 VkCmdBuffer cmdBuffer,
8034 VkQueryPool queryPool,
8035 uint32_t startQuery,
8036 uint32_t queryCount)
8037{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008039
8040
8041
8042 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008043}
8044
8045VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
8046 VkCmdBuffer cmdBuffer,
8047 VkQueryPool queryPool,
8048 uint32_t startQuery,
8049 uint32_t queryCount)
8050{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008051 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8052
8053 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
8054}
8055
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008056bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008057 VkCmdBuffer cmdBuffer,
8058 VkTimestampType timestampType,
8059 VkBuffer destBuffer,
8060 VkDeviceSize destOffset)
8061{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008062
8063 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
8064 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
8065 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008066 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008067 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008068 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008069 }
8070
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008071
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008072
8073 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008074}
8075
8076VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
8077 VkCmdBuffer cmdBuffer,
8078 VkTimestampType timestampType,
8079 VkBuffer destBuffer,
8080 VkDeviceSize destOffset)
8081{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008082 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8083
8084 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
8085}
8086
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008087bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008088 VkCmdBuffer cmdBuffer,
8089 VkQueryPool queryPool,
8090 uint32_t startQuery,
8091 uint32_t queryCount,
8092 VkBuffer destBuffer,
8093 VkDeviceSize destOffset,
8094 VkDeviceSize destStride,
8095 VkQueryResultFlags flags)
8096{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008097
8098
8099
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008100
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008101
8102
8103
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008104
8105 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008106}
8107
Jeremy Hayescf469132015-04-17 10:36:53 -06008108VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008109 VkCmdBuffer cmdBuffer,
8110 VkQueryPool queryPool,
8111 uint32_t startQuery,
8112 uint32_t queryCount,
8113 VkBuffer destBuffer,
8114 VkDeviceSize destOffset,
8115 VkDeviceSize destStride,
8116 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06008117{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008118 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
8119
8120 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06008121}
8122
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008123bool PreCmdPushConstants(
8124 VkCmdBuffer cmdBuffer,
8125 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008126{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008127 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008128 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008129 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008130
8131 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008132}
8133
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008134bool PostCmdPushConstants(
8135 VkCmdBuffer cmdBuffer,
8136 VkPipelineLayout layout,
8137 VkShaderStageFlags stageFlags,
8138 uint32_t start,
8139 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008140{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008141
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008142
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008143
8144
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008145
8146 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008147}
8148
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008149VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
8150 VkCmdBuffer cmdBuffer,
8151 VkPipelineLayout layout,
8152 VkShaderStageFlags stageFlags,
8153 uint32_t start,
8154 uint32_t length,
8155 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008156{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008157 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008158
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008159 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008160
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008161 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008162}
8163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008164bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008165 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008166 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008167{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008168 if(pRenderPassBegin != nullptr)
8169 {
8170 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008171 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008172 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008173 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008174 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06008175 }
Cody Northropc332eef2015-08-04 11:51:03 -06008176 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008177 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008178 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06008179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008180
8181 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008182}
8183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008184bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008185 VkCmdBuffer cmdBuffer,
8186 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008187{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008188
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008189 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
8190 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
8191 {
8192 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
8193 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8194 return false;
8195 }
8196
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008197 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008198}
8199
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008200VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
8201 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08008202 const VkRenderPassBeginInfo* pRenderPassBegin,
8203 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008204{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008205 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
8206
Chia-I Wuc278df82015-07-07 11:50:03 +08008207 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008208
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008209 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008210}
8211
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008212bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08008213 VkCmdBuffer cmdBuffer,
8214 VkRenderPassContents contents)
8215{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008216
8217 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008218 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08008219 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008220 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008221 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
8222 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08008223 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008224
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008225 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08008226}
8227
8228VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
8229 VkCmdBuffer cmdBuffer,
8230 VkRenderPassContents contents)
8231{
Chia-I Wuc278df82015-07-07 11:50:03 +08008232 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
8233
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008234 PostCmdNextSubpass(cmdBuffer, contents);
8235}
8236
8237bool PostCmdEndRenderPass(
8238 VkCmdBuffer cmdBuffer)
8239{
8240
8241 return true;
8242}
8243
8244VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
8245 VkCmdBuffer cmdBuffer)
8246{
8247 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
8248
8249 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08008250}
8251
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008252bool PreCmdExecuteCommands(
8253 VkCmdBuffer cmdBuffer,
8254 const VkCmdBuffer* pCmdBuffers)
8255{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06008256 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008257 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008258 }
8259
8260 return true;
8261}
8262
8263bool PostCmdExecuteCommands(
8264 VkCmdBuffer cmdBuffer,
8265 uint32_t cmdBuffersCount)
8266{
8267
8268
8269 return true;
8270}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008271
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008272VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008273 VkCmdBuffer cmdBuffer,
8274 uint32_t cmdBuffersCount,
8275 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008276{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008277 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
8278
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08008279 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
8280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06008281 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008282}
8283
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008284VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008285{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008286 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008287 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008288 }
8289
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008290 /* loader uses this to force layer initialization; device object is wrapped */
8291 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008292 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008293 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008294 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008295
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06008296 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008297 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008298 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008299 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008300 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008301 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008302 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008303 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008304 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008305 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008306 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008307 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008308 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008309 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008310 if (!strcmp(funcName, "vkFreeMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008311 return (PFN_vkVoidFunction) vkFreeMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008312 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008313 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008314 if (!strcmp(funcName, "vkUnmapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008315 return (PFN_vkVoidFunction) vkUnmapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008316 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008317 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008318 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008319 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008320 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008321 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008322 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008323 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008324 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008325 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008326 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008327 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008328 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008329 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008330 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008331 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008332 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008333 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008334 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008335 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008336 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008337 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008338 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008339 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008340 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008341 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008342 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008343 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008344 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008345 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008346 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008347 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008348 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008349 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008350 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008351 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008352 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008353 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008354 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008355 return (PFN_vkVoidFunction) vkCreateImageView;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06008356 if (!strcmp(funcName, "vkDestroyImageView"))
8357 return (PFN_vkVoidFunction) vkDestroyImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008358 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008359 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008360 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008361 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06008362 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008363 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008364 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008365 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008366 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008367 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008368 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008369 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008370 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008371 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008372 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008373 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008374 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008375 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008376 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008377 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06008378 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
8379 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
8380 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
8381 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
8382 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
8383 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
8384 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
8385 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06008386 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
8387 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008388 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008389 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008390 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008391 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008392 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008393 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008394 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008395 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008396 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008397 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008398 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008399 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008400 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008401 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008402 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008403 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008404 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008405 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008406 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008407 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008408 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008409 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008410 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008411 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008412 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008413 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008414 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008415 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008416 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008417 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008418 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008419 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008420 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008421 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008422 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008423 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008424 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008425 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008426 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008427 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008428 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008429 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008430 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008431 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008432 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008433 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008434 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008435 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008436 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008437 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008438 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008439 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008440 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008441 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008442 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008443 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008444 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008445 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008446 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008447 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008448 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008449 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008450 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008451 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008452 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008453 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008454 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008455 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008456 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008457 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08008458 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008459 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008460
Jon Ashburn6f8cd632015-06-01 09:37:38 -06008461 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008462 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008463 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008464 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06008465 }
8466}
8467
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008468VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008469{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008470 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008471 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05008472 }
8473
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008474 /* loader uses this to force layer initialization; instance object is wrapped */
8475 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008476 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008477 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06008478 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008479
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008480 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008481 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008482 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008483 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008484 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008485 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008486 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008487 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008488 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008489 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06008490 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008491 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008492 if (!strcmp(funcName, "vkGetPhysicalDeviceLimits"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008493 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLimits;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008494 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008495 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008496 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008497 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008498 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008499 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06008500 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008501 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008502
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008503 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06008504 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008505 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06008506 return fptr;
8507
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06008508 {
8509 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
8510 return NULL;
8511 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
8512 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06008513}