blob: 308f983592ae7c00bd2b91b8b559b0b57a9d330d [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_INCOMPATIBLE_DRIVER:
203 {
204 return "VK_ERROR_INCOMPATIBLE_DRIVER";
205 break;
206 }
207 case VK_ERROR_MEMORY_UNMAP_FAILED:
208 {
209 return "VK_ERROR_MEMORY_UNMAP_FAILED";
210 break;
211 }
212 case VK_ERROR_MEMORY_MAP_FAILED:
213 {
214 return "VK_ERROR_MEMORY_MAP_FAILED";
215 break;
216 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600217 case VK_INCOMPLETE:
218 {
219 return "VK_INCOMPLETE";
220 break;
221 }
222 case VK_ERROR_OUT_OF_HOST_MEMORY:
223 {
224 return "VK_ERROR_OUT_OF_HOST_MEMORY";
225 break;
226 }
227 case VK_ERROR_UNKNOWN:
228 {
229 return "VK_ERROR_UNKNOWN";
230 break;
231 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600232 case VK_ERROR_INITIALIZATION_FAILED:
233 {
234 return "VK_ERROR_INITIALIZATION_FAILED";
235 break;
236 }
237 case VK_NOT_READY:
238 {
239 return "VK_NOT_READY";
240 break;
241 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600242 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
243 {
244 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
245 break;
246 }
247 case VK_EVENT_SET:
248 {
249 return "VK_EVENT_SET";
250 break;
251 }
252 case VK_TIMEOUT:
253 {
254 return "VK_TIMEOUT";
255 break;
256 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600257 case VK_EVENT_RESET:
258 {
259 return "VK_EVENT_RESET";
260 break;
261 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600262 case VK_UNSUPPORTED:
263 {
264 return "VK_UNSUPPORTED";
265 break;
266 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600267 case VK_ERROR_INCOMPATIBLE_DEVICE:
268 {
269 return "VK_ERROR_INCOMPATIBLE_DEVICE";
270 break;
271 }
272 case VK_SUCCESS:
273 {
274 return "VK_SUCCESS";
275 break;
276 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600277 case VK_ERROR_INVALID_EXTENSION:
278 {
279 return "VK_ERROR_INVALID_EXTENSION";
280 break;
281 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600282 case VK_ERROR_DEVICE_LOST:
283 {
284 return "VK_ERROR_DEVICE_LOST";
285 break;
286 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600287 default:
288 {
289 return "unrecognized enumerator";
290 break;
291 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600292 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600293}
294
295static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600296bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
297{
298 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(VK_FORMAT_FEATURE_CONVERSION_BIT |
299 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
300 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
301 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
302 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
303 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
304 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
305 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
306 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
307 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600308 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
309 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
310 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600311 if(enumerator & (~allFlags))
312 {
313 return false;
314 }
315
316 return true;
317}
318
319static
320std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
321{
322 if(!ValidateEnumerator(enumerator))
323 {
324 return "unrecognized enumerator";
325 }
326
327 std::vector<std::string> strings;
328 if(enumerator & VK_FORMAT_FEATURE_CONVERSION_BIT)
329 {
330 strings.push_back("VK_FORMAT_FEATURE_CONVERSION_BIT");
331 }
332 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
333 {
334 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
335 }
336 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
337 {
338 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
339 }
340 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
341 {
342 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
343 }
344 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
345 {
346 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
347 }
348 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
349 {
350 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
351 }
352 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
353 {
354 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
355 }
356 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
357 {
358 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
359 }
360 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
361 {
362 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
363 }
364 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
365 {
366 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
367 }
368 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
369 {
370 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
371 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600372 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
373 {
374 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
375 }
376 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
377 {
378 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
379 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600380
381 std::string enumeratorString;
382 for(auto const& string : strings)
383 {
384 enumeratorString += string;
385
386 if(string != strings.back())
387 {
388 enumeratorString += '|';
389 }
390 }
391
392 return enumeratorString;
393}
394
395static
396bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
397{
398 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
399 VK_IMAGE_USAGE_DEPTH_STENCIL_BIT |
400 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
401 VK_IMAGE_USAGE_STORAGE_BIT |
402 VK_IMAGE_USAGE_SAMPLED_BIT |
403 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
404 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600405 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600406 if(enumerator & (~allFlags))
407 {
408 return false;
409 }
410
411 return true;
412}
413
414static
415std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
416{
417 if(!ValidateEnumerator(enumerator))
418 {
419 return "unrecognized enumerator";
420 }
421
422 std::vector<std::string> strings;
423 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
424 {
425 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
426 }
427 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_BIT)
428 {
429 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_BIT");
430 }
431 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
432 {
433 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
434 }
435 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
436 {
437 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
438 }
439 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
440 {
441 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
442 }
443 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
444 {
445 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
446 }
447 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
448 {
449 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
450 }
451 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
452 {
453 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
454 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600455
456 std::string enumeratorString;
457 for(auto const& string : strings)
458 {
459 enumeratorString += string;
460
461 if(string != strings.back())
462 {
463 enumeratorString += '|';
464 }
465 }
466
467 return enumeratorString;
468}
469
470static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600471bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
472{
473 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
474 VK_QUEUE_DMA_BIT |
475 VK_QUEUE_COMPUTE_BIT |
476 VK_QUEUE_SPARSE_MEMMGR_BIT |
477 VK_QUEUE_GRAPHICS_BIT);
478 if(enumerator & (~allFlags))
479 {
480 return false;
481 }
482
483 return true;
484}
485
486static
487std::string EnumeratorString(VkQueueFlagBits const& enumerator)
488{
489 if(!ValidateEnumerator(enumerator))
490 {
491 return "unrecognized enumerator";
492 }
493
494 std::vector<std::string> strings;
495 if(enumerator & VK_QUEUE_EXTENDED_BIT)
496 {
497 strings.push_back("VK_QUEUE_EXTENDED_BIT");
498 }
499 if(enumerator & VK_QUEUE_DMA_BIT)
500 {
501 strings.push_back("VK_QUEUE_DMA_BIT");
502 }
503 if(enumerator & VK_QUEUE_COMPUTE_BIT)
504 {
505 strings.push_back("VK_QUEUE_COMPUTE_BIT");
506 }
507 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
508 {
509 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
510 }
511 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
512 {
513 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
514 }
515
516 std::string enumeratorString;
517 for(auto const& string : strings)
518 {
519 enumeratorString += string;
520
521 if(string != strings.back())
522 {
523 enumeratorString += '|';
524 }
525 }
526
527 return enumeratorString;
528}
529
530static
531bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
532{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600533 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
534 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600535 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
536 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
537 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
538 VK_MEMORY_PROPERTY_DEVICE_ONLY);
539 if(enumerator & (~allFlags))
540 {
541 return false;
542 }
543
544 return true;
545}
546
547static
548std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
549{
550 if(!ValidateEnumerator(enumerator))
551 {
552 return "unrecognized enumerator";
553 }
554
555 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600556 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
557 {
558 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
559 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600560 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
561 {
562 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
563 }
564 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
565 {
566 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
567 }
568 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
569 {
570 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
571 }
572 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
573 {
574 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
575 }
576 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
577 {
578 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
579 }
580
581 std::string enumeratorString;
582 for(auto const& string : strings)
583 {
584 enumeratorString += string;
585
586 if(string != strings.back())
587 {
588 enumeratorString += '|';
589 }
590 }
591
592 return enumeratorString;
593}
594
595static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600596bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600597{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600598 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600599 if(enumerator & (~allFlags))
600 {
601 return false;
602 }
603
604 return true;
605}
606
607static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600608std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600609{
610 if(!ValidateEnumerator(enumerator))
611 {
612 return "unrecognized enumerator";
613 }
614
615 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600616 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600617 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600618 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600619 }
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
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600636bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
637{
638 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
639 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
640 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
641 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600642 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600645
646 return true;
647}
648
649static
650std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
651{
652 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600653 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600654 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600655 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600656
657 std::vector<std::string> strings;
658 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600659 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600660 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600661 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600662 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600663 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600664 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600665 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600666 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600667 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600668 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600669 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600670
671 std::string enumeratorString;
672 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600673 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600674 enumeratorString += string;
675
676 if(string != strings.back())
677 {
678 enumeratorString += '|';
679 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600680 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600681
682 return enumeratorString;
683}
684
685static
686bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
687{
688 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
689 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600690 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600691 return false;
692 }
693
694 return true;
695}
696
697static
698std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
699{
700 if(!ValidateEnumerator(enumerator))
701 {
702 return "unrecognized enumerator";
703 }
704
705 std::vector<std::string> strings;
706 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
707 {
708 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
709 }
710
711 std::string enumeratorString;
712 for(auto const& string : strings)
713 {
714 enumeratorString += string;
715
716 if(string != strings.back())
717 {
718 enumeratorString += '|';
719 }
720 }
721
722 return enumeratorString;
723}
724
725static
726bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
727{
728 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
729 if(enumerator & (~allFlags))
730 {
731 return false;
732 }
733
734 return true;
735}
736
737static
738std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
739{
740 if(!ValidateEnumerator(enumerator))
741 {
742 return "unrecognized enumerator";
743 }
744
745 std::vector<std::string> strings;
746 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
747 {
748 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
749 }
750
751 std::string enumeratorString;
752 for(auto const& string : strings)
753 {
754 enumeratorString += string;
755
756 if(string != strings.back())
757 {
758 enumeratorString += '|';
759 }
760 }
761
762 return enumeratorString;
763}
764
765static
766bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
767{
768 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
769 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
770 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
771 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
772 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
773 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
774 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
775 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
776 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
777 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
778 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
779 if(enumerator & (~allFlags))
780 {
781 return false;
782 }
783
784 return true;
785}
786
787static
788std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
789{
790 if(!ValidateEnumerator(enumerator))
791 {
792 return "unrecognized enumerator";
793 }
794
795 std::vector<std::string> strings;
796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
797 {
798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
799 }
800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
801 {
802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
803 }
804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
805 {
806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
807 }
808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
809 {
810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
811 }
812 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
813 {
814 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
815 }
816 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
817 {
818 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
819 }
820 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
821 {
822 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
823 }
824 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
825 {
826 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
827 }
828 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
829 {
830 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
831 }
832 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
833 {
834 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
835 }
836 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
837 {
838 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
839 }
840
841 std::string enumeratorString;
842 for(auto const& string : strings)
843 {
844 enumeratorString += string;
845
846 if(string != strings.back())
847 {
848 enumeratorString += '|';
849 }
850 }
851
852 return enumeratorString;
853}
854
855static
856bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
857{
858 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
859 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
860 VK_QUERY_RESULT_WAIT_BIT |
861 VK_QUERY_RESULT_64_BIT |
862 VK_QUERY_RESULT_DEFAULT);
863 if(enumerator & (~allFlags))
864 {
865 return false;
866 }
867
868 return true;
869}
870
871static
872std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
873{
874 if(!ValidateEnumerator(enumerator))
875 {
876 return "unrecognized enumerator";
877 }
878
879 std::vector<std::string> strings;
880 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
881 {
882 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
883 }
884 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
885 {
886 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
887 }
888 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
889 {
890 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
891 }
892 if(enumerator & VK_QUERY_RESULT_64_BIT)
893 {
894 strings.push_back("VK_QUERY_RESULT_64_BIT");
895 }
896 if(enumerator & VK_QUERY_RESULT_DEFAULT)
897 {
898 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600899 }
900
901 std::string enumeratorString;
902 for(auto const& string : strings)
903 {
904 enumeratorString += string;
905
906 if(string != strings.back())
907 {
908 enumeratorString += '|';
909 }
910 }
911
912 return enumeratorString;
913}
914
915static
916bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
917{
918 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
919 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
920 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
921 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
922 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
923 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
924 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
925 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600926 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600927 if(enumerator & (~allFlags))
928 {
929 return false;
930 }
931
932 return true;
933}
934
935static
936std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
937{
938 if(!ValidateEnumerator(enumerator))
939 {
940 return "unrecognized enumerator";
941 }
942
943 std::vector<std::string> strings;
944 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
951 }
952 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
953 {
954 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
955 }
956 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
957 {
958 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
959 }
960 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
961 {
962 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
963 }
964 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
965 {
966 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
967 }
968 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
969 {
970 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
971 }
972 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
973 {
974 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
975 }
976 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
977 {
978 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
979 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600980
981 std::string enumeratorString;
982 for(auto const& string : strings)
983 {
984 enumeratorString += string;
985
986 if(string != strings.back())
987 {
988 enumeratorString += '|';
989 }
990 }
991
992 return enumeratorString;
993}
994
995static
996bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
997{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600998 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
999 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
1000 VK_BUFFER_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001001 if(enumerator & (~allFlags))
1002 {
1003 return false;
1004 }
1005
1006 return true;
1007}
1008
1009static
1010std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1011{
1012 if(!ValidateEnumerator(enumerator))
1013 {
1014 return "unrecognized enumerator";
1015 }
1016
1017 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001018 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1019 {
1020 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1021 }
1022 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1023 {
1024 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1025 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001026 if(enumerator & VK_BUFFER_CREATE_SPARSE_BIT)
1027 {
1028 strings.push_back("VK_BUFFER_CREATE_SPARSE_BIT");
1029 }
1030
1031 std::string enumeratorString;
1032 for(auto const& string : strings)
1033 {
1034 enumeratorString += string;
1035
1036 if(string != strings.back())
1037 {
1038 enumeratorString += '|';
1039 }
1040 }
1041
1042 return enumeratorString;
1043}
1044
1045static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001046bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1047{
1048 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001049 VK_IMAGE_CREATE_INVARIANT_DATA_BIT |
1050 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1051 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001052 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001053 VK_IMAGE_CREATE_SPARSE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001054 if(enumerator & (~allFlags))
1055 {
1056 return false;
1057 }
1058
1059 return true;
1060}
1061
1062static
1063std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1064{
1065 if(!ValidateEnumerator(enumerator))
1066 {
1067 return "unrecognized enumerator";
1068 }
1069
1070 std::vector<std::string> strings;
1071 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1072 {
1073 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1074 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001075 if(enumerator & VK_IMAGE_CREATE_INVARIANT_DATA_BIT)
1076 {
1077 strings.push_back("VK_IMAGE_CREATE_INVARIANT_DATA_BIT");
1078 }
1079 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1080 {
1081 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1082 }
1083 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1084 {
1085 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1086 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001087 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1088 {
1089 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1090 }
1091 if(enumerator & VK_IMAGE_CREATE_SPARSE_BIT)
1092 {
1093 strings.push_back("VK_IMAGE_CREATE_SPARSE_BIT");
1094 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001095
1096 std::string enumeratorString;
1097 for(auto const& string : strings)
1098 {
1099 enumeratorString += string;
1100
1101 if(string != strings.back())
1102 {
1103 enumeratorString += '|';
1104 }
1105 }
1106
1107 return enumeratorString;
1108}
1109
1110static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001111bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001112{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001113 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1114 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001115 if(enumerator & (~allFlags))
1116 {
1117 return false;
1118 }
1119
1120 return true;
1121}
1122
1123static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001124std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001125{
1126 if(!ValidateEnumerator(enumerator))
1127 {
1128 return "unrecognized enumerator";
1129 }
1130
1131 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001132 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001133 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001134 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001135 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001136 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001137 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001138 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001139 }
1140
1141 std::string enumeratorString;
1142 for(auto const& string : strings)
1143 {
1144 enumeratorString += string;
1145
1146 if(string != strings.back())
1147 {
1148 enumeratorString += '|';
1149 }
1150 }
1151
1152 return enumeratorString;
1153}
1154
1155static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001156bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1157{
1158 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1159 VK_CHANNEL_B_BIT |
1160 VK_CHANNEL_G_BIT |
1161 VK_CHANNEL_R_BIT);
1162 if(enumerator & (~allFlags))
1163 {
1164 return false;
1165 }
1166
1167 return true;
1168}
1169
1170static
1171std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1172{
1173 if(!ValidateEnumerator(enumerator))
1174 {
1175 return "unrecognized enumerator";
1176 }
1177
1178 std::vector<std::string> strings;
1179 if(enumerator & VK_CHANNEL_A_BIT)
1180 {
1181 strings.push_back("VK_CHANNEL_A_BIT");
1182 }
1183 if(enumerator & VK_CHANNEL_B_BIT)
1184 {
1185 strings.push_back("VK_CHANNEL_B_BIT");
1186 }
1187 if(enumerator & VK_CHANNEL_G_BIT)
1188 {
1189 strings.push_back("VK_CHANNEL_G_BIT");
1190 }
1191 if(enumerator & VK_CHANNEL_R_BIT)
1192 {
1193 strings.push_back("VK_CHANNEL_R_BIT");
1194 }
1195
1196 std::string enumeratorString;
1197 for(auto const& string : strings)
1198 {
1199 enumeratorString += string;
1200
1201 if(string != strings.back())
1202 {
1203 enumeratorString += '|';
1204 }
1205 }
1206
1207 return enumeratorString;
1208}
1209
1210static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001211bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001212{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001213 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1214 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1215 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216 if(enumerator & (~allFlags))
1217 {
1218 return false;
1219 }
1220
1221 return true;
1222}
1223
1224static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001225std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001226{
1227 if(!ValidateEnumerator(enumerator))
1228 {
1229 return "unrecognized enumerator";
1230 }
1231
1232 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001233 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001234 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1236 }
1237 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1238 {
1239 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1240 }
1241 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1242 {
1243 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_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 Hayese841fdc2015-07-29 11:23:46 -06001261bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001262{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001263 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1264 VK_SHADER_STAGE_FRAGMENT_BIT |
1265 VK_SHADER_STAGE_GEOMETRY_BIT |
1266 VK_SHADER_STAGE_COMPUTE_BIT |
1267 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1268 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1269 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001270 if(enumerator & (~allFlags))
1271 {
1272 return false;
1273 }
1274
1275 return true;
1276}
1277
1278static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001279std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001280{
1281 if(!ValidateEnumerator(enumerator))
1282 {
1283 return "unrecognized enumerator";
1284 }
1285
1286 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001287 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001288 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001289 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001290 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001291 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001292 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001293 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001294 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001295 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001296 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001297 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1298 }
1299 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1300 {
1301 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1302 }
1303 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1304 {
1305 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1306 }
1307 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1308 {
1309 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1310 }
1311 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1312 {
1313 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001314 }
1315
1316 std::string enumeratorString;
1317 for(auto const& string : strings)
1318 {
1319 enumeratorString += string;
1320
1321 if(string != strings.back())
1322 {
1323 enumeratorString += '|';
1324 }
1325 }
1326
1327 return enumeratorString;
1328}
1329
1330static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001331bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001332{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001333 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001334 if(enumerator & (~allFlags))
1335 {
1336 return false;
1337 }
1338
1339 return true;
1340}
1341
1342static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001343std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001344{
1345 if(!ValidateEnumerator(enumerator))
1346 {
1347 return "unrecognized enumerator";
1348 }
1349
1350 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001351 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001352 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001353 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001354 }
1355
1356 std::string enumeratorString;
1357 for(auto const& string : strings)
1358 {
1359 enumeratorString += string;
1360
1361 if(string != strings.back())
1362 {
1363 enumeratorString += '|';
1364 }
1365 }
1366
1367 return enumeratorString;
1368}
1369
1370static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001371bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001372{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001373 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1374 VK_PIPELINE_STAGE_HOST_BIT |
1375 VK_PIPELINE_STAGE_TRANSFER_BIT |
1376 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1377 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1378 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1379 VK_PIPELINE_STAGE_TRANSITION_BIT |
1380 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1381 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1382 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1383 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1384 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1385 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1386 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1387 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1388 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1389 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001390 if(enumerator & (~allFlags))
1391 {
1392 return false;
1393 }
1394
1395 return true;
1396}
1397
1398static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001399std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001400{
1401 if(!ValidateEnumerator(enumerator))
1402 {
1403 return "unrecognized enumerator";
1404 }
1405
1406 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001407 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001408 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001409 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001410 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001411 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001412 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001414 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001416 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001417 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001418 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001419 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001420 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001421 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001422 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001424 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001426 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001427 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001428 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001430 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001432 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001434 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001436 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001438 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001440 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001442 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001444 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001445 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001446 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001447 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001448 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001449 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1450 }
1451 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1452 {
1453 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1454 }
1455 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1456 {
1457 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1458 }
1459 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1460 {
1461 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1462 }
1463 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1464 {
1465 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1466 }
1467 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1468 {
1469 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1470 }
1471 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1472 {
1473 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001474 }
1475
1476 std::string enumeratorString;
1477 for(auto const& string : strings)
1478 {
1479 enumeratorString += string;
1480
1481 if(string != strings.back())
1482 {
1483 enumeratorString += '|';
1484 }
1485 }
1486
1487 return enumeratorString;
1488}
1489
1490static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001491bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001493 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1494 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1495 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1496 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1497 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001498 if(enumerator & (~allFlags))
1499 {
1500 return false;
1501 }
1502
1503 return true;
1504}
1505
1506static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001508{
1509 if(!ValidateEnumerator(enumerator))
1510 {
1511 return "unrecognized enumerator";
1512 }
1513
1514 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001515 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001516 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001517 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001518 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001519 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001520 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001521 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001522 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001524 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001525 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001534 }
1535
1536 std::string enumeratorString;
1537 for(auto const& string : strings)
1538 {
1539 enumeratorString += string;
1540
1541 if(string != strings.back())
1542 {
1543 enumeratorString += '|';
1544 }
1545 }
1546
1547 return enumeratorString;
1548}
1549
1550static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001551bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001553 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1554 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1555 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1556 VK_MEMORY_INPUT_SHADER_READ_BIT |
1557 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1558 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1559 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1560 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1561 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1562 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001563 if(enumerator & (~allFlags))
1564 {
1565 return false;
1566 }
1567
1568 return true;
1569}
1570
1571static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001572std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001573{
1574 if(!ValidateEnumerator(enumerator))
1575 {
1576 return "unrecognized enumerator";
1577 }
1578
1579 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001580 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001581 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001582 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1583 }
1584 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1585 {
1586 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1587 }
1588 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1589 {
1590 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1591 }
1592 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1593 {
1594 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1595 }
1596 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1597 {
1598 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1599 }
1600 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1601 {
1602 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1603 }
1604 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1605 {
1606 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1607 }
1608 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1609 {
1610 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1611 }
1612 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1613 {
1614 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1615 }
1616 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1617 {
1618 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001619 }
1620
1621 std::string enumeratorString;
1622 for(auto const& string : strings)
1623 {
1624 enumeratorString += string;
1625
1626 if(string != strings.back())
1627 {
1628 enumeratorString += '|';
1629 }
1630 }
1631
1632 return enumeratorString;
1633}
1634
1635static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001636bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001637{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001638 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1639 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001640 if(enumerator & (~allFlags))
1641 {
1642 return false;
1643 }
1644
1645 return true;
1646}
1647
1648static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001649std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001650{
1651 if(!ValidateEnumerator(enumerator))
1652 {
1653 return "unrecognized enumerator";
1654 }
1655
1656 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001657 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001658 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001659 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001660 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001661 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001662 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001663 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001664 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001665
1666 std::string enumeratorString;
1667 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001668 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001669 enumeratorString += string;
1670
1671 if(string != strings.back())
1672 {
1673 enumeratorString += '|';
1674 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001675 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001676
1677 return enumeratorString;
1678}
1679
1680static
1681bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1682{
1683 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1684 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001685 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001686 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001687 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001688
1689 return true;
1690}
1691
1692static
1693std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1694{
1695 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001696 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001697 return "unrecognized enumerator";
1698 }
1699
1700 std::vector<std::string> strings;
1701 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1702 {
1703 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001704 }
1705
1706 std::string enumeratorString;
1707 for(auto const& string : strings)
1708 {
1709 enumeratorString += string;
1710
1711 if(string != strings.back())
1712 {
1713 enumeratorString += '|';
1714 }
1715 }
1716
1717 return enumeratorString;
1718}
1719
1720static
1721bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1722{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001723 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1724 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001725 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1726 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1727 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1728 if(enumerator & (~allFlags))
1729 {
1730 return false;
1731 }
1732
1733 return true;
1734}
1735
1736static
1737std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1738{
1739 if(!ValidateEnumerator(enumerator))
1740 {
1741 return "unrecognized enumerator";
1742 }
1743
1744 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001745 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1746 {
1747 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1748 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001749 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1750 {
1751 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1752 }
1753 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1754 {
1755 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1756 }
1757 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1758 {
1759 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1760 }
1761 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1762 {
1763 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1764 }
1765
1766 std::string enumeratorString;
1767 for(auto const& string : strings)
1768 {
1769 enumeratorString += string;
1770
1771 if(string != strings.back())
1772 {
1773 enumeratorString += '|';
1774 }
1775 }
1776
1777 return enumeratorString;
1778}
1779
1780static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001781bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001782{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001783 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001784 if(enumerator & (~allFlags))
1785 {
1786 return false;
1787 }
1788
1789 return true;
1790}
1791
1792static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001793std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794{
1795 if(!ValidateEnumerator(enumerator))
1796 {
1797 return "unrecognized enumerator";
1798 }
1799
1800 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001801 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001802 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001803 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001804 }
1805
1806 std::string enumeratorString;
1807 for(auto const& string : strings)
1808 {
1809 enumeratorString += string;
1810
1811 if(string != strings.back())
1812 {
1813 enumeratorString += '|';
1814 }
1815 }
1816
1817 return enumeratorString;
1818}
1819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001820static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001821bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001822{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001823 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1824 VK_IMAGE_ASPECT_STENCIL_BIT |
1825 VK_IMAGE_ASPECT_DEPTH_BIT |
1826 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001827 if(enumerator & (~allFlags))
1828 {
1829 return false;
1830 }
1831
1832 return true;
1833}
1834
1835static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001836std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001837{
1838 if(!ValidateEnumerator(enumerator))
1839 {
1840 return "unrecognized enumerator";
1841 }
1842
1843 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001844 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001845 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001846 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1847 }
1848 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1849 {
1850 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1851 }
1852 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1853 {
1854 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1855 }
1856 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1857 {
1858 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1859 }
1860
1861 std::string enumeratorString;
1862 for(auto const& string : strings)
1863 {
1864 enumeratorString += string;
1865
1866 if(string != strings.back())
1867 {
1868 enumeratorString += '|';
1869 }
1870 }
1871
1872 return enumeratorString;
1873}
1874
1875static
1876bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1877{
1878 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1879 if(enumerator & (~allFlags))
1880 {
1881 return false;
1882 }
1883
1884 return true;
1885}
1886
1887static
1888std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1889{
1890 if(!ValidateEnumerator(enumerator))
1891 {
1892 return "unrecognized enumerator";
1893 }
1894
1895 std::vector<std::string> strings;
1896 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1897 {
1898 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001899 }
1900
1901 std::string enumeratorString;
1902 for(auto const& string : strings)
1903 {
1904 enumeratorString += string;
1905
1906 if(string != strings.back())
1907 {
1908 enumeratorString += '|';
1909 }
1910 }
1911
1912 return enumeratorString;
1913}
1914
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001915VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1916 const VkInstanceCreateInfo* pCreateInfo,
1917 VkInstance* pInstance)
1918{
1919 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1920 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1921
1922 if (result == VK_SUCCESS) {
1923 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1924 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001925 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001926
1927 InitParamChecker(data);
1928 }
1929
1930 return result;
1931}
1932
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001933VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001934 VkInstance instance)
1935{
1936 // Grab the key before the instance is destroyed.
1937 dispatch_key key = get_dispatch_key(instance);
1938 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001939 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001940
1941 // Clean up logging callback, if any
1942 layer_data *data = get_my_data_ptr(key, layer_data_map);
1943 if(data->logging_callback)
1944 {
1945 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1946 }
1947
1948 layer_debug_report_destroy_instance(mid(instance));
1949 layer_data_map.erase(pTable);
1950
1951 pc_instance_table_map.erase(key);
1952 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001953}
1954
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001955bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001956 VkInstance instance,
1957 uint32_t* pPhysicalDeviceCount,
1958 VkPhysicalDevice* pPhysicalDevices,
1959 VkResult result)
1960{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001961
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001962 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001963 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001964 }
1965
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001966 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001967 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001968 }
1969
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001970 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001971 {
1972 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001973 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1974 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001975 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001976
1977 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001978}
1979
1980VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1981 VkInstance instance,
1982 uint32_t* pPhysicalDeviceCount,
1983 VkPhysicalDevice* pPhysicalDevices)
1984{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001985 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1986
1987 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1988
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001989 return result;
1990}
1991
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001992bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001993 VkPhysicalDevice physicalDevice,
1994 VkPhysicalDeviceFeatures* pFeatures,
1995 VkResult result)
1996{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001997
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001998 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001999 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002000 }
2001
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002002 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002003 {
2004 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002005 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2006 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002007 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002008
2009 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002010}
2011
2012VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2013 VkPhysicalDevice physicalDevice,
2014 VkPhysicalDeviceFeatures* pFeatures)
2015{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002016 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2017
2018 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2019
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002020 return result;
2021}
2022
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002023bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002024 VkPhysicalDevice physicalDevice,
2025 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002026 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002027 VkResult result)
2028{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002029
2030 if(format < VK_FORMAT_BEGIN_RANGE ||
2031 format > VK_FORMAT_END_RANGE)
2032 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002033 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002034 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002035 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002036 }
2037
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002038 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002039 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002040 }
2041
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002042 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002043 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002044 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002045 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2046 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002047 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002048
2049 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002050}
2051
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06002052VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002053 VkPhysicalDevice physicalDevice,
2054 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002055 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002056{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002057 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002058
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002059 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2060
2061 return result;
2062}
2063
2064bool PostGetPhysicalDeviceImageFormatProperties(
2065 VkPhysicalDevice physicalDevice,
2066 VkFormat format,
2067 VkImageType type,
2068 VkImageTiling tiling,
2069 VkImageUsageFlags usage,
2070 VkImageFormatProperties* pImageFormatProperties,
2071 VkResult result)
2072{
2073
2074 if(format < VK_FORMAT_BEGIN_RANGE ||
2075 format > VK_FORMAT_END_RANGE)
2076 {
2077 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2078 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2079 return false;
2080 }
2081
2082 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2083 type > VK_IMAGE_TYPE_END_RANGE)
2084 {
2085 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2086 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2087 return false;
2088 }
2089
2090 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2091 tiling > VK_IMAGE_TILING_END_RANGE)
2092 {
2093 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2094 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2095 return false;
2096 }
2097
2098
2099 if(pImageFormatProperties != nullptr)
2100 {
2101 }
2102
2103 if(result < VK_SUCCESS)
2104 {
2105 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2106 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2107 return false;
2108 }
2109
2110 return true;
2111}
2112
2113VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2114 VkPhysicalDevice physicalDevice,
2115 VkFormat format,
2116 VkImageType type,
2117 VkImageTiling tiling,
2118 VkImageUsageFlags usage,
2119 VkImageFormatProperties* pImageFormatProperties)
2120{
2121 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties);
2122
2123 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002124
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002125 return result;
2126}
2127
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002128bool PostGetPhysicalDeviceProperties(
2129 VkPhysicalDevice physicalDevice,
2130 VkPhysicalDeviceProperties* pProperties,
2131 VkResult result)
2132{
2133
2134 if(pProperties != nullptr)
2135 {
2136 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2137 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2138 {
2139 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2140 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2141 return false;
2142 }
2143 }
2144
2145 if(result < VK_SUCCESS)
2146 {
2147 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2148 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2149 return false;
2150 }
2151
2152 return true;
2153}
2154
2155VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2156 VkPhysicalDevice physicalDevice,
2157 VkPhysicalDeviceProperties* pProperties)
2158{
2159 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2160
2161 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2162
2163 return result;
2164}
2165
Cody Northropef72e2a2015-08-03 17:04:53 -06002166bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002167 VkPhysicalDevice physicalDevice,
2168 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002169 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002170 VkResult result)
2171{
2172
Cody Northropef72e2a2015-08-03 17:04:53 -06002173 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002174 {
2175 }
2176
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002177 if(pQueueProperties != nullptr)
2178 {
2179 }
2180
2181 if(result < VK_SUCCESS)
2182 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002183 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002184 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2185 return false;
2186 }
2187
2188 return true;
2189}
2190
2191VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2192 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002193 uint32_t* pCount,
2194 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002195{
Cody Northropef72e2a2015-08-03 17:04:53 -06002196 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002197
Cody Northropef72e2a2015-08-03 17:04:53 -06002198 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002199
2200 return result;
2201}
2202
2203bool PostGetPhysicalDeviceMemoryProperties(
2204 VkPhysicalDevice physicalDevice,
2205 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2206 VkResult result)
2207{
2208
2209 if(pMemoryProperties != nullptr)
2210 {
2211 }
2212
2213 if(result < VK_SUCCESS)
2214 {
2215 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2216 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2217 return false;
2218 }
2219
2220 return true;
2221}
2222
2223VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2224 VkPhysicalDevice physicalDevice,
2225 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2226{
2227 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2228
2229 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2230
2231 return result;
2232}
2233
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002234VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2235 VkPhysicalDevice physicalDevice,
2236 const VkDeviceCreateInfo* pCreateInfo,
2237 VkDevice* pDevice)
2238{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002239 /*
2240 * NOTE: The loader fills in the ICD's device object in *pDevice.
2241 * Use that object to get the dispatch table.
2242 *
2243 * NOTE: We do not validate physicalDevice or any dispatchable
2244 * object as the first parameter. We couldn't get here if it was wrong!
2245 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002246 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002247 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2248 if(result == VK_SUCCESS)
2249 {
2250 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2251 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2252 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2253 }
2254
2255 return result;
2256}
2257
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002258VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259 VkDevice device)
2260{
2261 layer_debug_report_destroy_device(device);
2262
2263 dispatch_key key = get_dispatch_key(device);
2264#if DISPATCH_MAP_DEBUG
2265 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2266#endif
2267
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002268 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002269 pc_device_table_map.erase(key);
2270 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002271}
2272
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002273bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002274 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002275 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002276 uint32_t queueIndex,
2277 VkQueue* pQueue,
2278 VkResult result)
2279{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002280
2281
2282
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002283 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002284 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002285 }
2286
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002287 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002288 {
2289 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002290 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002292 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002293
2294 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002295}
2296
2297VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2298 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002299 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002300 uint32_t queueIndex,
2301 VkQueue* pQueue)
2302{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002303 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002304
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002305 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002306
2307 return result;
2308}
2309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002310bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002311 VkQueue queue,
2312 const VkCmdBuffer* pCmdBuffers)
2313{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002314 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002316 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002317
2318 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002319}
2320
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002321bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002322 VkQueue queue,
2323 uint32_t cmdBufferCount,
2324 VkFence fence,
2325 VkResult result)
2326{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002327
2328
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002329
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002330 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002331 {
2332 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002333 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2334 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002335 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002336
2337 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002338}
2339
2340VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2341 VkQueue queue,
2342 uint32_t cmdBufferCount,
2343 const VkCmdBuffer* pCmdBuffers,
2344 VkFence fence)
2345{
2346 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002347
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002348 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2349
2350 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2351
2352 return result;
2353}
2354
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002355bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002356 VkQueue queue,
2357 VkResult result)
2358{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002359
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002360 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002361 {
2362 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002363 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2364 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002365 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002366
2367 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002368}
2369
2370VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2371 VkQueue queue)
2372{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002373 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2374
2375 PostQueueWaitIdle(queue, result);
2376
2377 return result;
2378}
2379
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002380bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002381 VkDevice device,
2382 VkResult result)
2383{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002384
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002385 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002386 {
2387 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2389 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002390 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002391
2392 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002393}
2394
2395VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2396 VkDevice device)
2397{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002398 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2399
2400 PostDeviceWaitIdle(device, result);
2401
2402 return result;
2403}
2404
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002405bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002406 VkDevice device,
2407 const VkMemoryAllocInfo* pAllocInfo)
2408{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002409 if(pAllocInfo != nullptr)
2410 {
2411 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002413 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002414 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002415 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002416 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002418
2419 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002420}
2421
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002422bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002423 VkDevice device,
2424 VkDeviceMemory* pMem,
2425 VkResult result)
2426{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002428 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002429 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 }
2431
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002432 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002433 {
2434 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002435 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2436 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002438
2439 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002440}
2441
2442VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2443 VkDevice device,
2444 const VkMemoryAllocInfo* pAllocInfo,
2445 VkDeviceMemory* pMem)
2446{
2447 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002448
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002449 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2450
2451 PostAllocMemory(device, pMem, result);
2452
2453 return result;
2454}
2455
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002456bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002457 VkDevice device,
2458 VkDeviceMemory mem,
2459 VkDeviceSize offset,
2460 VkDeviceSize size,
2461 VkMemoryMapFlags flags,
2462 void** ppData,
2463 VkResult result)
2464{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002465
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002466
2467
2468
2469
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002470 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002471 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472 }
2473
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002474 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002475 {
2476 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002477 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2478 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002479 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002480
2481 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002482}
2483
2484VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2485 VkDevice device,
2486 VkDeviceMemory mem,
2487 VkDeviceSize offset,
2488 VkDeviceSize size,
2489 VkMemoryMapFlags flags,
2490 void** ppData)
2491{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2493
2494 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2495
2496 return result;
2497}
2498
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002499bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002500 VkDevice device,
2501 const VkMappedMemoryRange* pMemRanges)
2502{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002503 if(pMemRanges != nullptr)
2504 {
2505 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002508 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002509 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002510 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002511 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512
2513 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002514}
2515
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002516bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002517 VkDevice device,
2518 uint32_t memRangeCount,
2519 VkResult result)
2520{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002521
2522
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002523 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002524 {
2525 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002526 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2527 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002528 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002529
2530 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002531}
2532
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002533VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002534 VkDevice device,
2535 uint32_t memRangeCount,
2536 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002537{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002538 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002539
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002540 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002541
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002542 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2543
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002544 return result;
2545}
2546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002547bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002548 VkDevice device,
2549 const VkMappedMemoryRange* pMemRanges)
2550{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002551 if(pMemRanges != nullptr)
2552 {
2553 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002554 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002556 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002557 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002558 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002559 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002560
2561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562}
2563
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002564bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002565 VkDevice device,
2566 uint32_t memRangeCount,
2567 VkResult result)
2568{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002569
2570
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002571 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002572 {
2573 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2575 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002576 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002577
2578 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002579}
2580
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002581VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002582 VkDevice device,
2583 uint32_t memRangeCount,
2584 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002585{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002586 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002587
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002588 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002589
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002590 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2591
Tony Barbour859ceab2015-04-16 19:23:13 -06002592 return result;
2593}
2594
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002595bool PostGetDeviceMemoryCommitment(
2596 VkDevice device,
2597 VkDeviceMemory memory,
2598 VkDeviceSize* pCommittedMemoryInBytes,
2599 VkResult result)
2600{
2601
2602
2603 if(pCommittedMemoryInBytes != nullptr)
2604 {
2605 }
2606
2607 if(result < VK_SUCCESS)
2608 {
2609 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2611 return false;
2612 }
2613
2614 return true;
2615}
2616
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002617VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002618 VkDevice device,
2619 VkDeviceMemory memory,
2620 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002621{
2622 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2623
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002624 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2625
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002626 return result;
2627}
2628
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002629bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002630 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002631 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002632 VkDeviceMemory mem,
2633 VkDeviceSize memOffset,
2634 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002635{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002637
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002638
2639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002640 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002641 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002642 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2644 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002645 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002646
2647 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002648}
2649
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002650VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002651 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002652 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002653 VkDeviceMemory mem,
2654 VkDeviceSize memOffset)
2655{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002656 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002657
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002658 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002659
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002660 return result;
2661}
2662
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002663bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002664 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002665 VkImage image,
2666 VkDeviceMemory mem,
2667 VkDeviceSize memOffset,
2668 VkResult result)
2669{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002670
2671
2672
2673
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002674 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002675 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002676 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2678 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002679 }
2680
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002681 return true;
2682}
2683
2684VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2685 VkDevice device,
2686 VkImage image,
2687 VkDeviceMemory mem,
2688 VkDeviceSize memOffset)
2689{
2690 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2691
2692 PostBindImageMemory(device, image, mem, memOffset, result);
2693
2694 return result;
2695}
2696
2697bool PostGetBufferMemoryRequirements(
2698 VkDevice device,
2699 VkBuffer buffer,
2700 VkMemoryRequirements* pMemoryRequirements,
2701 VkResult result)
2702{
2703
2704
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002705 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002706 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002707 }
2708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002709 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002710 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002711 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2713 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002714 }
2715
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002716 return true;
2717}
2718
2719VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2720 VkDevice device,
2721 VkBuffer buffer,
2722 VkMemoryRequirements* pMemoryRequirements)
2723{
2724 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2725
2726 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2727
2728 return result;
2729}
2730
2731bool PostGetImageMemoryRequirements(
2732 VkDevice device,
2733 VkImage image,
2734 VkMemoryRequirements* pMemoryRequirements,
2735 VkResult result)
2736{
2737
2738
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002739 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002740 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002741 }
2742
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002743 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002744 {
2745 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2746 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2747 return false;
2748 }
2749
2750 return true;
2751}
2752
2753VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2754 VkDevice device,
2755 VkImage image,
2756 VkMemoryRequirements* pMemoryRequirements)
2757{
2758 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2759
2760 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2761
2762 return result;
2763}
2764
2765bool PostGetImageSparseMemoryRequirements(
2766 VkDevice device,
2767 VkImage image,
2768 uint32_t* pNumRequirements,
2769 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2770 VkResult result)
2771{
2772
2773
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002774 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002775 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002776 }
2777
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002778 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002779 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002780 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2781 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2782 {
2783 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002784 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785 return false;
2786 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002787 }
2788
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002789 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002790 {
2791 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2792 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2793 return false;
2794 }
2795
2796 return true;
2797}
2798
2799VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2800 VkDevice device,
2801 VkImage image,
2802 uint32_t* pNumRequirements,
2803 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2804{
2805 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2806
2807 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2808
2809 return result;
2810}
2811
2812bool PostGetPhysicalDeviceSparseImageFormatProperties(
2813 VkPhysicalDevice physicalDevice,
2814 VkFormat format,
2815 VkImageType type,
2816 uint32_t samples,
2817 VkImageUsageFlags usage,
2818 VkImageTiling tiling,
2819 uint32_t* pNumProperties,
2820 VkSparseImageFormatProperties* pProperties,
2821 VkResult result)
2822{
2823
2824 if(format < VK_FORMAT_BEGIN_RANGE ||
2825 format > VK_FORMAT_END_RANGE)
2826 {
2827 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002828 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002829 return false;
2830 }
2831
2832 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2833 type > VK_IMAGE_TYPE_END_RANGE)
2834 {
2835 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002836 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002837 return false;
2838 }
2839
2840
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841
2842 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2843 tiling > VK_IMAGE_TILING_END_RANGE)
2844 {
2845 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002846 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002847 return false;
2848 }
2849
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002850 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002851 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002852 }
2853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002854 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002855 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002856 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2857 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2858 {
2859 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002860 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002861 return false;
2862 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002863 }
2864
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002865 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002866 {
2867 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2868 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2869 return false;
2870 }
2871
2872 return true;
2873}
2874
2875VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2876 VkPhysicalDevice physicalDevice,
2877 VkFormat format,
2878 VkImageType type,
2879 uint32_t samples,
2880 VkImageUsageFlags usage,
2881 VkImageTiling tiling,
2882 uint32_t* pNumProperties,
2883 VkSparseImageFormatProperties* pProperties)
2884{
2885 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2886
2887 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2888
2889 return result;
2890}
2891
2892bool PreQueueBindSparseBufferMemory(
2893 VkQueue queue,
2894 const VkSparseMemoryBindInfo* pBindInfo)
2895{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002896 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002897 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002898 }
2899
2900 return true;
2901}
2902
2903bool PostQueueBindSparseBufferMemory(
2904 VkQueue queue,
2905 VkBuffer buffer,
2906 uint32_t numBindings,
2907 VkResult result)
2908{
2909
2910
2911
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002912 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002913 {
2914 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2915 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2916 return false;
2917 }
2918
2919 return true;
2920}
2921
2922VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2923 VkQueue queue,
2924 VkBuffer buffer,
2925 uint32_t numBindings,
2926 const VkSparseMemoryBindInfo* pBindInfo)
2927{
2928 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2929
2930 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2931
2932 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2933
2934 return result;
2935}
2936
2937bool PreQueueBindSparseImageOpaqueMemory(
2938 VkQueue queue,
2939 const VkSparseMemoryBindInfo* pBindInfo)
2940{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002941 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002942 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002943 }
2944
2945 return true;
2946}
2947
2948bool PostQueueBindSparseImageOpaqueMemory(
2949 VkQueue queue,
2950 VkImage image,
2951 uint32_t numBindings,
2952 VkResult result)
2953{
2954
2955
2956
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002957 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002958 {
2959 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2960 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2961 return false;
2962 }
2963
2964 return true;
2965}
2966
2967VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2968 VkQueue queue,
2969 VkImage image,
2970 uint32_t numBindings,
2971 const VkSparseMemoryBindInfo* pBindInfo)
2972{
2973 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2974
2975 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2976
2977 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2978
2979 return result;
2980}
2981
2982bool PreQueueBindSparseImageMemory(
2983 VkQueue queue,
2984 const VkSparseImageMemoryBindInfo* pBindInfo)
2985{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002986 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002987 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002988 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2989 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2990 {
2991 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002992 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002993 return false;
2994 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002995 }
2996
2997 return true;
2998}
2999
3000bool PostQueueBindSparseImageMemory(
3001 VkQueue queue,
3002 VkImage image,
3003 uint32_t numBindings,
3004 VkResult result)
3005{
3006
3007
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003008
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003009 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003010 {
3011 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003012 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3013 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003014 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003015
3016 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003017}
3018
3019VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003020 VkQueue queue,
3021 VkImage image,
3022 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003023 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024{
3025 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003026
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06003027 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003028
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003029 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003030
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003031 return result;
3032}
3033
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003034bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003035 VkDevice device,
3036 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003037{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003038 if(pCreateInfo != nullptr)
3039 {
3040 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003041 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003043 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003044 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003045 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003046 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003047
3048 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003049}
3050
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003051bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003052 VkDevice device,
3053 VkFence* pFence,
3054 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003055{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003056
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003057 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003058 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003059 }
3060
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003061 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003062 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3065 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003066 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003067
3068 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003069}
3070
3071VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3072 VkDevice device,
3073 const VkFenceCreateInfo* pCreateInfo,
3074 VkFence* pFence)
3075{
3076 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003077
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003078 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3079
3080 PostCreateFence(device, pFence, result);
3081
3082 return result;
3083}
3084
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003086 VkDevice device,
3087 const VkFence* pFences)
3088{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003089 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003090 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003092
3093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094}
3095
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003096bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003097 VkDevice device,
3098 uint32_t fenceCount,
3099 VkResult result)
3100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003101
3102
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003103 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003104 {
3105 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003106 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3107 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003109
3110 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003111}
3112
3113VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3114 VkDevice device,
3115 uint32_t fenceCount,
3116 const VkFence* pFences)
3117{
3118 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003119
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003120 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3121
3122 PostResetFences(device, fenceCount, result);
3123
3124 return result;
3125}
3126
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003127bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003128 VkDevice device,
3129 VkFence fence,
3130 VkResult result)
3131{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003133
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003134 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003135 {
3136 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3138 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003140
3141 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003142}
3143
3144VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3145 VkDevice device,
3146 VkFence fence)
3147{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003148 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3149
3150 PostGetFenceStatus(device, fence, result);
3151
3152 return result;
3153}
3154
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003155bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003156 VkDevice device,
3157 const VkFence* pFences)
3158{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003159 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003160 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003161 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003162
3163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003164}
3165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003166bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003167 VkDevice device,
3168 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003169 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003170 uint64_t timeout,
3171 VkResult result)
3172{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003173
3174
3175
3176
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003177 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003178 {
3179 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3181 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003182 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003183
3184 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185}
3186
3187VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3188 VkDevice device,
3189 uint32_t fenceCount,
3190 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003191 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192 uint64_t timeout)
3193{
3194 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003195
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3197
3198 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3199
3200 return result;
3201}
3202
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003203bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003204 VkDevice device,
3205 const VkSemaphoreCreateInfo* pCreateInfo)
3206{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003207 if(pCreateInfo != nullptr)
3208 {
3209 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003210 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003211 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003212 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003213 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003214 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003215 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003216
3217 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218}
3219
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003220bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003221 VkDevice device,
3222 VkSemaphore* pSemaphore,
3223 VkResult result)
3224{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003225
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003226 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003227 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003228 }
3229
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003230 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003231 {
3232 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3234 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003235 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003236
3237 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003238}
3239
3240VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3241 VkDevice device,
3242 const VkSemaphoreCreateInfo* pCreateInfo,
3243 VkSemaphore* pSemaphore)
3244{
3245 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003246
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3248
3249 PostCreateSemaphore(device, pSemaphore, result);
3250
3251 return result;
3252}
3253
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003254bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003255 VkQueue queue,
3256 VkSemaphore semaphore,
3257 VkResult result)
3258{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003259
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003260
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003261 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003262 {
3263 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003264 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3265 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003266 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003267
3268 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003269}
3270
3271VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3272 VkQueue queue,
3273 VkSemaphore semaphore)
3274{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003275 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3276
3277 PostQueueSignalSemaphore(queue, semaphore, result);
3278
3279 return result;
3280}
3281
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003282bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003283 VkQueue queue,
3284 VkSemaphore semaphore,
3285 VkResult result)
3286{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003287
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003288
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003289 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003290 {
3291 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003292 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3293 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003294 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003295
3296 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003297}
3298
3299VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3300 VkQueue queue,
3301 VkSemaphore semaphore)
3302{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3304
3305 PostQueueWaitSemaphore(queue, semaphore, result);
3306
3307 return result;
3308}
3309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003310bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003311 VkDevice device,
3312 const VkEventCreateInfo* pCreateInfo)
3313{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003314 if(pCreateInfo != nullptr)
3315 {
3316 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003317 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003319 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003320 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003321 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003322 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003323
3324 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325}
3326
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003327bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003328 VkDevice device,
3329 VkEvent* pEvent,
3330 VkResult result)
3331{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003332
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003333 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003335 }
3336
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003337 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003338 {
3339 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003340 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3341 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003342 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003343
3344 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003345}
3346
3347VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3348 VkDevice device,
3349 const VkEventCreateInfo* pCreateInfo,
3350 VkEvent* pEvent)
3351{
3352 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003353
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003354 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3355
3356 PostCreateEvent(device, pEvent, result);
3357
3358 return result;
3359}
3360
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003361bool PostGetEventStatus(
3362 VkDevice device,
3363 VkEvent event,
3364 VkResult result)
3365{
3366
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003367
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003368 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003369 {
3370 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3372 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003373 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003374
3375 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376}
3377
3378VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3379 VkDevice device,
3380 VkEvent event)
3381{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3383
3384 PostGetEventStatus(device, event, result);
3385
3386 return result;
3387}
3388
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003389bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003390 VkDevice device,
3391 VkEvent event,
3392 VkResult result)
3393{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003395
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003396 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397 {
3398 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003401 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003402
3403 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404}
3405
3406VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3407 VkDevice device,
3408 VkEvent event)
3409{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003410 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3411
3412 PostSetEvent(device, event, result);
3413
3414 return result;
3415}
3416
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003417bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003418 VkDevice device,
3419 VkEvent event,
3420 VkResult result)
3421{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003422
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003424 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003425 {
3426 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3428 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003429 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003430
3431 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003432}
3433
3434VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3435 VkDevice device,
3436 VkEvent event)
3437{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3439
3440 PostResetEvent(device, event, result);
3441
3442 return result;
3443}
3444
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003445bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003446 VkDevice device,
3447 const VkQueryPoolCreateInfo* pCreateInfo)
3448{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003449 if(pCreateInfo != nullptr)
3450 {
3451 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003454 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003455 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003456 }
3457 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3458 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3459 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003461 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003463 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003464 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003465
3466 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003467}
3468
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003469bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003470 VkDevice device,
3471 VkQueryPool* pQueryPool,
3472 VkResult result)
3473{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003474
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003475 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003476 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003477 }
3478
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003479 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003480 {
3481 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003482 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3483 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003484 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003485
3486 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003487}
3488
3489VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3490 VkDevice device,
3491 const VkQueryPoolCreateInfo* pCreateInfo,
3492 VkQueryPool* pQueryPool)
3493{
3494 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003495
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003496 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3497
3498 PostCreateQueryPool(device, pQueryPool, result);
3499
3500 return result;
3501}
3502
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003503bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504 VkDevice device,
3505 VkQueryPool queryPool,
3506 uint32_t startQuery,
3507 uint32_t queryCount,
3508 size_t* pDataSize,
3509 void* pData,
3510 VkQueryResultFlags flags,
3511 VkResult result)
3512{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003513
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514
3515
3516
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003517 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003518 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 }
3520
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003521 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003522 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003523 }
3524
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003525
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003526 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527 {
3528 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003529 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3530 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003532
3533 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003534}
3535
3536VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3537 VkDevice device,
3538 VkQueryPool queryPool,
3539 uint32_t startQuery,
3540 uint32_t queryCount,
3541 size_t* pDataSize,
3542 void* pData,
3543 VkQueryResultFlags flags)
3544{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003545 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3546
3547 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3548
3549 return result;
3550}
3551
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003552bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003553 VkDevice device,
3554 const VkBufferCreateInfo* pCreateInfo)
3555{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003556 if(pCreateInfo != nullptr)
3557 {
3558 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003559 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003561 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003562 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003563 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003564 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3565 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003566 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003568 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003569 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003570 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003571 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003573 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003575
3576 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003577}
3578
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003579bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003580 VkDevice device,
3581 VkBuffer* pBuffer,
3582 VkResult result)
3583{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003585 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003586 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003587 }
3588
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003589 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003590 {
3591 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003592 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3593 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003594 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003595
3596 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003597}
3598
3599VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3600 VkDevice device,
3601 const VkBufferCreateInfo* pCreateInfo,
3602 VkBuffer* pBuffer)
3603{
3604 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003605
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003606 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3607
3608 PostCreateBuffer(device, pBuffer, result);
3609
3610 return result;
3611}
3612
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003613bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003614 VkDevice device,
3615 const VkBufferViewCreateInfo* pCreateInfo)
3616{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003617 if(pCreateInfo != nullptr)
3618 {
3619 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003620 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003621 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003622 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003623 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003624 }
3625 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3626 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3627 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003628 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003629 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003630 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003631 }
3632 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3633 pCreateInfo->format > VK_FORMAT_END_RANGE)
3634 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003635 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003636 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003637 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003638 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003639 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003640
3641 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003642}
3643
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003644bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003645 VkDevice device,
3646 VkBufferView* pView,
3647 VkResult result)
3648{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003649
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003650 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003651 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003652 }
3653
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003654 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003655 {
3656 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003657 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3658 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003659 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003660
3661 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003662}
3663
3664VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3665 VkDevice device,
3666 const VkBufferViewCreateInfo* pCreateInfo,
3667 VkBufferView* pView)
3668{
3669 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003670
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003671 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3672
3673 PostCreateBufferView(device, pView, result);
3674
3675 return result;
3676}
3677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003678bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003679 VkDevice device,
3680 const VkImageCreateInfo* pCreateInfo)
3681{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003682 if(pCreateInfo != nullptr)
3683 {
3684 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003685 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003687 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003688 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003689 }
3690 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3691 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3692 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003693 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003694 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003695 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003696 }
3697 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3698 pCreateInfo->format > VK_FORMAT_END_RANGE)
3699 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003701 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003702 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003703 }
3704 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3705 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3706 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003707 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003708 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003709 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003711 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3712 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003713 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3715 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003716 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003717 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003718 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003719 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003720 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003721 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003722
3723 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003724}
3725
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003726bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003727 VkDevice device,
3728 VkImage* pImage,
3729 VkResult result)
3730{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003731
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003732 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003733 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003734 }
3735
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003736 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003737 {
3738 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3740 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003741 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003742
3743 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003744}
3745
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003746VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3747 VkDevice device,
3748 const VkImageCreateInfo* pCreateInfo,
3749 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003750{
3751 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003752
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003753 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3754
3755 PostCreateImage(device, pImage, result);
3756
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003757 return result;
3758}
3759
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003760bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003761 VkDevice device,
3762 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003763{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003764 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003765 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003766 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3767 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3768 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003770 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003771 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003772 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003773 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003774
3775 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003776}
3777
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003778bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003779 VkDevice device,
3780 VkImage image,
3781 VkSubresourceLayout* pLayout,
3782 VkResult result)
3783{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003785
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003786 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003787 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003788 }
3789
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003790 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003791 {
3792 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3794 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003795 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003796
3797 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003798}
3799
3800VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3801 VkDevice device,
3802 VkImage image,
3803 const VkImageSubresource* pSubresource,
3804 VkSubresourceLayout* pLayout)
3805{
3806 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003807
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003808 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3809
3810 PostGetImageSubresourceLayout(device, image, pLayout, result);
3811
3812 return result;
3813}
3814
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003815bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003816 VkDevice device,
3817 const VkImageViewCreateInfo* pCreateInfo)
3818{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003819 if(pCreateInfo != nullptr)
3820 {
3821 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003822 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003824 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003825 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003826 }
3827 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3828 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3829 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003831 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003832 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003833 }
3834 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3835 pCreateInfo->format > VK_FORMAT_END_RANGE)
3836 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003838 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003839 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003840 }
3841 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3842 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3843 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003845 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003846 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003847 }
3848 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3849 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3850 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003851 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003852 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003853 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003854 }
3855 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3856 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3857 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003859 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003860 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003861 }
3862 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3863 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3864 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003866 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003867 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003868 }
3869 if(pCreateInfo->subresourceRange.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3870 pCreateInfo->subresourceRange.aspect > VK_IMAGE_ASPECT_END_RANGE)
3871 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003872 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003873 "vkCreateImageView parameter, VkImageAspect pCreateInfo->subresourceRange.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003874 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003875 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003876 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003877
3878 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003879}
3880
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003881bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003882 VkDevice device,
3883 VkImageView* pView,
3884 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003885{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003887 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003888 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003889 }
3890
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003891 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003892 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3895 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003896 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003897
3898 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003899}
3900
3901VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3902 VkDevice device,
3903 const VkImageViewCreateInfo* pCreateInfo,
3904 VkImageView* pView)
3905{
3906 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003907
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003908 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3909
3910 PostCreateImageView(device, pView, result);
3911
3912 return result;
3913}
3914
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003915bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003916 VkDevice device,
3917 const VkShaderCreateInfo* pCreateInfo)
3918{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003919 if(pCreateInfo != nullptr)
3920 {
3921 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003922 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003924 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003925 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003926 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003927 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003928 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003929 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003930 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003931
3932 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003933}
3934
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003935bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003936 VkDevice device,
3937 VkShader* pShader,
3938 VkResult result)
3939{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003940
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003941 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003942 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003943 }
3944
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003945 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003946 {
3947 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3949 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003950 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003951
3952 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003953}
3954
3955VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3956 VkDevice device,
3957 const VkShaderCreateInfo* pCreateInfo,
3958 VkShader* pShader)
3959{
3960 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003961
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3963
3964 PostCreateShader(device, pShader, result);
3965
3966 return result;
3967}
3968
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003969bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003970 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003971 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003972{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003973 if(pCreateInfo != nullptr)
3974 {
3975 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003976 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003978 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003979 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003980 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003981 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003982 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003983 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003984 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003985
3986 return true;
3987}
3988
3989bool PostCreatePipelineCache(
3990 VkDevice device,
3991 VkPipelineCache* pPipelineCache,
3992 VkResult result)
3993{
3994
3995 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003996 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003997 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003998
3999 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004000 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004001 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06004002 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4003 return false;
4004 }
4005
4006 return true;
4007}
4008
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004009VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06004010 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004011 const VkPipelineCacheCreateInfo* pCreateInfo,
4012 VkPipelineCache* pPipelineCache)
4013{
4014 PreCreatePipelineCache(device, pCreateInfo);
4015
4016 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4017
4018 PostCreatePipelineCache(device, pPipelineCache, result);
4019
4020 return result;
4021}
4022
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004023bool PostGetPipelineCacheSize(
4024 VkDevice device,
4025 VkPipelineCache pipelineCache)
4026{
4027
4028
4029 return true;
4030}
4031
4032VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4033 VkDevice device,
4034 VkPipelineCache pipelineCache)
4035{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004036 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004037
4038 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004039
4040 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004041}
4042
4043bool PostGetPipelineCacheData(
4044 VkDevice device,
4045 VkPipelineCache pipelineCache,
4046 void* pData,
4047 VkResult result)
4048{
4049
4050
4051 if(pData != nullptr)
4052 {
4053 }
4054
4055 if(result < VK_SUCCESS)
4056 {
4057 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4059 return false;
4060 }
4061
4062 return true;
4063}
4064
4065VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4066 VkDevice device,
4067 VkPipelineCache pipelineCache,
4068 void* pData)
4069{
4070 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4071
4072 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4073
4074 return result;
4075}
4076
4077bool PreMergePipelineCaches(
4078 VkDevice device,
4079 const VkPipelineCache* pSrcCaches)
4080{
4081 if(pSrcCaches != nullptr)
4082 {
4083 }
4084
4085 return true;
4086}
4087
4088bool PostMergePipelineCaches(
4089 VkDevice device,
4090 VkPipelineCache destCache,
4091 uint32_t srcCacheCount,
4092 VkResult result)
4093{
4094
4095
4096
4097 if(result < VK_SUCCESS)
4098 {
4099 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4101 return false;
4102 }
4103
4104 return true;
4105}
4106
4107VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4108 VkDevice device,
4109 VkPipelineCache destCache,
4110 uint32_t srcCacheCount,
4111 const VkPipelineCache* pSrcCaches)
4112{
4113 PreMergePipelineCaches(device, pSrcCaches);
4114
4115 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4116
4117 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4118
4119 return result;
4120}
4121
4122bool PreCreateGraphicsPipelines(
4123 VkDevice device,
4124 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4125{
4126 if(pCreateInfos != nullptr)
4127 {
4128 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4129 {
4130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4131 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4132 return false;
4133 }
4134 if(pCreateInfos->pStages != nullptr)
4135 {
4136 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4137 {
4138 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4139 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4140 return false;
4141 }
4142 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4143 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4144 {
4145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4146 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4147 return false;
4148 }
4149 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4150 {
4151 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4152 {
4153 }
4154 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4155 {
4156 }
4157 }
4158 }
4159 if(pCreateInfos->pVertexInputState != nullptr)
4160 {
4161 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4162 {
4163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4164 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4165 return false;
4166 }
4167 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4168 {
4169 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4170 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4171 {
4172 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4173 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4174 return false;
4175 }
4176 }
4177 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4178 {
4179 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4180 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4181 {
4182 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4183 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4184 return false;
4185 }
4186 }
4187 }
4188 if(pCreateInfos->pInputAssemblyState != nullptr)
4189 {
4190 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4191 {
4192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4193 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4194 return false;
4195 }
4196 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4197 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4198 {
4199 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4200 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4201 return false;
4202 }
4203 }
4204 if(pCreateInfos->pTessellationState != nullptr)
4205 {
4206 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4207 {
4208 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4209 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4210 return false;
4211 }
4212 }
4213 if(pCreateInfos->pViewportState != nullptr)
4214 {
4215 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4216 {
4217 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4218 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4219 return false;
4220 }
4221 }
4222 if(pCreateInfos->pRasterState != nullptr)
4223 {
4224 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4225 {
4226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4227 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4228 return false;
4229 }
4230 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4231 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4232 {
4233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4234 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4235 return false;
4236 }
4237 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4238 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4239 {
4240 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4241 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4242 return false;
4243 }
4244 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4245 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4246 {
4247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4248 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4249 return false;
4250 }
4251 }
4252 if(pCreateInfos->pMultisampleState != nullptr)
4253 {
4254 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4255 {
4256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4257 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4258 return false;
4259 }
4260 }
4261 if(pCreateInfos->pDepthStencilState != nullptr)
4262 {
4263 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4264 {
4265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4266 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4267 return false;
4268 }
4269 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4270 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4271 {
4272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4273 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4274 return false;
4275 }
4276 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4277 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4278 {
4279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4280 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4281 return false;
4282 }
4283 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4284 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4285 {
4286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4287 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4288 return false;
4289 }
4290 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4291 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4292 {
4293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4294 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4295 return false;
4296 }
4297 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4298 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4299 {
4300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4301 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4302 return false;
4303 }
4304 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4305 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4306 {
4307 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4308 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4309 return false;
4310 }
4311 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4312 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4313 {
4314 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4315 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4316 return false;
4317 }
4318 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4319 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4320 {
4321 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4322 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4323 return false;
4324 }
4325 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4326 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4327 {
4328 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4329 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4330 return false;
4331 }
4332 }
4333 if(pCreateInfos->pColorBlendState != nullptr)
4334 {
4335 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4336 {
4337 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4338 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4339 return false;
4340 }
4341 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4342 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4343 {
4344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4345 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4346 return false;
4347 }
4348 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4349 {
4350 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4351 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4352 {
4353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4354 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4355 return false;
4356 }
4357 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4358 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4359 {
4360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4361 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4362 return false;
4363 }
4364 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4365 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4366 {
4367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4368 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4369 return false;
4370 }
4371 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4372 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4373 {
4374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4375 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4376 return false;
4377 }
4378 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4379 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4380 {
4381 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4382 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4383 return false;
4384 }
4385 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4386 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4387 {
4388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4389 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4390 return false;
4391 }
4392 }
4393 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004394 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4395 {
4396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4397 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4398 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004399 }
4400
4401 return true;
4402}
4403
4404bool PostCreateGraphicsPipelines(
4405 VkDevice device,
4406 VkPipelineCache pipelineCache,
4407 uint32_t count,
4408 VkPipeline* pPipelines,
4409 VkResult result)
4410{
4411
4412
4413
4414 if(pPipelines != nullptr)
4415 {
4416 }
4417
4418 if(result < VK_SUCCESS)
4419 {
4420 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4422 return false;
4423 }
4424
4425 return true;
4426}
4427
4428VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4429 VkDevice device,
4430 VkPipelineCache pipelineCache,
4431 uint32_t count,
4432 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4433 VkPipeline* pPipelines)
4434{
4435 PreCreateGraphicsPipelines(device, pCreateInfos);
4436
4437 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4438
4439 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4440
4441 return result;
4442}
4443
4444bool PreCreateComputePipelines(
4445 VkDevice device,
4446 const VkComputePipelineCreateInfo* pCreateInfos)
4447{
4448 if(pCreateInfos != nullptr)
4449 {
4450 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4451 {
4452 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4453 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4454 return false;
4455 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004456 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004457 {
4458 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4459 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4460 return false;
4461 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004462 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4463 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004464 {
4465 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4466 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4467 return false;
4468 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004469 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004470 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004471 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004472 {
4473 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004474 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004475 {
4476 }
4477 }
4478 }
4479
4480 return true;
4481}
4482
4483bool PostCreateComputePipelines(
4484 VkDevice device,
4485 VkPipelineCache pipelineCache,
4486 uint32_t count,
4487 VkPipeline* pPipelines,
4488 VkResult result)
4489{
4490
4491
4492
4493 if(pPipelines != nullptr)
4494 {
4495 }
4496
4497 if(result < VK_SUCCESS)
4498 {
4499 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4501 return false;
4502 }
4503
4504 return true;
4505}
4506
4507VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4508 VkDevice device,
4509 VkPipelineCache pipelineCache,
4510 uint32_t count,
4511 const VkComputePipelineCreateInfo* pCreateInfos,
4512 VkPipeline* pPipelines)
4513{
4514 PreCreateComputePipelines(device, pCreateInfos);
4515
4516 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4517
4518 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4519
4520 return result;
4521}
4522
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004523bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004524 VkDevice device,
4525 const VkPipelineLayoutCreateInfo* pCreateInfo)
4526{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004527 if(pCreateInfo != nullptr)
4528 {
4529 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004532 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4533 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004534 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004535 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004536 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004537 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004538 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004540 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004541 }
4542
4543 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004544}
4545
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004546bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547 VkDevice device,
4548 VkPipelineLayout* pPipelineLayout,
4549 VkResult result)
4550{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004551
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004552 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004553 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004554 }
4555
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004556 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 {
4558 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004561 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004562
4563 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564}
4565
4566VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4567 VkDevice device,
4568 const VkPipelineLayoutCreateInfo* pCreateInfo,
4569 VkPipelineLayout* pPipelineLayout)
4570{
4571 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004572
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004573 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4574
4575 PostCreatePipelineLayout(device, pPipelineLayout, result);
4576
4577 return result;
4578}
4579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004580bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004581 VkDevice device,
4582 const VkSamplerCreateInfo* pCreateInfo)
4583{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004584 if(pCreateInfo != nullptr)
4585 {
4586 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004587 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004589 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004590 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004591 }
4592 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4593 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4594 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004596 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004597 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004598 }
4599 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4600 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4601 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004602 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004603 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004604 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004605 }
4606 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4607 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4608 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004610 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004612 }
4613 if(pCreateInfo->addressU < VK_TEX_ADDRESS_BEGIN_RANGE ||
4614 pCreateInfo->addressU > VK_TEX_ADDRESS_END_RANGE)
4615 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004617 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004618 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004619 }
4620 if(pCreateInfo->addressV < VK_TEX_ADDRESS_BEGIN_RANGE ||
4621 pCreateInfo->addressV > VK_TEX_ADDRESS_END_RANGE)
4622 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004624 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004625 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626 }
4627 if(pCreateInfo->addressW < VK_TEX_ADDRESS_BEGIN_RANGE ||
4628 pCreateInfo->addressW > VK_TEX_ADDRESS_END_RANGE)
4629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004631 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004633 }
4634 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4635 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4636 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004638 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004639 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004640 }
4641 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4642 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4643 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004644 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004645 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004646 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004647 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004648 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004649
4650 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004651}
4652
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004653bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004654 VkDevice device,
4655 VkSampler* pSampler,
4656 VkResult result)
4657{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004658
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004659 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004660 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004661 }
4662
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004663 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004664 {
4665 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4667 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004668 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004669
4670 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004671}
4672
4673VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4674 VkDevice device,
4675 const VkSamplerCreateInfo* pCreateInfo,
4676 VkSampler* pSampler)
4677{
4678 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004679
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004680 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4681
4682 PostCreateSampler(device, pSampler, result);
4683
4684 return result;
4685}
4686
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004687bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004688 VkDevice device,
4689 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4690{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 if(pCreateInfo != nullptr)
4692 {
4693 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004694 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004696 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004699 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004700 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004701 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4702 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4703 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004704 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004705 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004706 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004707 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004708 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004709 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004710 }
4711 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004712 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004713
4714 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004715}
4716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004717bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004718 VkDevice device,
4719 VkDescriptorSetLayout* pSetLayout,
4720 VkResult result)
4721{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004722
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004723 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004724 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004725 }
4726
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004727 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004728 {
4729 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4731 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004732 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004733
4734 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004735}
4736
4737VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4738 VkDevice device,
4739 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4740 VkDescriptorSetLayout* pSetLayout)
4741{
4742 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004743
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004744 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4745
4746 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4747
4748 return result;
4749}
4750
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004751bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004752 VkDevice device,
4753 const VkDescriptorPoolCreateInfo* pCreateInfo)
4754{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004755 if(pCreateInfo != nullptr)
4756 {
4757 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004758 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004759 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004760 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004761 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004762 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004763 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004764 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004765 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4766 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4767 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004769 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004770 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004771 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004772 }
4773 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004774
4775 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004776}
4777
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004778bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004779 VkDevice device,
4780 VkDescriptorPoolUsage poolUsage,
4781 uint32_t maxSets,
4782 VkDescriptorPool* pDescriptorPool,
4783 VkResult result)
4784{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004785
4786 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4787 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4788 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004789 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004790 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004791 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004792 }
4793
4794
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004795 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004796 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004797 }
4798
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004799 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004800 {
4801 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4803 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004805
4806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004807}
4808
4809VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4810 VkDevice device,
4811 VkDescriptorPoolUsage poolUsage,
4812 uint32_t maxSets,
4813 const VkDescriptorPoolCreateInfo* pCreateInfo,
4814 VkDescriptorPool* pDescriptorPool)
4815{
4816 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004817
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004818 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
4819
4820 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
4821
4822 return result;
4823}
4824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004825bool PostResetDescriptorPool(
4826 VkDevice device,
4827 VkDescriptorPool descriptorPool,
4828 VkResult result)
4829{
4830
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004831
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004832 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004833 {
4834 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4836 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004837 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004838
4839 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004840}
4841
4842VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4843 VkDevice device,
4844 VkDescriptorPool descriptorPool)
4845{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004846 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4847
4848 PostResetDescriptorPool(device, descriptorPool, result);
4849
4850 return result;
4851}
4852
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004853bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004854 VkDevice device,
4855 const VkDescriptorSetLayout* pSetLayouts)
4856{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004857 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004858 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004859 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004860
4861 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004862}
4863
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004864bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004865 VkDevice device,
4866 VkDescriptorPool descriptorPool,
4867 VkDescriptorSetUsage setUsage,
4868 uint32_t count,
4869 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004870 VkResult result)
4871{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004872
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004873
4874 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4875 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4876 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004878 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004879 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004880 }
4881
4882
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004883 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004884 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004885 }
4886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004887 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004888 {
4889 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004890 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4891 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004892 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004893
4894 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004895}
4896
4897VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4898 VkDevice device,
4899 VkDescriptorPool descriptorPool,
4900 VkDescriptorSetUsage setUsage,
4901 uint32_t count,
4902 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004903 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004904{
4905 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004906
Cody Northropc8aa4a52015-08-03 12:47:29 -06004907 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004908
Cody Northropc8aa4a52015-08-03 12:47:29 -06004909 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004910
4911 return result;
4912}
4913
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004914bool PreFreeDescriptorSets(
4915 VkDevice device,
4916 const VkDescriptorSet* pDescriptorSets)
4917{
4918 if(pDescriptorSets != nullptr)
4919 {
4920 }
4921
4922 return true;
4923}
4924
4925bool PostFreeDescriptorSets(
4926 VkDevice device,
4927 VkDescriptorPool descriptorPool,
4928 uint32_t count,
4929 VkResult result)
4930{
4931
4932
4933
4934 if(result < VK_SUCCESS)
4935 {
4936 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4937 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4938 return false;
4939 }
4940
4941 return true;
4942}
4943
4944VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4945 VkDevice device,
4946 VkDescriptorPool descriptorPool,
4947 uint32_t count,
4948 const VkDescriptorSet* pDescriptorSets)
4949{
4950 PreFreeDescriptorSets(device, pDescriptorSets);
4951
4952 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4953
4954 PostFreeDescriptorSets(device, descriptorPool, count, result);
4955
4956 return result;
4957}
4958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004959bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004960 VkDevice device,
4961 const VkWriteDescriptorSet* pDescriptorWrites,
4962 const VkCopyDescriptorSet* pDescriptorCopies)
4963{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004964 if(pDescriptorWrites != nullptr)
4965 {
4966 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004967 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004968 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004969 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004970 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004971 }
4972 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4973 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4974 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004975 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004976 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004977 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004978 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004979 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004980 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004981 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4982 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4983 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004984 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004985 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004986 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004987 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004988 }
4989 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004990
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004991 if(pDescriptorCopies != nullptr)
4992 {
4993 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004994 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004996 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004997 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004998 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004999 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005000
5001 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005002}
5003
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06005004VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005005 VkDevice device,
5006 uint32_t writeCount,
5007 const VkWriteDescriptorSet* pDescriptorWrites,
5008 uint32_t copyCount,
5009 const VkCopyDescriptorSet* pDescriptorCopies)
5010{
5011 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005012
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06005013 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005014}
5015
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005016bool PreCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005017 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005018 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005019{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005020 if(pCreateInfo != nullptr)
5021 {
5022 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005023 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005025 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005026 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005027 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005028 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005029 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005030 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005031 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005032 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005033 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005034 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005035
5036 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005037}
5038
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005039bool PostCreateDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005040 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005041 VkDynamicViewportState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005042 VkResult result)
5043{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005044
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005045 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005046 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005047 }
5048
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005049 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005050 {
5051 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5053 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005054 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005055
5056 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005057}
5058
5059VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5060 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005061 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5062 VkDynamicViewportState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005063{
5064 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005065
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005066 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5067
5068 PostCreateDynamicViewportState(device, pState, result);
5069
5070 return result;
5071}
5072
Cody Northrope4bc6942015-08-26 10:01:32 -06005073bool PreCreateDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005074 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005075 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005076{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005077 if(pCreateInfo != nullptr)
5078 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005079 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005080 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005081 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005082 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005083 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005084 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005086
5087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005088}
5089
Cody Northrope4bc6942015-08-26 10:01:32 -06005090bool PostCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005091 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005092 VkDynamicLineWidthState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005093 VkResult result)
5094{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005095
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005096 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005097 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005098 }
5099
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005100 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005101 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005102 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5104 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005105 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005106
5107 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005108}
5109
Cody Northrope4bc6942015-08-26 10:01:32 -06005110VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005111 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005112 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5113 VkDynamicLineWidthState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005114{
Cody Northrope4bc6942015-08-26 10:01:32 -06005115 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005116
Cody Northrope4bc6942015-08-26 10:01:32 -06005117 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005118
Cody Northrope4bc6942015-08-26 10:01:32 -06005119 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005120
5121 return result;
5122}
5123
Cody Northrope4bc6942015-08-26 10:01:32 -06005124bool PreCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005125 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005126 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northropf5bd2252015-08-17 11:10:49 -06005127{
5128 if(pCreateInfo != nullptr)
5129 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005130 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northropf5bd2252015-08-17 11:10:49 -06005131 {
5132 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005133 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northropf5bd2252015-08-17 11:10:49 -06005134 return false;
5135 }
5136 }
5137
5138 return true;
5139}
5140
Cody Northrope4bc6942015-08-26 10:01:32 -06005141bool PostCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005142 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005143 VkDynamicDepthBiasState* pState,
Cody Northropf5bd2252015-08-17 11:10:49 -06005144 VkResult result)
5145{
5146
5147 if(pState != nullptr)
5148 {
5149 }
5150
5151 if(result < VK_SUCCESS)
5152 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005153 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005154 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5155 return false;
5156 }
5157
5158 return true;
5159}
5160
Cody Northrope4bc6942015-08-26 10:01:32 -06005161VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005162 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005163 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5164 VkDynamicDepthBiasState* pState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005165{
Cody Northrope4bc6942015-08-26 10:01:32 -06005166 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northropf5bd2252015-08-17 11:10:49 -06005167
Cody Northrope4bc6942015-08-26 10:01:32 -06005168 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005169
Cody Northrope4bc6942015-08-26 10:01:32 -06005170 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northropf5bd2252015-08-17 11:10:49 -06005171
5172 return result;
5173}
5174
Cody Northrope4bc6942015-08-26 10:01:32 -06005175bool PreCreateDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005176 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005177 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005178{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005179 if(pCreateInfo != nullptr)
5180 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005181 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005182 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005184 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005185 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005186 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005187 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005188
5189 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005190}
5191
Cody Northrope4bc6942015-08-26 10:01:32 -06005192bool PostCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005193 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005194 VkDynamicBlendState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005195 VkResult result)
5196{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005198 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005199 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005200 }
5201
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005202 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005203 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005204 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005205 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5206 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005207 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005208
5209 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005210}
5211
Cody Northrope4bc6942015-08-26 10:01:32 -06005212VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005213 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005214 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5215 VkDynamicBlendState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005216{
Cody Northrope4bc6942015-08-26 10:01:32 -06005217 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005218
Cody Northrope4bc6942015-08-26 10:01:32 -06005219 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005220
Cody Northrope4bc6942015-08-26 10:01:32 -06005221 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005222
5223 return result;
5224}
5225
Cody Northrope4bc6942015-08-26 10:01:32 -06005226bool PreCreateDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005227 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005228 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005229{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005230 if(pCreateInfo != nullptr)
5231 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005232 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005233 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005234 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrope4bc6942015-08-26 10:01:32 -06005235 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005236 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005237 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005238 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005239
5240 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005241}
5242
Cody Northrope4bc6942015-08-26 10:01:32 -06005243bool PostCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005245 VkDynamicDepthBoundsState* pState,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005246 VkResult result)
5247{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005248
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005249 if(pState != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005250 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005251 }
5252
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005253 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005254 {
Cody Northrope4bc6942015-08-26 10:01:32 -06005255 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5257 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005258 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005259
5260 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005261}
5262
Cody Northrope4bc6942015-08-26 10:01:32 -06005263VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005264 VkDevice device,
Cody Northrope4bc6942015-08-26 10:01:32 -06005265 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
5266 VkDynamicDepthBoundsState* pState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005267{
Cody Northrope4bc6942015-08-26 10:01:32 -06005268 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005269
Cody Northrope4bc6942015-08-26 10:01:32 -06005270 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271
Cody Northrope4bc6942015-08-26 10:01:32 -06005272 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273
5274 return result;
5275}
5276
Cody Northrop2605cb02015-08-18 15:21:16 -06005277bool PreCreateDynamicStencilState(
5278 VkDevice device,
5279 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5280 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
5281{
5282 if(pCreateInfoFront != nullptr)
5283 {
5284 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5285 {
5286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5287 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
5288 return false;
5289 }
5290 }
5291
5292 if(pCreateInfoBack != nullptr)
5293 {
5294 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5295 {
5296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5297 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
5298 return false;
5299 }
5300 }
5301
5302 return true;
5303}
5304
5305bool PostCreateDynamicStencilState(
5306 VkDevice device,
5307 VkDynamicStencilState* pState,
5308 VkResult result)
5309{
5310
5311 if(pState != nullptr)
5312 {
5313 }
5314
5315 if(result < VK_SUCCESS)
5316 {
5317 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
5318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5319 return false;
5320 }
5321
5322 return true;
5323}
5324
5325VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
5326 VkDevice device,
5327 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5328 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
5329 VkDynamicStencilState* pState)
5330{
5331 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
5332
5333 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
5334
5335 PostCreateDynamicStencilState(device, pState, result);
5336
5337 return result;
5338}
5339
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005340bool PreCreateFramebuffer(
5341 VkDevice device,
5342 const VkFramebufferCreateInfo* pCreateInfo)
5343{
5344 if(pCreateInfo != nullptr)
5345 {
5346 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
5347 {
5348 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5349 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5350 return false;
5351 }
5352 if(pCreateInfo->pAttachments != nullptr)
5353 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005354 }
5355 }
5356
5357 return true;
5358}
5359
5360bool PostCreateFramebuffer(
5361 VkDevice device,
5362 VkFramebuffer* pFramebuffer,
5363 VkResult result)
5364{
5365
5366 if(pFramebuffer != nullptr)
5367 {
5368 }
5369
5370 if(result < VK_SUCCESS)
5371 {
5372 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
5373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5374 return false;
5375 }
5376
5377 return true;
5378}
5379
5380VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5381 VkDevice device,
5382 const VkFramebufferCreateInfo* pCreateInfo,
5383 VkFramebuffer* pFramebuffer)
5384{
5385 PreCreateFramebuffer(device, pCreateInfo);
5386
5387 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5388
5389 PostCreateFramebuffer(device, pFramebuffer, result);
5390
5391 return result;
5392}
5393
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005394bool PreCreateRenderPass(
5395 VkDevice device,
5396 const VkRenderPassCreateInfo* pCreateInfo)
5397{
5398 if(pCreateInfo != nullptr)
5399 {
5400 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5401 {
5402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5403 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5404 return false;
5405 }
5406 if(pCreateInfo->pAttachments != nullptr)
5407 {
5408 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5409 {
5410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5411 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5412 return false;
5413 }
5414 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5415 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5416 {
5417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5418 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5419 return false;
5420 }
5421 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5422 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5423 {
5424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5425 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5426 return false;
5427 }
5428 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5429 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5430 {
5431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5432 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5433 return false;
5434 }
5435 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5436 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5437 {
5438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5439 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5440 return false;
5441 }
5442 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5443 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5444 {
5445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5446 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5447 return false;
5448 }
5449 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5450 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5451 {
5452 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5453 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5454 return false;
5455 }
5456 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5457 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5458 {
5459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5460 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5461 return false;
5462 }
5463 }
5464 if(pCreateInfo->pSubpasses != nullptr)
5465 {
5466 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5467 {
5468 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5469 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5470 return false;
5471 }
5472 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5473 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5474 {
5475 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5476 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5477 return false;
5478 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005479 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005480 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005481 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5482 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005483 {
5484 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005485 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005486 return false;
5487 }
5488 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005489 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005490 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005491 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5492 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005493 {
5494 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005495 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005496 return false;
5497 }
5498 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005499 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005500 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005501 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5502 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005503 {
5504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005505 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005506 return false;
5507 }
5508 }
5509 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5510 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5511 {
5512 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5513 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5514 return false;
5515 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005516 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005517 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005518 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5519 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005520 {
5521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005522 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005523 return false;
5524 }
5525 }
5526 }
5527 if(pCreateInfo->pDependencies != nullptr)
5528 {
5529 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5530 {
5531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5532 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5533 return false;
5534 }
5535 }
5536 }
5537
5538 return true;
5539}
5540
5541bool PostCreateRenderPass(
5542 VkDevice device,
5543 VkRenderPass* pRenderPass,
5544 VkResult result)
5545{
5546
5547 if(pRenderPass != nullptr)
5548 {
5549 }
5550
5551 if(result < VK_SUCCESS)
5552 {
5553 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5554 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5555 return false;
5556 }
5557
5558 return true;
5559}
5560
5561VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5562 VkDevice device,
5563 const VkRenderPassCreateInfo* pCreateInfo,
5564 VkRenderPass* pRenderPass)
5565{
5566 PreCreateRenderPass(device, pCreateInfo);
5567
5568 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5569
5570 PostCreateRenderPass(device, pRenderPass, result);
5571
5572 return result;
5573}
5574
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005575bool PostGetRenderAreaGranularity(
5576 VkDevice device,
5577 VkRenderPass renderPass,
5578 VkExtent2D* pGranularity,
5579 VkResult result)
5580{
5581
5582
5583 if(pGranularity != nullptr)
5584 {
5585 }
5586
5587 if(result < VK_SUCCESS)
5588 {
5589 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5590 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5591 return false;
5592 }
5593
5594 return true;
5595}
5596
5597VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5598 VkDevice device,
5599 VkRenderPass renderPass,
5600 VkExtent2D* pGranularity)
5601{
5602 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5603
5604 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5605
5606 return result;
5607}
5608
5609bool PreCreateCommandPool(
5610 VkDevice device,
5611 const VkCmdPoolCreateInfo* pCreateInfo)
5612{
5613 if(pCreateInfo != nullptr)
5614 {
5615 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5616 {
5617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5618 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5619 return false;
5620 }
5621 }
5622
5623 return true;
5624}
5625
5626bool PostCreateCommandPool(
5627 VkDevice device,
5628 VkCmdPool* pCmdPool,
5629 VkResult result)
5630{
5631
5632 if(pCmdPool != nullptr)
5633 {
5634 }
5635
5636 if(result < VK_SUCCESS)
5637 {
5638 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5640 return false;
5641 }
5642
5643 return true;
5644}
5645
5646VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5647 VkDevice device,
5648 const VkCmdPoolCreateInfo* pCreateInfo,
5649 VkCmdPool* pCmdPool)
5650{
5651 PreCreateCommandPool(device, pCreateInfo);
5652
5653 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5654
5655 PostCreateCommandPool(device, pCmdPool, result);
5656
5657 return result;
5658}
5659
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005660bool PostResetCommandPool(
5661 VkDevice device,
5662 VkCmdPool cmdPool,
5663 VkCmdPoolResetFlags flags,
5664 VkResult result)
5665{
5666
5667
5668
5669 if(result < VK_SUCCESS)
5670 {
5671 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5672 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5673 return false;
5674 }
5675
5676 return true;
5677}
5678
5679VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5680 VkDevice device,
5681 VkCmdPool cmdPool,
5682 VkCmdPoolResetFlags flags)
5683{
5684 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5685
5686 PostResetCommandPool(device, cmdPool, flags, result);
5687
5688 return result;
5689}
5690
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005691bool PreCreateCommandBuffer(
5692 VkDevice device,
5693 const VkCmdBufferCreateInfo* pCreateInfo)
5694{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005695 if(pCreateInfo != nullptr)
5696 {
5697 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005698 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005699 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005700 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701 return false;
5702 }
5703 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5704 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5705 {
5706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005707 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005708 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005709 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005710 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005711
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005712 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005713}
5714
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005715bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005716 VkDevice device,
5717 VkCmdBuffer* pCmdBuffer,
5718 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005719{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005720
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005721 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005723 }
5724
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005725 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005726 {
5727 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5729 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005731
5732 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005733}
5734
5735VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5736 VkDevice device,
5737 const VkCmdBufferCreateInfo* pCreateInfo,
5738 VkCmdBuffer* pCmdBuffer)
5739{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005740 PreCreateCommandBuffer(device, pCreateInfo);
5741
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5743
5744 PostCreateCommandBuffer(device, pCmdBuffer, result);
5745
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005746 return result;
5747}
5748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005749bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005750 VkCmdBuffer cmdBuffer,
5751 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005752{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005753 if(pBeginInfo != nullptr)
5754 {
5755 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005757 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005758 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005760 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005761 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762
5763 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005764}
5765
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005766bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767 VkCmdBuffer cmdBuffer,
5768 VkResult result)
5769{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005770
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005771 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005772 {
5773 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005774 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5775 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005776 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005777
5778 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005779}
5780
5781VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5782 VkCmdBuffer cmdBuffer,
5783 const VkCmdBufferBeginInfo* pBeginInfo)
5784{
5785 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005786
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005787 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5788
5789 PostBeginCommandBuffer(cmdBuffer, result);
5790
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005791 return result;
5792}
5793
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005794bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005795 VkCmdBuffer cmdBuffer,
5796 VkResult result)
5797{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005799 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005800 {
5801 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005802 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5803 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005804 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005805
5806 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807}
5808
5809VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5810 VkCmdBuffer cmdBuffer)
5811{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5813
5814 PostEndCommandBuffer(cmdBuffer, result);
5815
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005816 return result;
5817}
5818
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005819bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005820 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005821 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005822 VkResult result)
5823{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005824
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005825
5826 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005827 {
5828 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005829 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5830 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832
5833 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834}
5835
5836VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005837 VkCmdBuffer cmdBuffer,
5838 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005839{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005840 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005842 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005843
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005844 return result;
5845}
5846
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005847bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005848 VkCmdBuffer cmdBuffer,
5849 VkPipelineBindPoint pipelineBindPoint,
5850 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005851{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005852
5853 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5854 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5855 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005856 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005857 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005858 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005859 }
5860
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005861
5862 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005863}
5864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005865VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5866 VkCmdBuffer cmdBuffer,
5867 VkPipelineBindPoint pipelineBindPoint,
5868 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005869{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5871
5872 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5873}
5874
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005875bool PostCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005876 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005877 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005878{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005879
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005881 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005882}
5883
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005884VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005885 VkCmdBuffer cmdBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005886 VkDynamicViewportState dynamicViewportState)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005888 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005889
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005890 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891}
5892
Cody Northrope4bc6942015-08-26 10:01:32 -06005893bool PostCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005894 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005895 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005896{
5897
5898
5899 return true;
5900}
5901
Cody Northrope4bc6942015-08-26 10:01:32 -06005902VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005903 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005904 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905{
Cody Northrope4bc6942015-08-26 10:01:32 -06005906 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005907
Cody Northrope4bc6942015-08-26 10:01:32 -06005908 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005909}
5910
Cody Northrope4bc6942015-08-26 10:01:32 -06005911bool PostCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005912 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005913 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005914{
5915
5916
5917 return true;
5918}
5919
Cody Northrope4bc6942015-08-26 10:01:32 -06005920VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northropf5bd2252015-08-17 11:10:49 -06005921 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005922 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northropf5bd2252015-08-17 11:10:49 -06005923{
Cody Northrope4bc6942015-08-26 10:01:32 -06005924 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northropf5bd2252015-08-17 11:10:49 -06005925
Cody Northrope4bc6942015-08-26 10:01:32 -06005926 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005927}
5928
Cody Northrope4bc6942015-08-26 10:01:32 -06005929bool PostCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005930 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005931 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005932{
5933
5934
5935 return true;
5936}
5937
Cody Northrope4bc6942015-08-26 10:01:32 -06005938VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005939 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005940 VkDynamicBlendState dynamicBlendState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005941{
Cody Northrope4bc6942015-08-26 10:01:32 -06005942 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005943
Cody Northrope4bc6942015-08-26 10:01:32 -06005944 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005945}
5946
Cody Northrope4bc6942015-08-26 10:01:32 -06005947bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005948 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005949 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005950{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005951 return true;
5952}
5953
Cody Northrope4bc6942015-08-26 10:01:32 -06005954VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005955 VkCmdBuffer cmdBuffer,
Cody Northrope4bc6942015-08-26 10:01:32 -06005956 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005957{
Cody Northrope4bc6942015-08-26 10:01:32 -06005958 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005959
Cody Northrope4bc6942015-08-26 10:01:32 -06005960 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop2605cb02015-08-18 15:21:16 -06005961}
5962
5963bool PostCmdBindDynamicStencilState(
5964 VkCmdBuffer cmdBuffer,
5965 VkDynamicStencilState dynamicStencilState)
5966{
5967 return true;
5968}
5969
5970VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
5971 VkCmdBuffer cmdBuffer,
5972 VkDynamicStencilState dynamicStencilState)
5973{
5974 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
5975
5976 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005977}
5978
5979bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005980 VkCmdBuffer cmdBuffer,
5981 const VkDescriptorSet* pDescriptorSets,
5982 const uint32_t* pDynamicOffsets)
5983{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005984 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005985 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005986 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005988 if(pDynamicOffsets != nullptr)
5989 {
5990 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005991
5992 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005993}
5994
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005995bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005996 VkCmdBuffer cmdBuffer,
5997 VkPipelineBindPoint pipelineBindPoint,
5998 VkPipelineLayout layout,
5999 uint32_t firstSet,
6000 uint32_t setCount,
6001 uint32_t dynamicOffsetCount)
6002{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006003
6004 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
6005 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
6006 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006007 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006008 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006009 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006010 }
6011
6012
6013
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006014
6015
6016 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006017}
6018
6019VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6020 VkCmdBuffer cmdBuffer,
6021 VkPipelineBindPoint pipelineBindPoint,
6022 VkPipelineLayout layout,
6023 uint32_t firstSet,
6024 uint32_t setCount,
6025 const VkDescriptorSet* pDescriptorSets,
6026 uint32_t dynamicOffsetCount,
6027 const uint32_t* pDynamicOffsets)
6028{
6029 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006030
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006031 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6032
6033 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6034}
6035
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006036bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006037 VkCmdBuffer cmdBuffer,
6038 VkBuffer buffer,
6039 VkDeviceSize offset,
6040 VkIndexType indexType)
6041{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006043
6044
6045 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6046 indexType > VK_INDEX_TYPE_END_RANGE)
6047 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006048 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006049 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006050 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006051 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052
6053 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054}
6055
6056VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6057 VkCmdBuffer cmdBuffer,
6058 VkBuffer buffer,
6059 VkDeviceSize offset,
6060 VkIndexType indexType)
6061{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6063
6064 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6065}
6066
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006067bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068 VkCmdBuffer cmdBuffer,
6069 const VkBuffer* pBuffers,
6070 const VkDeviceSize* pOffsets)
6071{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006072 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006074 }
6075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006076 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006078 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079
6080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006081}
6082
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006083bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006084 VkCmdBuffer cmdBuffer,
6085 uint32_t startBinding,
6086 uint32_t bindingCount)
6087{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006088
6089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006090
6091 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006092}
6093
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06006094VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006095 VkCmdBuffer cmdBuffer,
6096 uint32_t startBinding,
6097 uint32_t bindingCount,
6098 const VkBuffer* pBuffers,
6099 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006100{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006101 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006102
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6104
6105 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006106}
6107
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006108bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006109 VkCmdBuffer cmdBuffer,
6110 uint32_t firstVertex,
6111 uint32_t vertexCount,
6112 uint32_t firstInstance,
6113 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006114{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006115
6116
6117
6118
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006119
6120 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006121}
6122
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6124 VkCmdBuffer cmdBuffer,
6125 uint32_t firstVertex,
6126 uint32_t vertexCount,
6127 uint32_t firstInstance,
6128 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006129{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6131
6132 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006133}
6134
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006135bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006136 VkCmdBuffer cmdBuffer,
6137 uint32_t firstIndex,
6138 uint32_t indexCount,
6139 int32_t vertexOffset,
6140 uint32_t firstInstance,
6141 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006142{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006143
6144
6145
6146
6147
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006148
6149 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006150}
6151
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006152VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
6153 VkCmdBuffer cmdBuffer,
6154 uint32_t firstIndex,
6155 uint32_t indexCount,
6156 int32_t vertexOffset,
6157 uint32_t firstInstance,
6158 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006159{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6161
6162 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6163}
6164
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006165bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006166 VkCmdBuffer cmdBuffer,
6167 VkBuffer buffer,
6168 VkDeviceSize offset,
6169 uint32_t count,
6170 uint32_t stride)
6171{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172
6173
6174
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006175
6176
6177 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006178}
6179
6180VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
6181 VkCmdBuffer cmdBuffer,
6182 VkBuffer buffer,
6183 VkDeviceSize offset,
6184 uint32_t count,
6185 uint32_t stride)
6186{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006187 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6188
6189 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6190}
6191
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006192bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006193 VkCmdBuffer cmdBuffer,
6194 VkBuffer buffer,
6195 VkDeviceSize offset,
6196 uint32_t count,
6197 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006198{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006199
6200
6201
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006202
6203
6204 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006205}
6206
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006207VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
6208 VkCmdBuffer cmdBuffer,
6209 VkBuffer buffer,
6210 VkDeviceSize offset,
6211 uint32_t count,
6212 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006213{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006214 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
6215
6216 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
6217}
6218
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006219bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006220 VkCmdBuffer cmdBuffer,
6221 uint32_t x,
6222 uint32_t y,
6223 uint32_t z)
6224{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006225
6226
6227
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006228
6229 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006230}
6231
6232VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
6233 VkCmdBuffer cmdBuffer,
6234 uint32_t x,
6235 uint32_t y,
6236 uint32_t z)
6237{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006238 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
6239
6240 PostCmdDispatch(cmdBuffer, x, y, z);
6241}
6242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006243bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006244 VkCmdBuffer cmdBuffer,
6245 VkBuffer buffer,
6246 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006247{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006248
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006249
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006250
6251 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006252}
6253
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006254VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
6255 VkCmdBuffer cmdBuffer,
6256 VkBuffer buffer,
6257 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006258{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006259 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
6260
6261 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006262}
6263
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006264bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006265 VkCmdBuffer cmdBuffer,
6266 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006267{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006268 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006269 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006271
6272 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006273}
6274
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006275bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006276 VkCmdBuffer cmdBuffer,
6277 VkBuffer srcBuffer,
6278 VkBuffer destBuffer,
6279 uint32_t regionCount)
6280{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006281
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006282
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006283
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006284
6285 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006286}
6287
6288VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
6289 VkCmdBuffer cmdBuffer,
6290 VkBuffer srcBuffer,
6291 VkBuffer destBuffer,
6292 uint32_t regionCount,
6293 const VkBufferCopy* pRegions)
6294{
6295 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006296
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006297 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
6298
6299 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
6300}
6301
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006302bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006303 VkCmdBuffer cmdBuffer,
6304 const VkImageCopy* pRegions)
6305{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006306 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006307 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006308 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6309 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6310 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006311 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006312 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006313 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006314 }
6315 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6316 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6317 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006318 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006319 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006320 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006321 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006322 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006323
6324 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006325}
6326
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006327bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006328 VkCmdBuffer cmdBuffer,
6329 VkImage srcImage,
6330 VkImageLayout srcImageLayout,
6331 VkImage destImage,
6332 VkImageLayout destImageLayout,
6333 uint32_t regionCount)
6334{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006335
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006336
6337 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6338 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6339 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006340 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006341 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006342 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006343 }
6344
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006345
6346 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6347 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6348 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006349 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006350 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006351 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006352 }
6353
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006354
6355 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006356}
6357
6358VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
6359 VkCmdBuffer cmdBuffer,
6360 VkImage srcImage,
6361 VkImageLayout srcImageLayout,
6362 VkImage destImage,
6363 VkImageLayout destImageLayout,
6364 uint32_t regionCount,
6365 const VkImageCopy* pRegions)
6366{
6367 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006368
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006369 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6370
6371 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6372}
6373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006374bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 VkCmdBuffer cmdBuffer,
6376 const VkImageBlit* pRegions)
6377{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006378 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006379 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006380 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6381 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6382 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006383 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006384 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006385 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006386 }
6387 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6388 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6389 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006390 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006391 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006392 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006393 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006394 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006395
6396 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006397}
6398
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006399bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006400 VkCmdBuffer cmdBuffer,
6401 VkImage srcImage,
6402 VkImageLayout srcImageLayout,
6403 VkImage destImage,
6404 VkImageLayout destImageLayout,
6405 uint32_t regionCount,
6406 VkTexFilter filter)
6407{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006408
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006409
6410 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6411 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6412 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006413 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006414 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006415 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006416 }
6417
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006418
6419 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6420 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6421 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006422 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006423 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006424 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006425 }
6426
6427
6428 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
6429 filter > VK_TEX_FILTER_END_RANGE)
6430 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006431 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006432 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006433 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006435
6436 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006437}
6438
6439VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6440 VkCmdBuffer cmdBuffer,
6441 VkImage srcImage,
6442 VkImageLayout srcImageLayout,
6443 VkImage destImage,
6444 VkImageLayout destImageLayout,
6445 uint32_t regionCount,
6446 const VkImageBlit* pRegions,
6447 VkTexFilter filter)
6448{
6449 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006450
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006451 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6452
6453 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6454}
6455
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006456bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006457 VkCmdBuffer cmdBuffer,
6458 const VkBufferImageCopy* pRegions)
6459{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006460 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006461 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006462 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6463 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6464 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006465 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006466 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006467 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006468 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006469 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006470
6471 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006472}
6473
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006474bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006475 VkCmdBuffer cmdBuffer,
6476 VkBuffer srcBuffer,
6477 VkImage destImage,
6478 VkImageLayout destImageLayout,
6479 uint32_t regionCount)
6480{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006481
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006482
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006483
6484 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6485 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6486 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006487 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006488 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006489 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006490 }
6491
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006492
6493 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006494}
6495
6496VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6497 VkCmdBuffer cmdBuffer,
6498 VkBuffer srcBuffer,
6499 VkImage destImage,
6500 VkImageLayout destImageLayout,
6501 uint32_t regionCount,
6502 const VkBufferImageCopy* pRegions)
6503{
6504 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006505
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006506 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6507
6508 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6509}
6510
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006511bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512 VkCmdBuffer cmdBuffer,
6513 const VkBufferImageCopy* pRegions)
6514{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006515 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006517 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6518 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6519 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006520 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006521 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006522 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006523 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006524 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006525
6526 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006527}
6528
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006529bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530 VkCmdBuffer cmdBuffer,
6531 VkImage srcImage,
6532 VkImageLayout srcImageLayout,
6533 VkBuffer destBuffer,
6534 uint32_t regionCount)
6535{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006537
6538 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6539 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6540 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006541 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006542 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006543 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006544 }
6545
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006547
6548 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006549}
6550
6551VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6552 VkCmdBuffer cmdBuffer,
6553 VkImage srcImage,
6554 VkImageLayout srcImageLayout,
6555 VkBuffer destBuffer,
6556 uint32_t regionCount,
6557 const VkBufferImageCopy* pRegions)
6558{
6559 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006560
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006561 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6562
6563 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6564}
6565
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006566bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006567 VkCmdBuffer cmdBuffer,
6568 const uint32_t* pData)
6569{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006570 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006571 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006573
6574 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006575}
6576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006577bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006578 VkCmdBuffer cmdBuffer,
6579 VkBuffer destBuffer,
6580 VkDeviceSize destOffset,
6581 VkDeviceSize dataSize)
6582{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006583
6584
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006585
6586
6587 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006588}
6589
6590VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6591 VkCmdBuffer cmdBuffer,
6592 VkBuffer destBuffer,
6593 VkDeviceSize destOffset,
6594 VkDeviceSize dataSize,
6595 const uint32_t* pData)
6596{
6597 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006598
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006599 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6600
6601 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6602}
6603
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006604bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006605 VkCmdBuffer cmdBuffer,
6606 VkBuffer destBuffer,
6607 VkDeviceSize destOffset,
6608 VkDeviceSize fillSize,
6609 uint32_t data)
6610{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006611
6612
6613
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006614
6615
6616 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006617}
6618
6619VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6620 VkCmdBuffer cmdBuffer,
6621 VkBuffer destBuffer,
6622 VkDeviceSize destOffset,
6623 VkDeviceSize fillSize,
6624 uint32_t data)
6625{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006626 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6627
6628 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6629}
6630
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006631bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006632 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006633 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006634 const VkImageSubresourceRange* pRanges)
6635{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006636 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006637 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638 }
6639
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006640 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006641 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006642 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6643 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
6644 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006645 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006646 "vkCmdClearColorImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006647 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006648 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006649 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006650
6651 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006652}
6653
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006654bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006655 VkCmdBuffer cmdBuffer,
6656 VkImage image,
6657 VkImageLayout imageLayout,
6658 uint32_t rangeCount)
6659{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006660
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006661
6662 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6663 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6664 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006665 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006666 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006667 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006668 }
6669
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006670
6671 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006672}
6673
6674VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6675 VkCmdBuffer cmdBuffer,
6676 VkImage image,
6677 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006678 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006679 uint32_t rangeCount,
6680 const VkImageSubresourceRange* pRanges)
6681{
6682 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006683
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006684 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6685
6686 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6687}
6688
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006689bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690 VkCmdBuffer cmdBuffer,
6691 const VkImageSubresourceRange* pRanges)
6692{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006693 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006694 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006695 if(pRanges->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6696 pRanges->aspect > VK_IMAGE_ASPECT_END_RANGE)
6697 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006698 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006699 "vkCmdClearDepthStencilImage parameter, VkImageAspect pRanges->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006700 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006701 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006702 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006703
6704 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006705}
6706
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006707bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006708 VkCmdBuffer cmdBuffer,
6709 VkImage image,
6710 VkImageLayout imageLayout,
6711 float depth,
6712 uint32_t stencil,
6713 uint32_t rangeCount)
6714{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006715
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006716
6717 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6718 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6719 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006720 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006721 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006722 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006723 }
6724
6725
6726
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006727
6728 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729}
6730
Chris Forbes2951d7d2015-06-22 17:21:59 +12006731VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006732 VkCmdBuffer cmdBuffer,
6733 VkImage image,
6734 VkImageLayout imageLayout,
6735 float depth,
6736 uint32_t stencil,
6737 uint32_t rangeCount,
6738 const VkImageSubresourceRange* pRanges)
6739{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006740 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006741
Chris Forbes2951d7d2015-06-22 17:21:59 +12006742 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006743
Chris Forbes2951d7d2015-06-22 17:21:59 +12006744 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006745}
6746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006747bool PreCmdClearColorAttachment(
6748 VkCmdBuffer cmdBuffer,
6749 const VkClearColorValue* pColor,
6750 const VkRect3D* pRects)
6751{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006752 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006753 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006754 }
6755
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006756 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006757 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006758 }
6759
6760 return true;
6761}
6762
6763bool PostCmdClearColorAttachment(
6764 VkCmdBuffer cmdBuffer,
6765 uint32_t colorAttachment,
6766 VkImageLayout imageLayout,
6767 uint32_t rectCount)
6768{
6769
6770
6771 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6772 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6773 {
6774 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006775 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006776 return false;
6777 }
6778
6779
6780 return true;
6781}
6782
6783VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
6784 VkCmdBuffer cmdBuffer,
6785 uint32_t colorAttachment,
6786 VkImageLayout imageLayout,
6787 const VkClearColorValue* pColor,
6788 uint32_t rectCount,
6789 const VkRect3D* pRects)
6790{
6791 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
6792
6793 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
6794
6795 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
6796}
6797
6798bool PreCmdClearDepthStencilAttachment(
6799 VkCmdBuffer cmdBuffer,
6800 const VkRect3D* pRects)
6801{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006802 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006803 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006804 }
6805
6806 return true;
6807}
6808
6809bool PostCmdClearDepthStencilAttachment(
6810 VkCmdBuffer cmdBuffer,
6811 VkImageAspectFlags imageAspectMask,
6812 VkImageLayout imageLayout,
6813 float depth,
6814 uint32_t stencil,
6815 uint32_t rectCount)
6816{
6817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006818
6819 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6820 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6821 {
6822 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006823 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006824 return false;
6825 }
6826
6827
6828
6829
6830 return true;
6831}
6832
6833VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
6834 VkCmdBuffer cmdBuffer,
6835 VkImageAspectFlags imageAspectMask,
6836 VkImageLayout imageLayout,
6837 float depth,
6838 uint32_t stencil,
6839 uint32_t rectCount,
6840 const VkRect3D* pRects)
6841{
6842 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
6843
6844 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
6845
6846 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
6847}
6848
6849bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006850 VkCmdBuffer cmdBuffer,
6851 const VkImageResolve* pRegions)
6852{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006853 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006854 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006855 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6856 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6857 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006858 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006859 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006860 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006861 }
6862 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6863 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6864 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006865 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006866 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006867 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006868 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006869 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006870
6871 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006872}
6873
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006874bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006875 VkCmdBuffer cmdBuffer,
6876 VkImage srcImage,
6877 VkImageLayout srcImageLayout,
6878 VkImage destImage,
6879 VkImageLayout destImageLayout,
6880 uint32_t regionCount)
6881{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006883
6884 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6885 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6886 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006887 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006888 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006889 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006890 }
6891
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006892
6893 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6894 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6895 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006896 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006897 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006898 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006899 }
6900
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006901
6902 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006903}
6904
6905VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6906 VkCmdBuffer cmdBuffer,
6907 VkImage srcImage,
6908 VkImageLayout srcImageLayout,
6909 VkImage destImage,
6910 VkImageLayout destImageLayout,
6911 uint32_t regionCount,
6912 const VkImageResolve* pRegions)
6913{
6914 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006915
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6917
6918 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6919}
6920
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006921bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006922 VkCmdBuffer cmdBuffer,
6923 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006924 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006925{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006927
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006928
6929 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930}
6931
6932VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6933 VkCmdBuffer cmdBuffer,
6934 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006935 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006936{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006937 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006938
Tony Barbourc2e987e2015-06-29 16:20:35 -06006939 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006940}
6941
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006942bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006943 VkCmdBuffer cmdBuffer,
6944 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006945 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006946{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006947
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006948
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006949
6950 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006951}
6952
6953VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6954 VkCmdBuffer cmdBuffer,
6955 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006956 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006957{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006958 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006959
Tony Barbourc2e987e2015-06-29 16:20:35 -06006960 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006961}
6962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006963bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006964 VkCmdBuffer cmdBuffer,
6965 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006966 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006967{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006968 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006969 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006970 }
6971
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006972 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006973 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006974 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006975
6976 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006977}
6978
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006979bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006980 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006981 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006982 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006983 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006984 uint32_t memBarrierCount)
6985{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986
Tony Barbourc2e987e2015-06-29 16:20:35 -06006987
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006988
6989
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006990
6991 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006992}
6993
6994VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6995 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006996 uint32_t eventCount,
6997 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006998 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006999 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06007001 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007002{
7003 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007004
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007005 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007007 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007008}
7009
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007010bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007011 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007012 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007013{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007014 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007015 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007016 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007017
7018 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007019}
7020
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007021bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007022 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007023 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007024 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007025 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007026 uint32_t memBarrierCount)
7027{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007028
Tony Barbourc2e987e2015-06-29 16:20:35 -06007029
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030
7031
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007032
7033 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007034}
7035
7036VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7037 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007038 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06007039 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06007040 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007041 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007042 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007043{
Tony Barbourc2e987e2015-06-29 16:20:35 -06007044 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007045
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007046 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007047
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06007048 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007049}
7050
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007051bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007052 VkCmdBuffer cmdBuffer,
7053 VkQueryPool queryPool,
7054 uint32_t slot,
7055 VkQueryControlFlags flags)
7056{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007057
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007058
7059
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007060
7061 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007062}
7063
7064VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7065 VkCmdBuffer cmdBuffer,
7066 VkQueryPool queryPool,
7067 uint32_t slot,
7068 VkQueryControlFlags flags)
7069{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007070 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7071
7072 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7073}
7074
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007075bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007076 VkCmdBuffer cmdBuffer,
7077 VkQueryPool queryPool,
7078 uint32_t slot)
7079{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007080
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007081
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007082
7083 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007084}
7085
7086VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7087 VkCmdBuffer cmdBuffer,
7088 VkQueryPool queryPool,
7089 uint32_t slot)
7090{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007091 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7092
7093 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7094}
7095
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007096bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007097 VkCmdBuffer cmdBuffer,
7098 VkQueryPool queryPool,
7099 uint32_t startQuery,
7100 uint32_t queryCount)
7101{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007102
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007103
7104
7105
7106 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007107}
7108
7109VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
7110 VkCmdBuffer cmdBuffer,
7111 VkQueryPool queryPool,
7112 uint32_t startQuery,
7113 uint32_t queryCount)
7114{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007115 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7116
7117 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7118}
7119
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007120bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007121 VkCmdBuffer cmdBuffer,
7122 VkTimestampType timestampType,
7123 VkBuffer destBuffer,
7124 VkDeviceSize destOffset)
7125{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007126
7127 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
7128 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
7129 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007130 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007131 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007132 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007133 }
7134
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007135
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007136
7137 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007138}
7139
7140VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
7141 VkCmdBuffer cmdBuffer,
7142 VkTimestampType timestampType,
7143 VkBuffer destBuffer,
7144 VkDeviceSize destOffset)
7145{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007146 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7147
7148 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7149}
7150
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007151bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007152 VkCmdBuffer cmdBuffer,
7153 VkQueryPool queryPool,
7154 uint32_t startQuery,
7155 uint32_t queryCount,
7156 VkBuffer destBuffer,
7157 VkDeviceSize destOffset,
7158 VkDeviceSize destStride,
7159 VkQueryResultFlags flags)
7160{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007161
7162
7163
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007164
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007165
7166
7167
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007168
7169 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007170}
7171
Jeremy Hayescf469132015-04-17 10:36:53 -06007172VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007173 VkCmdBuffer cmdBuffer,
7174 VkQueryPool queryPool,
7175 uint32_t startQuery,
7176 uint32_t queryCount,
7177 VkBuffer destBuffer,
7178 VkDeviceSize destOffset,
7179 VkDeviceSize destStride,
7180 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06007181{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007182 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
7183
7184 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06007185}
7186
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007187bool PreCmdPushConstants(
7188 VkCmdBuffer cmdBuffer,
7189 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007190{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007191 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007192 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007193 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007194
7195 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007196}
7197
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007198bool PostCmdPushConstants(
7199 VkCmdBuffer cmdBuffer,
7200 VkPipelineLayout layout,
7201 VkShaderStageFlags stageFlags,
7202 uint32_t start,
7203 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007204{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007205
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007206
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007207
7208
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007209
7210 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007211}
7212
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007213VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
7214 VkCmdBuffer cmdBuffer,
7215 VkPipelineLayout layout,
7216 VkShaderStageFlags stageFlags,
7217 uint32_t start,
7218 uint32_t length,
7219 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007220{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007221 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007222
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007223 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007224
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007225 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007226}
7227
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007228bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007229 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007230 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007231{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007232 if(pRenderPassBegin != nullptr)
7233 {
7234 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007235 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007236 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007237 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007238 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06007239 }
Cody Northropc332eef2015-08-04 11:51:03 -06007240 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007241 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007242 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06007243 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007244
7245 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007246}
7247
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007248bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007249 VkCmdBuffer cmdBuffer,
7250 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007251{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007252
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007253 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
7254 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
7255 {
7256 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7257 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
7258 return false;
7259 }
7260
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007261 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007262}
7263
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007264VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
7265 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08007266 const VkRenderPassBeginInfo* pRenderPassBegin,
7267 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007268{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007269 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
7270
Chia-I Wuc278df82015-07-07 11:50:03 +08007271 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007272
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007273 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007274}
7275
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007276bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08007277 VkCmdBuffer cmdBuffer,
7278 VkRenderPassContents contents)
7279{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007280
7281 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007282 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08007283 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007284 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007285 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
7286 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08007287 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007288
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007289 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08007290}
7291
7292VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
7293 VkCmdBuffer cmdBuffer,
7294 VkRenderPassContents contents)
7295{
Chia-I Wuc278df82015-07-07 11:50:03 +08007296 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
7297
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007298 PostCmdNextSubpass(cmdBuffer, contents);
7299}
7300
7301bool PostCmdEndRenderPass(
7302 VkCmdBuffer cmdBuffer)
7303{
7304
7305 return true;
7306}
7307
7308VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
7309 VkCmdBuffer cmdBuffer)
7310{
7311 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
7312
7313 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08007314}
7315
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007316bool PreCmdExecuteCommands(
7317 VkCmdBuffer cmdBuffer,
7318 const VkCmdBuffer* pCmdBuffers)
7319{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06007320 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007321 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007322 }
7323
7324 return true;
7325}
7326
7327bool PostCmdExecuteCommands(
7328 VkCmdBuffer cmdBuffer,
7329 uint32_t cmdBuffersCount)
7330{
7331
7332
7333 return true;
7334}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007335
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08007336VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007337 VkCmdBuffer cmdBuffer,
7338 uint32_t cmdBuffersCount,
7339 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08007340{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007341 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
7342
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08007343 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
7344
Jeremy Hayesc27938e2015-07-09 17:11:25 -06007345 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007346}
7347
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007348VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007349{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007350 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007351 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007352 }
7353
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007354 /* loader uses this to force layer initialization; device object is wrapped */
7355 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007356 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007357 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007358 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007359
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06007360 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007361 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007362 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007363 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007364 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007365 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007366 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007367 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007368 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007369 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007370 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007371 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007372 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007373 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007374 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007375 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007376 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007377 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007378 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007379 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007380 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007381 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007382 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007383 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007384 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007385 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007386 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007387 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007388 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007389 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007390 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007391 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007392 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007393 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007394 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007395 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007396 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007397 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007398 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007399 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007400 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007401 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007402 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007403 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007404 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007405 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007406 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007407 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007408 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007409 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007410 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007411 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007412 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007413 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007414 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007415 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007416 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007417 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburn0d60d272015-07-09 15:02:25 -06007418 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007419 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06007420 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007421 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007422 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007423 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007424 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007425 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007426 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007427 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007428 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007429 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007430 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007431 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007432 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007433 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007434 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007435 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrope4bc6942015-08-26 10:01:32 -06007436 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
7437 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
7438 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
7439 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
7440 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
7441 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
7442 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
7443 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop2605cb02015-08-18 15:21:16 -06007444 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
7445 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007446 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007447 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007448 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007449 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007450 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007451 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007452 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007453 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007454 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007455 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007456 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007457 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007458 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007459 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007460 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007461 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007462 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007463 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007464 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007465 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007466 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007467 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007468 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007469 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007470 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007471 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007472 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007473 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007474 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007475 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007476 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007477 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007478 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007479 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007480 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007481 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007482 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007483 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007484 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007485 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007486 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007487 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007488 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007489 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007490 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007491 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007492 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007493 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007494 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007495 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007496 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007497 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007498 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007499 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007500 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007501 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007502 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007503 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007504 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007505 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007506 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007507 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007508 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007509 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007510 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007511 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007512 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007513 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007514 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007515 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08007516 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007517 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007518
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007519 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007520 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007521 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007522 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007523 }
7524}
7525
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007526VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007527{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007528 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007529 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007530 }
7531
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007532 /* loader uses this to force layer initialization; instance object is wrapped */
7533 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007534 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007535 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007536 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007537
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007538 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007539 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007540 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007541 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007542 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007543 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007544 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007545 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007546 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007547 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06007548 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007549 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06007550 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007551 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06007552 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007553 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06007554 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007555 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06007556 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007557 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007558
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007559 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007560 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007561 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007562 return fptr;
7563
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007564 {
7565 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7566 return NULL;
7567 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7568 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007569}