blob: f906fb34448b9ea001e7c688920c663c384bb385 [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.
Michael Lentine6715e522015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060035
Tobin Ehlis7a51d902015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060041
Tobin Ehlis56d204a2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060046
Cody Northrop73bb6572015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop73bb6572015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop73bb6572015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski3723c512015-05-26 10:58:40 -050055
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060059
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060062{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb4b6e7c2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour426b9052015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
173 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayescf469132015-04-17 10:36:53 -0600174}
175
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600176VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600177 VkPhysicalDevice physicalDevice,
178 uint32_t* pCount,
179 VkLayerProperties* pProperties)
180{
181 /* ParamChecker's physical device layers are the same as global */
182 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
183 pCount, pProperties);
184}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600185
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600186// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600187
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600188static
189std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600190{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600191 switch(enumerator)
192 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600193 case VK_RESULT_MAX_ENUM:
194 {
195 return "VK_RESULT_MAX_ENUM";
196 break;
197 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600198 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600199 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600200 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600201 break;
202 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600203 case VK_ERROR_INCOMPATIBLE_DRIVER:
204 {
205 return "VK_ERROR_INCOMPATIBLE_DRIVER";
206 break;
207 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600208 case VK_ERROR_MEMORY_MAP_FAILED:
209 {
210 return "VK_ERROR_MEMORY_MAP_FAILED";
211 break;
212 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600213 case VK_INCOMPLETE:
214 {
215 return "VK_INCOMPLETE";
216 break;
217 }
218 case VK_ERROR_OUT_OF_HOST_MEMORY:
219 {
220 return "VK_ERROR_OUT_OF_HOST_MEMORY";
221 break;
222 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600223 case VK_ERROR_INITIALIZATION_FAILED:
224 {
225 return "VK_ERROR_INITIALIZATION_FAILED";
226 break;
227 }
228 case VK_NOT_READY:
229 {
230 return "VK_NOT_READY";
231 break;
232 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600233 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
234 {
235 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
236 break;
237 }
238 case VK_EVENT_SET:
239 {
240 return "VK_EVENT_SET";
241 break;
242 }
243 case VK_TIMEOUT:
244 {
245 return "VK_TIMEOUT";
246 break;
247 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600248 case VK_EVENT_RESET:
249 {
250 return "VK_EVENT_RESET";
251 break;
252 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600253 case VK_UNSUPPORTED:
254 {
255 return "VK_UNSUPPORTED";
256 break;
257 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600258 case VK_SUCCESS:
259 {
260 return "VK_SUCCESS";
261 break;
262 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600263 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600264 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600265 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600266 break;
267 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600268 case VK_ERROR_DEVICE_LOST:
269 {
270 return "VK_ERROR_DEVICE_LOST";
271 break;
272 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600273 default:
274 {
275 return "unrecognized enumerator";
276 break;
277 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600278 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600279}
280
281static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600282bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
283{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600284 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600285 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
286 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
287 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
289 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
290 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
291 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
292 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
293 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600294 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
295 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
296 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600297 if(enumerator & (~allFlags))
298 {
299 return false;
300 }
301
302 return true;
303}
304
305static
306std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
307{
308 if(!ValidateEnumerator(enumerator))
309 {
310 return "unrecognized enumerator";
311 }
312
313 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600314 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
315 {
316 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
317 }
318 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
319 {
320 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
321 }
322 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
323 {
324 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
325 }
326 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
327 {
328 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
329 }
330 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
331 {
332 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
333 }
334 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
335 {
336 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
337 }
338 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
339 {
340 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
341 }
342 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
343 {
344 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
345 }
346 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
347 {
348 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
349 }
350 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
351 {
352 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
353 }
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600354 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
355 {
356 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
357 }
358 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
359 {
360 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
361 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600362
363 std::string enumeratorString;
364 for(auto const& string : strings)
365 {
366 enumeratorString += string;
367
368 if(string != strings.back())
369 {
370 enumeratorString += '|';
371 }
372 }
373
374 return enumeratorString;
375}
376
377static
378bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
379{
380 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600381 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600382 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
383 VK_IMAGE_USAGE_STORAGE_BIT |
384 VK_IMAGE_USAGE_SAMPLED_BIT |
385 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
386 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600387 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600388 if(enumerator & (~allFlags))
389 {
390 return false;
391 }
392
393 return true;
394}
395
396static
397std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
398{
399 if(!ValidateEnumerator(enumerator))
400 {
401 return "unrecognized enumerator";
402 }
403
404 std::vector<std::string> strings;
405 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
406 {
407 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
408 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600409 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600410 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600411 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600412 }
413 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
414 {
415 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
416 }
417 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
418 {
419 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
420 }
421 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
422 {
423 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
424 }
425 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
426 {
427 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
428 }
429 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
430 {
431 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
432 }
433 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
434 {
435 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
436 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600437
438 std::string enumeratorString;
439 for(auto const& string : strings)
440 {
441 enumeratorString += string;
442
443 if(string != strings.back())
444 {
445 enumeratorString += '|';
446 }
447 }
448
449 return enumeratorString;
450}
451
452static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600453bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
454{
455 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
456 VK_QUEUE_DMA_BIT |
457 VK_QUEUE_COMPUTE_BIT |
458 VK_QUEUE_SPARSE_MEMMGR_BIT |
459 VK_QUEUE_GRAPHICS_BIT);
460 if(enumerator & (~allFlags))
461 {
462 return false;
463 }
464
465 return true;
466}
467
468static
469std::string EnumeratorString(VkQueueFlagBits const& enumerator)
470{
471 if(!ValidateEnumerator(enumerator))
472 {
473 return "unrecognized enumerator";
474 }
475
476 std::vector<std::string> strings;
477 if(enumerator & VK_QUEUE_EXTENDED_BIT)
478 {
479 strings.push_back("VK_QUEUE_EXTENDED_BIT");
480 }
481 if(enumerator & VK_QUEUE_DMA_BIT)
482 {
483 strings.push_back("VK_QUEUE_DMA_BIT");
484 }
485 if(enumerator & VK_QUEUE_COMPUTE_BIT)
486 {
487 strings.push_back("VK_QUEUE_COMPUTE_BIT");
488 }
489 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
490 {
491 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
492 }
493 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
494 {
495 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
496 }
497
498 std::string enumeratorString;
499 for(auto const& string : strings)
500 {
501 enumeratorString += string;
502
503 if(string != strings.back())
504 {
505 enumeratorString += '|';
506 }
507 }
508
509 return enumeratorString;
510}
511
512static
513bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
514{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600515 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600516 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
517 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
518 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
519 VK_MEMORY_PROPERTY_DEVICE_ONLY);
520 if(enumerator & (~allFlags))
521 {
522 return false;
523 }
524
525 return true;
526}
527
528static
529std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
530{
531 if(!ValidateEnumerator(enumerator))
532 {
533 return "unrecognized enumerator";
534 }
535
536 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600537 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
538 {
539 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
540 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600541 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
542 {
543 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
544 }
545 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
546 {
547 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
548 }
549 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
550 {
551 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
552 }
553 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
554 {
555 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
556 }
557
558 std::string enumeratorString;
559 for(auto const& string : strings)
560 {
561 enumeratorString += string;
562
563 if(string != strings.back())
564 {
565 enumeratorString += '|';
566 }
567 }
568
569 return enumeratorString;
570}
571
572static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600573bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600574{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600575 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600576 if(enumerator & (~allFlags))
577 {
578 return false;
579 }
580
581 return true;
582}
583
584static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600585std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600586{
587 if(!ValidateEnumerator(enumerator))
588 {
589 return "unrecognized enumerator";
590 }
591
592 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600593 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600594 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -0600595 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600596 }
597
598 std::string enumeratorString;
599 for(auto const& string : strings)
600 {
601 enumeratorString += string;
602
603 if(string != strings.back())
604 {
605 enumeratorString += '|';
606 }
607 }
608
609 return enumeratorString;
610}
611
612static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600613bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
614{
615 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
616 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
617 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
618 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600619 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600620 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600621 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600622
623 return true;
624}
625
626static
627std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
628{
629 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600630 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600631 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600632 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600633
634 std::vector<std::string> strings;
635 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600636 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600637 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600638 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600639 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600640 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600641 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600642 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600643 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600644 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600645 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600646 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600647
648 std::string enumeratorString;
649 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600650 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600651 enumeratorString += string;
652
653 if(string != strings.back())
654 {
655 enumeratorString += '|';
656 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600657 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600658
659 return enumeratorString;
660}
661
662static
663bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
664{
665 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
666 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600667 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600668 return false;
669 }
670
671 return true;
672}
673
674static
675std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
676{
677 if(!ValidateEnumerator(enumerator))
678 {
679 return "unrecognized enumerator";
680 }
681
682 std::vector<std::string> strings;
683 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
684 {
685 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
686 }
687
688 std::string enumeratorString;
689 for(auto const& string : strings)
690 {
691 enumeratorString += string;
692
693 if(string != strings.back())
694 {
695 enumeratorString += '|';
696 }
697 }
698
699 return enumeratorString;
700}
701
702static
703bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
704{
705 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
706 if(enumerator & (~allFlags))
707 {
708 return false;
709 }
710
711 return true;
712}
713
714static
715std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
716{
717 if(!ValidateEnumerator(enumerator))
718 {
719 return "unrecognized enumerator";
720 }
721
722 std::vector<std::string> strings;
723 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
724 {
725 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
726 }
727
728 std::string enumeratorString;
729 for(auto const& string : strings)
730 {
731 enumeratorString += string;
732
733 if(string != strings.back())
734 {
735 enumeratorString += '|';
736 }
737 }
738
739 return enumeratorString;
740}
741
742static
743bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
744{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600745 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
751 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
752 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
753 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
754 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
755 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600756 if(enumerator & (~allFlags))
757 {
758 return false;
759 }
760
761 return true;
762}
763
764static
765std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
766{
767 if(!ValidateEnumerator(enumerator))
768 {
769 return "unrecognized enumerator";
770 }
771
772 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600773 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600774 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600775 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600776 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600777 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600778 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600779 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600780 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600781 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600782 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600783 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600784 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600785 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600786 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600787 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600788 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600789 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600790 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600791 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600792 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600793 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600794 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600795 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600796 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600797 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600798 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600799 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600800 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600801 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600802 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600803 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600804 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600805 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600806 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600807 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600808 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600809 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600810 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600811 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600812 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600813 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600814 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600815 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600816 }
817
818 std::string enumeratorString;
819 for(auto const& string : strings)
820 {
821 enumeratorString += string;
822
823 if(string != strings.back())
824 {
825 enumeratorString += '|';
826 }
827 }
828
829 return enumeratorString;
830}
831
832static
833bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
834{
835 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
836 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
837 VK_QUERY_RESULT_WAIT_BIT |
838 VK_QUERY_RESULT_64_BIT |
839 VK_QUERY_RESULT_DEFAULT);
840 if(enumerator & (~allFlags))
841 {
842 return false;
843 }
844
845 return true;
846}
847
848static
849std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
850{
851 if(!ValidateEnumerator(enumerator))
852 {
853 return "unrecognized enumerator";
854 }
855
856 std::vector<std::string> strings;
857 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
864 }
865 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
866 {
867 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
868 }
869 if(enumerator & VK_QUERY_RESULT_64_BIT)
870 {
871 strings.push_back("VK_QUERY_RESULT_64_BIT");
872 }
873 if(enumerator & VK_QUERY_RESULT_DEFAULT)
874 {
875 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600876 }
877
878 std::string enumeratorString;
879 for(auto const& string : strings)
880 {
881 enumeratorString += string;
882
883 if(string != strings.back())
884 {
885 enumeratorString += '|';
886 }
887 }
888
889 return enumeratorString;
890}
891
892static
893bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
894{
895 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
896 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
897 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
898 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
899 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
900 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
901 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
902 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600903 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600904 if(enumerator & (~allFlags))
905 {
906 return false;
907 }
908
909 return true;
910}
911
912static
913std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
914{
915 if(!ValidateEnumerator(enumerator))
916 {
917 return "unrecognized enumerator";
918 }
919
920 std::vector<std::string> strings;
921 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
928 }
929 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
930 {
931 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
932 }
933 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
936 }
937 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
938 {
939 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
940 }
941 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
944 }
945 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
946 {
947 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
948 }
949 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
950 {
951 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
952 }
953 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
954 {
955 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
956 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600957
958 std::string enumeratorString;
959 for(auto const& string : strings)
960 {
961 enumeratorString += string;
962
963 if(string != strings.back())
964 {
965 enumeratorString += '|';
966 }
967 }
968
969 return enumeratorString;
970}
971
972static
973bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
974{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600975 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
976 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600977 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600978 if(enumerator & (~allFlags))
979 {
980 return false;
981 }
982
983 return true;
984}
985
986static
987std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
988{
989 if(!ValidateEnumerator(enumerator))
990 {
991 return "unrecognized enumerator";
992 }
993
994 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600995 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
996 {
997 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
998 }
999 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1000 {
1001 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1002 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001003 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001004 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001005 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001006 }
1007
1008 std::string enumeratorString;
1009 for(auto const& string : strings)
1010 {
1011 enumeratorString += string;
1012
1013 if(string != strings.back())
1014 {
1015 enumeratorString += '|';
1016 }
1017 }
1018
1019 return enumeratorString;
1020}
1021
1022static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001023bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1024{
1025 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001026 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1027 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001028 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001029 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001030 if(enumerator & (~allFlags))
1031 {
1032 return false;
1033 }
1034
1035 return true;
1036}
1037
1038static
1039std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1040{
1041 if(!ValidateEnumerator(enumerator))
1042 {
1043 return "unrecognized enumerator";
1044 }
1045
1046 std::vector<std::string> strings;
1047 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1050 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1052 {
1053 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1054 }
1055 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1056 {
1057 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1058 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001059 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1060 {
1061 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1062 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001063 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001064 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001065 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001066 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001067
1068 std::string enumeratorString;
1069 for(auto const& string : strings)
1070 {
1071 enumeratorString += string;
1072
1073 if(string != strings.back())
1074 {
1075 enumeratorString += '|';
1076 }
1077 }
1078
1079 return enumeratorString;
1080}
1081
1082static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001083bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001084{
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001085 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1086 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001087 if(enumerator & (~allFlags))
1088 {
1089 return false;
1090 }
1091
1092 return true;
1093}
1094
1095static
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001096std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001097{
1098 if(!ValidateEnumerator(enumerator))
1099 {
1100 return "unrecognized enumerator";
1101 }
1102
1103 std::vector<std::string> strings;
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001104 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001105 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001106 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001107 }
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001108 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001109 {
Courtney Goeltzenleuchter1856d6f2015-09-01 17:30:39 -06001110 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001111 }
1112
1113 std::string enumeratorString;
1114 for(auto const& string : strings)
1115 {
1116 enumeratorString += string;
1117
1118 if(string != strings.back())
1119 {
1120 enumeratorString += '|';
1121 }
1122 }
1123
1124 return enumeratorString;
1125}
1126
1127static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001128bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1129{
1130 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1131 VK_CHANNEL_B_BIT |
1132 VK_CHANNEL_G_BIT |
1133 VK_CHANNEL_R_BIT);
1134 if(enumerator & (~allFlags))
1135 {
1136 return false;
1137 }
1138
1139 return true;
1140}
1141
1142static
1143std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1144{
1145 if(!ValidateEnumerator(enumerator))
1146 {
1147 return "unrecognized enumerator";
1148 }
1149
1150 std::vector<std::string> strings;
1151 if(enumerator & VK_CHANNEL_A_BIT)
1152 {
1153 strings.push_back("VK_CHANNEL_A_BIT");
1154 }
1155 if(enumerator & VK_CHANNEL_B_BIT)
1156 {
1157 strings.push_back("VK_CHANNEL_B_BIT");
1158 }
1159 if(enumerator & VK_CHANNEL_G_BIT)
1160 {
1161 strings.push_back("VK_CHANNEL_G_BIT");
1162 }
1163 if(enumerator & VK_CHANNEL_R_BIT)
1164 {
1165 strings.push_back("VK_CHANNEL_R_BIT");
1166 }
1167
1168 std::string enumeratorString;
1169 for(auto const& string : strings)
1170 {
1171 enumeratorString += string;
1172
1173 if(string != strings.back())
1174 {
1175 enumeratorString += '|';
1176 }
1177 }
1178
1179 return enumeratorString;
1180}
1181
1182static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001183bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001184{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001185 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1186 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1187 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001188 if(enumerator & (~allFlags))
1189 {
1190 return false;
1191 }
1192
1193 return true;
1194}
1195
1196static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001197std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001198{
1199 if(!ValidateEnumerator(enumerator))
1200 {
1201 return "unrecognized enumerator";
1202 }
1203
1204 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001205 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001206 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001207 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1208 }
1209 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1210 {
1211 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1212 }
1213 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1214 {
1215 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001216 }
1217
1218 std::string enumeratorString;
1219 for(auto const& string : strings)
1220 {
1221 enumeratorString += string;
1222
1223 if(string != strings.back())
1224 {
1225 enumeratorString += '|';
1226 }
1227 }
1228
1229 return enumeratorString;
1230}
1231
1232static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001233bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001234{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1236 VK_SHADER_STAGE_FRAGMENT_BIT |
1237 VK_SHADER_STAGE_GEOMETRY_BIT |
1238 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001239 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1240 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001241 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001242 if(enumerator & (~allFlags))
1243 {
1244 return false;
1245 }
1246
1247 return true;
1248}
1249
1250static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001251std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001252{
1253 if(!ValidateEnumerator(enumerator))
1254 {
1255 return "unrecognized enumerator";
1256 }
1257
1258 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001259 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001260 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001261 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001262 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001263 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001264 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001265 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001266 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001267 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001268 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001269 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1270 }
1271 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1272 {
1273 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1274 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001275 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001276 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001277 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001278 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001279 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001280 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001281 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001282 }
1283 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1284 {
1285 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001286 }
1287
1288 std::string enumeratorString;
1289 for(auto const& string : strings)
1290 {
1291 enumeratorString += string;
1292
1293 if(string != strings.back())
1294 {
1295 enumeratorString += '|';
1296 }
1297 }
1298
1299 return enumeratorString;
1300}
1301
1302static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001303bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001304{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001305 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1306 VK_PIPELINE_STAGE_HOST_BIT |
1307 VK_PIPELINE_STAGE_TRANSFER_BIT |
1308 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1309 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1310 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001311 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001312 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001313 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1314 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1315 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001316 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001317 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1318 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1319 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1320 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001321 if(enumerator & (~allFlags))
1322 {
1323 return false;
1324 }
1325
1326 return true;
1327}
1328
1329static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001330std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001331{
1332 if(!ValidateEnumerator(enumerator))
1333 {
1334 return "unrecognized enumerator";
1335 }
1336
1337 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001338 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001339 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001340 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001341 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001342 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001343 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001344 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001345 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001346 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001347 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001348 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001349 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001350 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001351 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001352 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001353 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001354 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001355 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001356 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001357 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001358 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001359 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001360 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001361 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001362 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001363 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001364 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001365 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001366 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001367 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001368 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001369 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001370 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001371 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001372 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001373 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001374 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001375 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001376 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1377 }
1378 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1379 {
1380 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1381 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001382 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001383 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001384 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001385 }
1386 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1387 {
1388 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1389 }
1390 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1391 {
1392 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1393 }
1394 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1395 {
1396 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1397 }
1398 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1399 {
1400 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001401 }
1402
1403 std::string enumeratorString;
1404 for(auto const& string : strings)
1405 {
1406 enumeratorString += string;
1407
1408 if(string != strings.back())
1409 {
1410 enumeratorString += '|';
1411 }
1412 }
1413
1414 return enumeratorString;
1415}
1416
1417static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001418bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001419{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001420 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1421 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1422 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1423 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1424 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001425 if(enumerator & (~allFlags))
1426 {
1427 return false;
1428 }
1429
1430 return true;
1431}
1432
1433static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001434std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001435{
1436 if(!ValidateEnumerator(enumerator))
1437 {
1438 return "unrecognized enumerator";
1439 }
1440
1441 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001442 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001443 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001444 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001445 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001446 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001447 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001448 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001449 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001450 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001451 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001452 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1453 }
1454 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1455 {
1456 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1457 }
1458 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1459 {
1460 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001461 }
1462
1463 std::string enumeratorString;
1464 for(auto const& string : strings)
1465 {
1466 enumeratorString += string;
1467
1468 if(string != strings.back())
1469 {
1470 enumeratorString += '|';
1471 }
1472 }
1473
1474 return enumeratorString;
1475}
1476
1477static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001478bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001479{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001480 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1481 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1482 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_SHADER_READ_BIT |
1484 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1485 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1486 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1487 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1488 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1489 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001490 if(enumerator & (~allFlags))
1491 {
1492 return false;
1493 }
1494
1495 return true;
1496}
1497
1498static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001499std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001500{
1501 if(!ValidateEnumerator(enumerator))
1502 {
1503 return "unrecognized enumerator";
1504 }
1505
1506 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001507 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001508 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001509 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1510 }
1511 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1512 {
1513 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1514 }
1515 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1516 {
1517 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1518 }
1519 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1520 {
1521 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1522 }
1523 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1524 {
1525 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1526 }
1527 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1528 {
1529 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1530 }
1531 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1532 {
1533 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1534 }
1535 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1536 {
1537 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1538 }
1539 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1540 {
1541 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1542 }
1543 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1544 {
1545 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001546 }
1547
1548 std::string enumeratorString;
1549 for(auto const& string : strings)
1550 {
1551 enumeratorString += string;
1552
1553 if(string != strings.back())
1554 {
1555 enumeratorString += '|';
1556 }
1557 }
1558
1559 return enumeratorString;
1560}
1561
1562static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001563bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001564{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001565 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1566 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001567 if(enumerator & (~allFlags))
1568 {
1569 return false;
1570 }
1571
1572 return true;
1573}
1574
1575static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001576std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001577{
1578 if(!ValidateEnumerator(enumerator))
1579 {
1580 return "unrecognized enumerator";
1581 }
1582
1583 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001584 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001585 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001586 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001587 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001588 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001589 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001590 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001591 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001592
1593 std::string enumeratorString;
1594 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001595 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001596 enumeratorString += string;
1597
1598 if(string != strings.back())
1599 {
1600 enumeratorString += '|';
1601 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001602 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001603
1604 return enumeratorString;
1605}
1606
1607static
1608bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1609{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001610 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001611 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001612 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001613 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001614 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001615
1616 return true;
1617}
1618
1619static
1620std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1621{
1622 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001623 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001624 return "unrecognized enumerator";
1625 }
1626
1627 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001628 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001629 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001630 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001631 }
1632
1633 std::string enumeratorString;
1634 for(auto const& string : strings)
1635 {
1636 enumeratorString += string;
1637
1638 if(string != strings.back())
1639 {
1640 enumeratorString += '|';
1641 }
1642 }
1643
1644 return enumeratorString;
1645}
1646
1647static
1648bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1649{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001650 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1651 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001652 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1653 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1654 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1655 if(enumerator & (~allFlags))
1656 {
1657 return false;
1658 }
1659
1660 return true;
1661}
1662
1663static
1664std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1665{
1666 if(!ValidateEnumerator(enumerator))
1667 {
1668 return "unrecognized enumerator";
1669 }
1670
1671 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001672 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1673 {
1674 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1675 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001676 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1677 {
1678 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1679 }
1680 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1681 {
1682 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1683 }
1684 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1685 {
1686 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1687 }
1688 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1689 {
1690 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1691 }
1692
1693 std::string enumeratorString;
1694 for(auto const& string : strings)
1695 {
1696 enumeratorString += string;
1697
1698 if(string != strings.back())
1699 {
1700 enumeratorString += '|';
1701 }
1702 }
1703
1704 return enumeratorString;
1705}
1706
1707static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001708bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001709{
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001710 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001711 if(enumerator & (~allFlags))
1712 {
1713 return false;
1714 }
1715
1716 return true;
1717}
1718
1719static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001720std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001721{
1722 if(!ValidateEnumerator(enumerator))
1723 {
1724 return "unrecognized enumerator";
1725 }
1726
1727 std::vector<std::string> strings;
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001728 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001729 {
Courtney Goeltzenleuchterb88d01e2015-09-11 11:40:48 -06001730 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001731 }
1732
1733 std::string enumeratorString;
1734 for(auto const& string : strings)
1735 {
1736 enumeratorString += string;
1737
1738 if(string != strings.back())
1739 {
1740 enumeratorString += '|';
1741 }
1742 }
1743
1744 return enumeratorString;
1745}
1746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001747static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001748bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001749{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001750 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1751 VK_IMAGE_ASPECT_STENCIL_BIT |
1752 VK_IMAGE_ASPECT_DEPTH_BIT |
1753 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001754 if(enumerator & (~allFlags))
1755 {
1756 return false;
1757 }
1758
1759 return true;
1760}
1761
1762static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001763std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001764{
1765 if(!ValidateEnumerator(enumerator))
1766 {
1767 return "unrecognized enumerator";
1768 }
1769
1770 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001771 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001772 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001773 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1774 }
1775 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1776 {
1777 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1778 }
1779 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1780 {
1781 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1782 }
1783 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1784 {
1785 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1786 }
1787
1788 std::string enumeratorString;
1789 for(auto const& string : strings)
1790 {
1791 enumeratorString += string;
1792
1793 if(string != strings.back())
1794 {
1795 enumeratorString += '|';
1796 }
1797 }
1798
1799 return enumeratorString;
1800}
1801
1802static
1803bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1804{
1805 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1806 if(enumerator & (~allFlags))
1807 {
1808 return false;
1809 }
1810
1811 return true;
1812}
1813
1814static
1815std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1816{
1817 if(!ValidateEnumerator(enumerator))
1818 {
1819 return "unrecognized enumerator";
1820 }
1821
1822 std::vector<std::string> strings;
1823 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1824 {
1825 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001826 }
1827
1828 std::string enumeratorString;
1829 for(auto const& string : strings)
1830 {
1831 enumeratorString += string;
1832
1833 if(string != strings.back())
1834 {
1835 enumeratorString += '|';
1836 }
1837 }
1838
1839 return enumeratorString;
1840}
1841
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001842VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1843 const VkInstanceCreateInfo* pCreateInfo,
1844 VkInstance* pInstance)
1845{
1846 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1847 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1848
1849 if (result == VK_SUCCESS) {
1850 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1851 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001852 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001853
1854 InitParamChecker(data);
1855 }
1856
1857 return result;
1858}
1859
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001860VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001861 VkInstance instance)
1862{
1863 // Grab the key before the instance is destroyed.
1864 dispatch_key key = get_dispatch_key(instance);
1865 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001866 pTable->DestroyInstance(instance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001867
1868 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001869 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1870 while (my_data->logging_callback.size() > 0) {
1871 VkDbgMsgCallback callback = my_data->logging_callback.back();
1872 layer_destroy_msg_callback(my_data->report_data, callback);
1873 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001874 }
1875
1876 layer_debug_report_destroy_instance(mid(instance));
1877 layer_data_map.erase(pTable);
1878
1879 pc_instance_table_map.erase(key);
1880 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001881}
1882
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001883bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001884 VkInstance instance,
1885 uint32_t* pPhysicalDeviceCount,
1886 VkPhysicalDevice* pPhysicalDevices,
1887 VkResult result)
1888{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001889
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001890 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001891 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001892 }
1893
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001894 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001895 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001896 }
1897
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001898 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001899 {
1900 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001901 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001903 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001904
1905 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001906}
1907
1908VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1909 VkInstance instance,
1910 uint32_t* pPhysicalDeviceCount,
1911 VkPhysicalDevice* pPhysicalDevices)
1912{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001913 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1914
1915 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1916
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001917 return result;
1918}
1919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001920bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001921 VkPhysicalDevice physicalDevice,
1922 VkPhysicalDeviceFeatures* pFeatures,
1923 VkResult result)
1924{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001925
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001926 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001927 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001928 }
1929
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001930 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001931 {
1932 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001933 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1934 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001935 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001936
1937 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001938}
1939
1940VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1941 VkPhysicalDevice physicalDevice,
1942 VkPhysicalDeviceFeatures* pFeatures)
1943{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001944 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1945
1946 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1947
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001948 return result;
1949}
1950
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001951bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001952 VkPhysicalDevice physicalDevice,
1953 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001954 VkFormatProperties* pFormatProperties,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001955 VkResult result)
1956{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001957
1958 if(format < VK_FORMAT_BEGIN_RANGE ||
1959 format > VK_FORMAT_END_RANGE)
1960 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001961 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001962 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001963 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001964 }
1965
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001966 if(pFormatProperties != 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 {
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001972 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001973 log_msg(mdd(physicalDevice), 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
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001980VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001981 VkPhysicalDevice physicalDevice,
1982 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001983 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001984{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001985 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001987 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
1988
1989 return result;
1990}
1991
1992bool PostGetPhysicalDeviceImageFormatProperties(
1993 VkPhysicalDevice physicalDevice,
1994 VkFormat format,
1995 VkImageType type,
1996 VkImageTiling tiling,
1997 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001998 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001999 VkImageFormatProperties* pImageFormatProperties,
2000 VkResult result)
2001{
2002
2003 if(format < VK_FORMAT_BEGIN_RANGE ||
2004 format > VK_FORMAT_END_RANGE)
2005 {
2006 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2007 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2008 return false;
2009 }
2010
2011 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2012 type > VK_IMAGE_TYPE_END_RANGE)
2013 {
2014 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2015 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2016 return false;
2017 }
2018
2019 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2020 tiling > VK_IMAGE_TILING_END_RANGE)
2021 {
2022 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2023 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2024 return false;
2025 }
2026
2027
2028 if(pImageFormatProperties != nullptr)
2029 {
2030 }
2031
2032 if(result < VK_SUCCESS)
2033 {
2034 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2035 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2036 return false;
2037 }
2038
2039 return true;
2040}
2041
2042VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2043 VkPhysicalDevice physicalDevice,
2044 VkFormat format,
2045 VkImageType type,
2046 VkImageTiling tiling,
2047 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002048 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002049 VkImageFormatProperties* pImageFormatProperties)
2050{
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002051 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002052
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06002053 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002054
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002055 return result;
2056}
2057
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002058bool PostGetPhysicalDeviceProperties(
2059 VkPhysicalDevice physicalDevice,
2060 VkPhysicalDeviceProperties* pProperties,
2061 VkResult result)
2062{
2063
2064 if(pProperties != nullptr)
2065 {
2066 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2067 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2068 {
2069 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2070 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2071 return false;
2072 }
2073 }
2074
2075 if(result < VK_SUCCESS)
2076 {
2077 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2078 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2079 return false;
2080 }
2081
2082 return true;
2083}
2084
2085VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2086 VkPhysicalDevice physicalDevice,
2087 VkPhysicalDeviceProperties* pProperties)
2088{
2089 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2090
2091 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2092
2093 return result;
2094}
2095
Cody Northropef72e2a2015-08-03 17:04:53 -06002096bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002097 VkPhysicalDevice physicalDevice,
2098 uint32_t* pCount,
Cody Northropef72e2a2015-08-03 17:04:53 -06002099 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002100 VkResult result)
2101{
2102
Cody Northropef72e2a2015-08-03 17:04:53 -06002103 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002104 {
2105 }
2106
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002107 if(pQueueProperties != nullptr)
2108 {
2109 }
2110
2111 if(result < VK_SUCCESS)
2112 {
Cody Northropef72e2a2015-08-03 17:04:53 -06002113 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002114 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2115 return false;
2116 }
2117
2118 return true;
2119}
2120
2121VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2122 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06002123 uint32_t* pCount,
2124 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002125{
Cody Northropef72e2a2015-08-03 17:04:53 -06002126 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002127
Cody Northropef72e2a2015-08-03 17:04:53 -06002128 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002129
2130 return result;
2131}
2132
2133bool PostGetPhysicalDeviceMemoryProperties(
2134 VkPhysicalDevice physicalDevice,
2135 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2136 VkResult result)
2137{
2138
2139 if(pMemoryProperties != nullptr)
2140 {
2141 }
2142
2143 if(result < VK_SUCCESS)
2144 {
2145 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2146 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2147 return false;
2148 }
2149
2150 return true;
2151}
2152
2153VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2154 VkPhysicalDevice physicalDevice,
2155 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2156{
2157 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2158
2159 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2160
2161 return result;
2162}
2163
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2165 VkPhysicalDevice physicalDevice,
2166 const VkDeviceCreateInfo* pCreateInfo,
2167 VkDevice* pDevice)
2168{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002169 /*
2170 * NOTE: The loader fills in the ICD's device object in *pDevice.
2171 * Use that object to get the dispatch table.
2172 *
2173 * NOTE: We do not validate physicalDevice or any dispatchable
2174 * object as the first parameter. We couldn't get here if it was wrong!
2175 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002176 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002177 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2178 if(result == VK_SUCCESS)
2179 {
2180 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2181 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2182 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2183 }
2184
2185 return result;
2186}
2187
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002188VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002189 VkDevice device)
2190{
2191 layer_debug_report_destroy_device(device);
2192
2193 dispatch_key key = get_dispatch_key(device);
2194#if DISPATCH_MAP_DEBUG
2195 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2196#endif
2197
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002198 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002199 pc_device_table_map.erase(key);
2200 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002201}
2202
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002203bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002205 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002206 uint32_t queueIndex,
2207 VkQueue* pQueue,
2208 VkResult result)
2209{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002210
2211
2212
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002213 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002214 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002215 }
2216
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002217 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002218 {
2219 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2221 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002223
2224 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002225}
2226
2227VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2228 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002229 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002230 uint32_t queueIndex,
2231 VkQueue* pQueue)
2232{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002233 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002234
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002235 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002236
2237 return result;
2238}
2239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002240bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002241 VkQueue queue,
2242 const VkCmdBuffer* pCmdBuffers)
2243{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002244 if(pCmdBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002245 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002246 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002247
2248 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002249}
2250
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002251bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002252 VkQueue queue,
2253 uint32_t cmdBufferCount,
2254 VkFence fence,
2255 VkResult result)
2256{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002257
2258
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002259
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002260 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002261 {
2262 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002263 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2264 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002265 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002266
2267 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002268}
2269
2270VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2271 VkQueue queue,
2272 uint32_t cmdBufferCount,
2273 const VkCmdBuffer* pCmdBuffers,
2274 VkFence fence)
2275{
2276 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002277
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002278 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2279
2280 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2281
2282 return result;
2283}
2284
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002285bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286 VkQueue queue,
2287 VkResult result)
2288{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002290 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002291 {
2292 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002293 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2294 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002295 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002296
2297 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002298}
2299
2300VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2301 VkQueue queue)
2302{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2304
2305 PostQueueWaitIdle(queue, result);
2306
2307 return result;
2308}
2309
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002310bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002311 VkDevice device,
2312 VkResult result)
2313{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002314
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002315 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002316 {
2317 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002318 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2319 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002320 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002321
2322 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002323}
2324
2325VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2326 VkDevice device)
2327{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002328 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2329
2330 PostDeviceWaitIdle(device, result);
2331
2332 return result;
2333}
2334
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002335bool PreAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002336 VkDevice device,
2337 const VkMemoryAllocInfo* pAllocInfo)
2338{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002339 if(pAllocInfo != nullptr)
2340 {
2341 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002342 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002344 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002345 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002346 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002347 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002348
2349 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002350}
2351
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002352bool PostAllocMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002353 VkDevice device,
2354 VkDeviceMemory* pMem,
2355 VkResult result)
2356{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002357
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002358 if(pMem != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002359 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002360 }
2361
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002362 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363 {
2364 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002365 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2366 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002367 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002368
2369 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002370}
2371
2372VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2373 VkDevice device,
2374 const VkMemoryAllocInfo* pAllocInfo,
2375 VkDeviceMemory* pMem)
2376{
2377 PreAllocMemory(device, pAllocInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002378
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002379 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2380
2381 PostAllocMemory(device, pMem, result);
2382
2383 return result;
2384}
2385
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002386bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002387 VkDevice device,
2388 VkDeviceMemory mem,
2389 VkDeviceSize offset,
2390 VkDeviceSize size,
2391 VkMemoryMapFlags flags,
2392 void** ppData,
2393 VkResult result)
2394{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002395
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002396
2397
2398
2399
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002400 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002401 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002402 }
2403
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002404 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002405 {
2406 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002407 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2408 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002409 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002410
2411 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002412}
2413
2414VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2415 VkDevice device,
2416 VkDeviceMemory mem,
2417 VkDeviceSize offset,
2418 VkDeviceSize size,
2419 VkMemoryMapFlags flags,
2420 void** ppData)
2421{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002422 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2423
2424 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2425
2426 return result;
2427}
2428
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002429bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 VkDevice device,
2431 const VkMappedMemoryRange* pMemRanges)
2432{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002433 if(pMemRanges != nullptr)
2434 {
2435 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002436 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002437 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002438 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002439 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002440 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002441 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002442
2443 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002444}
2445
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002446bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002447 VkDevice device,
2448 uint32_t memRangeCount,
2449 VkResult result)
2450{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002451
2452
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002453 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002454 {
2455 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002456 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2457 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002458 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002459
2460 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002461}
2462
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002463VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002464 VkDevice device,
2465 uint32_t memRangeCount,
2466 const VkMappedMemoryRange* pMemRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002467{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002469
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002470 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002471
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002472 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2473
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002474 return result;
2475}
2476
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002477bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002478 VkDevice device,
2479 const VkMappedMemoryRange* pMemRanges)
2480{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002481 if(pMemRanges != nullptr)
2482 {
2483 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002484 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002485 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002486 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002488 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002489 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002490
2491 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002492}
2493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002494bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002495 VkDevice device,
2496 uint32_t memRangeCount,
2497 VkResult result)
2498{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002499
2500
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002501 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002502 {
2503 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002504 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2505 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002506 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002507
2508 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002509}
2510
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002511VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002512 VkDevice device,
2513 uint32_t memRangeCount,
2514 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002515{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002516 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002518 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002519
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002520 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2521
Tony Barbour859ceab2015-04-16 19:23:13 -06002522 return result;
2523}
2524
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002525bool PostGetDeviceMemoryCommitment(
2526 VkDevice device,
2527 VkDeviceMemory memory,
2528 VkDeviceSize* pCommittedMemoryInBytes,
2529 VkResult result)
2530{
2531
2532
2533 if(pCommittedMemoryInBytes != nullptr)
2534 {
2535 }
2536
2537 if(result < VK_SUCCESS)
2538 {
2539 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2541 return false;
2542 }
2543
2544 return true;
2545}
2546
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002547VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002548 VkDevice device,
2549 VkDeviceMemory memory,
2550 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002551{
2552 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2553
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002554 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2555
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002556 return result;
2557}
2558
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002559bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002560 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002561 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002562 VkDeviceMemory mem,
2563 VkDeviceSize memOffset,
2564 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002565{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002566
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002567
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002568
2569
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002570 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002571 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2574 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002575 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002576
2577 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002578}
2579
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002580VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002581 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002582 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002583 VkDeviceMemory mem,
2584 VkDeviceSize memOffset)
2585{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002586 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002587
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002588 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002589
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002590 return result;
2591}
2592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002593bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002594 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002595 VkImage image,
2596 VkDeviceMemory mem,
2597 VkDeviceSize memOffset,
2598 VkResult result)
2599{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002600
2601
2602
2603
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002604 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002605 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002606 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2607 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2608 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002609 }
2610
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002611 return true;
2612}
2613
2614VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2615 VkDevice device,
2616 VkImage image,
2617 VkDeviceMemory mem,
2618 VkDeviceSize memOffset)
2619{
2620 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2621
2622 PostBindImageMemory(device, image, mem, memOffset, result);
2623
2624 return result;
2625}
2626
2627bool PostGetBufferMemoryRequirements(
2628 VkDevice device,
2629 VkBuffer buffer,
2630 VkMemoryRequirements* pMemoryRequirements,
2631 VkResult result)
2632{
2633
2634
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002635 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002636 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002637 }
2638
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002639 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002640 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002641 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2642 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2643 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002644 }
2645
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002646 return true;
2647}
2648
2649VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2650 VkDevice device,
2651 VkBuffer buffer,
2652 VkMemoryRequirements* pMemoryRequirements)
2653{
2654 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2655
2656 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2657
2658 return result;
2659}
2660
2661bool PostGetImageMemoryRequirements(
2662 VkDevice device,
2663 VkImage image,
2664 VkMemoryRequirements* pMemoryRequirements,
2665 VkResult result)
2666{
2667
2668
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002669 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002670 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 }
2672
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002673 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002674 {
2675 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2676 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2677 return false;
2678 }
2679
2680 return true;
2681}
2682
2683VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2684 VkDevice device,
2685 VkImage image,
2686 VkMemoryRequirements* pMemoryRequirements)
2687{
2688 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2689
2690 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2691
2692 return result;
2693}
2694
2695bool PostGetImageSparseMemoryRequirements(
2696 VkDevice device,
2697 VkImage image,
2698 uint32_t* pNumRequirements,
2699 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2700 VkResult result)
2701{
2702
2703
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002704 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002706 }
2707
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002708 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002709 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002710 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2711 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2712 {
2713 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002714 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002715 return false;
2716 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002717 }
2718
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002719 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002720 {
2721 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2723 return false;
2724 }
2725
2726 return true;
2727}
2728
2729VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2730 VkDevice device,
2731 VkImage image,
2732 uint32_t* pNumRequirements,
2733 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2734{
2735 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2736
2737 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2738
2739 return result;
2740}
2741
2742bool PostGetPhysicalDeviceSparseImageFormatProperties(
2743 VkPhysicalDevice physicalDevice,
2744 VkFormat format,
2745 VkImageType type,
2746 uint32_t samples,
2747 VkImageUsageFlags usage,
2748 VkImageTiling tiling,
2749 uint32_t* pNumProperties,
2750 VkSparseImageFormatProperties* pProperties,
2751 VkResult result)
2752{
2753
2754 if(format < VK_FORMAT_BEGIN_RANGE ||
2755 format > VK_FORMAT_END_RANGE)
2756 {
2757 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002758 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002759 return false;
2760 }
2761
2762 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2763 type > VK_IMAGE_TYPE_END_RANGE)
2764 {
2765 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002766 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002767 return false;
2768 }
2769
2770
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002771
2772 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2773 tiling > VK_IMAGE_TILING_END_RANGE)
2774 {
2775 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002776 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002777 return false;
2778 }
2779
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002780 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002781 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002782 }
2783
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002784 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002785 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002786 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2787 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2788 {
2789 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002790 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002791 return false;
2792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002793 }
2794
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002795 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002796 {
2797 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2798 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2799 return false;
2800 }
2801
2802 return true;
2803}
2804
2805VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2806 VkPhysicalDevice physicalDevice,
2807 VkFormat format,
2808 VkImageType type,
2809 uint32_t samples,
2810 VkImageUsageFlags usage,
2811 VkImageTiling tiling,
2812 uint32_t* pNumProperties,
2813 VkSparseImageFormatProperties* pProperties)
2814{
2815 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2816
2817 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2818
2819 return result;
2820}
2821
2822bool PreQueueBindSparseBufferMemory(
2823 VkQueue queue,
2824 const VkSparseMemoryBindInfo* pBindInfo)
2825{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002826 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002827 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002828 }
2829
2830 return true;
2831}
2832
2833bool PostQueueBindSparseBufferMemory(
2834 VkQueue queue,
2835 VkBuffer buffer,
2836 uint32_t numBindings,
2837 VkResult result)
2838{
2839
2840
2841
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002842 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002843 {
2844 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2845 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2846 return false;
2847 }
2848
2849 return true;
2850}
2851
2852VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2853 VkQueue queue,
2854 VkBuffer buffer,
2855 uint32_t numBindings,
2856 const VkSparseMemoryBindInfo* pBindInfo)
2857{
2858 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2859
2860 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2861
2862 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2863
2864 return result;
2865}
2866
2867bool PreQueueBindSparseImageOpaqueMemory(
2868 VkQueue queue,
2869 const VkSparseMemoryBindInfo* pBindInfo)
2870{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002871 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002872 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002873 }
2874
2875 return true;
2876}
2877
2878bool PostQueueBindSparseImageOpaqueMemory(
2879 VkQueue queue,
2880 VkImage image,
2881 uint32_t numBindings,
2882 VkResult result)
2883{
2884
2885
2886
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002887 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002888 {
2889 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2890 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2891 return false;
2892 }
2893
2894 return true;
2895}
2896
2897VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2898 VkQueue queue,
2899 VkImage image,
2900 uint32_t numBindings,
2901 const VkSparseMemoryBindInfo* pBindInfo)
2902{
2903 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2904
2905 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2906
2907 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2908
2909 return result;
2910}
2911
2912bool PreQueueBindSparseImageMemory(
2913 VkQueue queue,
2914 const VkSparseImageMemoryBindInfo* pBindInfo)
2915{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002916 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002917 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002918 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2919 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2920 {
2921 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002922 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002923 return false;
2924 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002925 }
2926
2927 return true;
2928}
2929
2930bool PostQueueBindSparseImageMemory(
2931 VkQueue queue,
2932 VkImage image,
2933 uint32_t numBindings,
2934 VkResult result)
2935{
2936
2937
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002938
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002939 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002940 {
2941 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002942 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2943 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002944 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002945
2946 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002947}
2948
2949VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002950 VkQueue queue,
2951 VkImage image,
2952 uint32_t numBindings,
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002953 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002954{
2955 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002956
Mark Lobodzinski83d4e6a2015-07-03 15:58:09 -06002957 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002958
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002959 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002960
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002961 return result;
2962}
2963
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002964bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002965 VkDevice device,
2966 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002967{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002968 if(pCreateInfo != nullptr)
2969 {
2970 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002971 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002972 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002973 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002974 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002975 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002976 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002977
2978 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002979}
2980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002981bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002982 VkDevice device,
2983 VkFence* pFence,
2984 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002985{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002986
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002987 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002988 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002989 }
2990
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002991 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002992 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002993 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002994 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2995 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002996 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002997
2998 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002999}
3000
3001VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3002 VkDevice device,
3003 const VkFenceCreateInfo* pCreateInfo,
3004 VkFence* pFence)
3005{
3006 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003007
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003008 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3009
3010 PostCreateFence(device, pFence, result);
3011
3012 return result;
3013}
3014
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003015bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003016 VkDevice device,
3017 const VkFence* pFences)
3018{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003019 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003020 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003021 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003022
3023 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003024}
3025
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003026bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003027 VkDevice device,
3028 uint32_t fenceCount,
3029 VkResult result)
3030{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003031
3032
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003033 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003034 {
3035 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3037 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039
3040 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003041}
3042
3043VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3044 VkDevice device,
3045 uint32_t fenceCount,
3046 const VkFence* pFences)
3047{
3048 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003049
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003050 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3051
3052 PostResetFences(device, fenceCount, result);
3053
3054 return result;
3055}
3056
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003057bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003058 VkDevice device,
3059 VkFence fence,
3060 VkResult result)
3061{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003062
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003063
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003064 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003065 {
3066 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3068 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003069 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003070
3071 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003072}
3073
3074VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3075 VkDevice device,
3076 VkFence fence)
3077{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003078 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3079
3080 PostGetFenceStatus(device, fence, result);
3081
3082 return result;
3083}
3084
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003085bool PreWaitForFences(
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 PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003097 VkDevice device,
3098 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003099 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003100 uint64_t timeout,
3101 VkResult result)
3102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003103
3104
3105
3106
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003107 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003108 {
3109 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3111 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003112 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003113
3114 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003115}
3116
3117VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3118 VkDevice device,
3119 uint32_t fenceCount,
3120 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06003121 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003122 uint64_t timeout)
3123{
3124 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3127
3128 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3129
3130 return result;
3131}
3132
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003133bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003134 VkDevice device,
3135 const VkSemaphoreCreateInfo* pCreateInfo)
3136{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003137 if(pCreateInfo != nullptr)
3138 {
3139 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003142 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003144 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003145 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003146
3147 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003148}
3149
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003150bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003151 VkDevice device,
3152 VkSemaphore* pSemaphore,
3153 VkResult result)
3154{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003155
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003156 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003157 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003158 }
3159
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003160 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003161 {
3162 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3164 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003165 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003166
3167 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003168}
3169
3170VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3171 VkDevice device,
3172 const VkSemaphoreCreateInfo* pCreateInfo,
3173 VkSemaphore* pSemaphore)
3174{
3175 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003176
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003177 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3178
3179 PostCreateSemaphore(device, pSemaphore, result);
3180
3181 return result;
3182}
3183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003184bool PostQueueSignalSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003185 VkQueue queue,
3186 VkSemaphore semaphore,
3187 VkResult result)
3188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003189
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003191 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003192 {
3193 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003194 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003196 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003197
3198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003199}
3200
3201VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3202 VkQueue queue,
3203 VkSemaphore semaphore)
3204{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003205 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3206
3207 PostQueueSignalSemaphore(queue, semaphore, result);
3208
3209 return result;
3210}
3211
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003212bool PostQueueWaitSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003213 VkQueue queue,
3214 VkSemaphore semaphore,
3215 VkResult result)
3216{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003217
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003219 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003220 {
3221 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003222 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003224 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003225
3226 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003227}
3228
3229VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3230 VkQueue queue,
3231 VkSemaphore semaphore)
3232{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003233 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3234
3235 PostQueueWaitSemaphore(queue, semaphore, result);
3236
3237 return result;
3238}
3239
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003240bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003241 VkDevice device,
3242 const VkEventCreateInfo* pCreateInfo)
3243{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003244 if(pCreateInfo != nullptr)
3245 {
3246 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003248 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003249 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003251 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003252 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003253
3254 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003255}
3256
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003257bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003258 VkDevice device,
3259 VkEvent* pEvent,
3260 VkResult result)
3261{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003262
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003263 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003265 }
3266
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003267 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003268 {
3269 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003270 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3271 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003272 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003273
3274 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003275}
3276
3277VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3278 VkDevice device,
3279 const VkEventCreateInfo* pCreateInfo,
3280 VkEvent* pEvent)
3281{
3282 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003283
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003284 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3285
3286 PostCreateEvent(device, pEvent, result);
3287
3288 return result;
3289}
3290
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003291bool PostGetEventStatus(
3292 VkDevice device,
3293 VkEvent event,
3294 VkResult result)
3295{
3296
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003297
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003298 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003299 {
3300 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3302 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003303 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003304
3305 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003306}
3307
3308VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3309 VkDevice device,
3310 VkEvent event)
3311{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003312 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3313
3314 PostGetEventStatus(device, event, result);
3315
3316 return result;
3317}
3318
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003319bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003320 VkDevice device,
3321 VkEvent event,
3322 VkResult result)
3323{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003324
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003325
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003326 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003327 {
3328 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003329 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3330 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003332
3333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334}
3335
3336VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3337 VkDevice device,
3338 VkEvent event)
3339{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003340 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3341
3342 PostSetEvent(device, event, result);
3343
3344 return result;
3345}
3346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003347bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348 VkDevice device,
3349 VkEvent event,
3350 VkResult result)
3351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003352
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003354 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003355 {
3356 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003357 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3358 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003359 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003360
3361 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003362}
3363
3364VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3365 VkDevice device,
3366 VkEvent event)
3367{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003368 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3369
3370 PostResetEvent(device, event, result);
3371
3372 return result;
3373}
3374
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003375bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003376 VkDevice device,
3377 const VkQueryPoolCreateInfo* pCreateInfo)
3378{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003379 if(pCreateInfo != nullptr)
3380 {
3381 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003382 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003384 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003385 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003386 }
3387 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3388 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3389 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003390 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003391 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003392 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003393 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003394 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003395
3396 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003397}
3398
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003399bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003400 VkDevice device,
3401 VkQueryPool* pQueryPool,
3402 VkResult result)
3403{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003404
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003405 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003407 }
3408
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003409 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003410 {
3411 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003412 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3413 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003414 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003415
3416 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003417}
3418
3419VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3420 VkDevice device,
3421 const VkQueryPoolCreateInfo* pCreateInfo,
3422 VkQueryPool* pQueryPool)
3423{
3424 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003425
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003426 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3427
3428 PostCreateQueryPool(device, pQueryPool, result);
3429
3430 return result;
3431}
3432
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003433bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434 VkDevice device,
3435 VkQueryPool queryPool,
3436 uint32_t startQuery,
3437 uint32_t queryCount,
3438 size_t* pDataSize,
3439 void* pData,
3440 VkQueryResultFlags flags,
3441 VkResult result)
3442{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003443
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003444
3445
3446
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003447 if(pDataSize != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003449 }
3450
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003451 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003452 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003453 }
3454
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003455
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003456 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 {
3458 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003459 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3460 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003461 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003462
3463 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003464}
3465
3466VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3467 VkDevice device,
3468 VkQueryPool queryPool,
3469 uint32_t startQuery,
3470 uint32_t queryCount,
3471 size_t* pDataSize,
3472 void* pData,
3473 VkQueryResultFlags flags)
3474{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003475 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3476
3477 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3478
3479 return result;
3480}
3481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003482bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003483 VkDevice device,
3484 const VkBufferCreateInfo* pCreateInfo)
3485{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003486 if(pCreateInfo != nullptr)
3487 {
3488 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003489 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003491 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003492 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003493 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003494 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3495 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003498 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003500 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003501 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003502 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003503 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003504 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003505
3506 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003507}
3508
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003509bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003510 VkDevice device,
3511 VkBuffer* pBuffer,
3512 VkResult result)
3513{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003514
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003515 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003516 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003517 }
3518
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003519 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003520 {
3521 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3523 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003524 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003525
3526 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003527}
3528
3529VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3530 VkDevice device,
3531 const VkBufferCreateInfo* pCreateInfo,
3532 VkBuffer* pBuffer)
3533{
3534 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003535
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003536 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3537
3538 PostCreateBuffer(device, pBuffer, result);
3539
3540 return result;
3541}
3542
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003543bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003544 VkDevice device,
3545 const VkBufferViewCreateInfo* pCreateInfo)
3546{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003547 if(pCreateInfo != nullptr)
3548 {
3549 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003550 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003551 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003552 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003553 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003554 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003555 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3556 pCreateInfo->format > VK_FORMAT_END_RANGE)
3557 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003558 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003559 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003560 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003561 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003562 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003563
3564 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003565}
3566
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003567bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003568 VkDevice device,
3569 VkBufferView* pView,
3570 VkResult result)
3571{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003574 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003575 }
3576
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003577 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003578 {
3579 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3581 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003582 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003583
3584 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003585}
3586
3587VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3588 VkDevice device,
3589 const VkBufferViewCreateInfo* pCreateInfo,
3590 VkBufferView* pView)
3591{
3592 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003593
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003594 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3595
3596 PostCreateBufferView(device, pView, result);
3597
3598 return result;
3599}
3600
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003601bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003602 VkDevice device,
3603 const VkImageCreateInfo* pCreateInfo)
3604{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003605 if(pCreateInfo != nullptr)
3606 {
3607 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003608 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003610 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003611 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003612 }
3613 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3614 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3615 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003617 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003618 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003619 }
3620 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3621 pCreateInfo->format > VK_FORMAT_END_RANGE)
3622 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003624 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003625 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003626 }
3627 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3628 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003631 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003634 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3635 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003636 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003637 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3638 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003639 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003640 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003641 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003642 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003643 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003644 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003645
3646 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003647}
3648
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003649bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003650 VkDevice device,
3651 VkImage* pImage,
3652 VkResult result)
3653{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003654
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003655 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003656 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003657 }
3658
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003659 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003660 {
3661 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003662 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3663 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003664 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003665
3666 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003667}
3668
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003669VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3670 VkDevice device,
3671 const VkImageCreateInfo* pCreateInfo,
3672 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003673{
3674 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003675
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003676 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3677
3678 PostCreateImage(device, pImage, result);
3679
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003680 return result;
3681}
3682
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003683bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003684 VkDevice device,
3685 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003686{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003687 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003688 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003689 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3690 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3691 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003693 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003694 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003695 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003696 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003697
3698 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003699}
3700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003701bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003702 VkDevice device,
3703 VkImage image,
3704 VkSubresourceLayout* pLayout,
3705 VkResult result)
3706{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003707
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003708
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003709 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003710 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003711 }
3712
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003713 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003714 {
3715 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3717 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003718 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003719
3720 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003721}
3722
3723VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3724 VkDevice device,
3725 VkImage image,
3726 const VkImageSubresource* pSubresource,
3727 VkSubresourceLayout* pLayout)
3728{
3729 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003730
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003731 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3732
3733 PostGetImageSubresourceLayout(device, image, pLayout, result);
3734
3735 return result;
3736}
3737
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003738bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003739 VkDevice device,
3740 const VkImageViewCreateInfo* pCreateInfo)
3741{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003742 if(pCreateInfo != nullptr)
3743 {
3744 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003745 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003746 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003748 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003749 }
3750 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3751 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3752 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003754 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003755 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003756 }
3757 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3758 pCreateInfo->format > VK_FORMAT_END_RANGE)
3759 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003760 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003763 }
3764 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3765 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3766 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003767 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003768 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003769 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003770 }
3771 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3772 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3773 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003775 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003776 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003777 }
3778 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3779 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3780 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003781 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003782 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003783 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003784 }
3785 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3786 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3787 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003789 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003790 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003791 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003792 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003793
3794 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003795}
3796
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003797bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003798 VkDevice device,
3799 VkImageView* pView,
3800 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003801{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003802
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003803 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003804 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003805 }
3806
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003807 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003808 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003809 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003810 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3811 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003812 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003813
3814 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003815}
3816
3817VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3818 VkDevice device,
3819 const VkImageViewCreateInfo* pCreateInfo,
3820 VkImageView* pView)
3821{
3822 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003823
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003824 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3825
3826 PostCreateImageView(device, pView, result);
3827
3828 return result;
3829}
3830
Michael Lentine6715e522015-09-15 14:59:14 -05003831bool PreCreateShaderModule(
3832 VkDevice device,
3833 const VkShaderModuleCreateInfo* pCreateInfo)
3834{
3835 if(pCreateInfo) {
3836 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3838 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3839 return false;
3840 }
3841 if(!pCreateInfo->pCode) {
3842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3843 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3844 return false;
3845 }
3846 } else {
3847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3848 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3849 return false;
3850 }
3851
3852 return true;
3853}
3854
3855bool PostCreateShaderModule(
3856 VkDevice device,
3857 VkShaderModule* pShaderModule,
3858 VkResult result)
3859{
3860 if(result < VK_SUCCESS) {
3861 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3862 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3863 return false;
3864 }
3865
3866 return true;
3867}
3868
3869VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3870 VkDevice device,
3871 const VkShaderModuleCreateInfo* pCreateInfo,
3872 VkShaderModule* pShaderModule)
3873{
3874 PreCreateShaderModule(device, pCreateInfo);
3875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3876 PostCreateShaderModule(device, pShaderModule, result);
3877 return result;
3878}
3879
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003880bool PreCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003881 VkDevice device,
3882 const VkShaderCreateInfo* pCreateInfo)
3883{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003884 if(pCreateInfo != nullptr)
3885 {
3886 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003887 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003889 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003890 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003891 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003892 if(pCreateInfo->pName != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003893 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003894 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003895 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003896
3897 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003898}
3899
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003900bool PostCreateShader(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003901 VkDevice device,
3902 VkShader* pShader,
3903 VkResult result)
3904{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003905
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003906 if(pShader != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003907 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003908 }
3909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003910 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003911 {
3912 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3914 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003916
3917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003918}
3919
3920VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3921 VkDevice device,
3922 const VkShaderCreateInfo* pCreateInfo,
3923 VkShader* pShader)
3924{
3925 PreCreateShader(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003927 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3928
3929 PostCreateShader(device, pShader, result);
3930
3931 return result;
3932}
3933
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003934bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003935 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003936 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003937{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003938 if(pCreateInfo != nullptr)
3939 {
3940 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003941 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003943 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003945 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003946 if(pCreateInfo->initialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003947 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003948 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003949 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003950
3951 return true;
3952}
3953
3954bool PostCreatePipelineCache(
3955 VkDevice device,
3956 VkPipelineCache* pPipelineCache,
3957 VkResult result)
3958{
3959
3960 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003961 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003962 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003963
3964 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003965 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003966 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barboure307f582015-07-10 15:29:03 -06003967 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3968 return false;
3969 }
3970
3971 return true;
3972}
3973
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003974VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003975 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003976 const VkPipelineCacheCreateInfo* pCreateInfo,
3977 VkPipelineCache* pPipelineCache)
3978{
3979 PreCreatePipelineCache(device, pCreateInfo);
3980
3981 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3982
3983 PostCreatePipelineCache(device, pPipelineCache, result);
3984
3985 return result;
3986}
3987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003988bool PostGetPipelineCacheSize(
3989 VkDevice device,
3990 VkPipelineCache pipelineCache)
3991{
3992
3993
3994 return true;
3995}
3996
3997VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3998 VkDevice device,
3999 VkPipelineCache pipelineCache)
4000{
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004001 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004002
4003 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayes1e768ad2015-07-31 12:54:58 -06004004
4005 return result;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004006}
4007
4008bool PostGetPipelineCacheData(
4009 VkDevice device,
4010 VkPipelineCache pipelineCache,
4011 void* pData,
4012 VkResult result)
4013{
4014
4015
4016 if(pData != nullptr)
4017 {
4018 }
4019
4020 if(result < VK_SUCCESS)
4021 {
4022 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4024 return false;
4025 }
4026
4027 return true;
4028}
4029
4030VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4031 VkDevice device,
4032 VkPipelineCache pipelineCache,
4033 void* pData)
4034{
4035 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4036
4037 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4038
4039 return result;
4040}
4041
4042bool PreMergePipelineCaches(
4043 VkDevice device,
4044 const VkPipelineCache* pSrcCaches)
4045{
4046 if(pSrcCaches != nullptr)
4047 {
4048 }
4049
4050 return true;
4051}
4052
4053bool PostMergePipelineCaches(
4054 VkDevice device,
4055 VkPipelineCache destCache,
4056 uint32_t srcCacheCount,
4057 VkResult result)
4058{
4059
4060
4061
4062 if(result < VK_SUCCESS)
4063 {
4064 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4065 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4066 return false;
4067 }
4068
4069 return true;
4070}
4071
4072VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4073 VkDevice device,
4074 VkPipelineCache destCache,
4075 uint32_t srcCacheCount,
4076 const VkPipelineCache* pSrcCaches)
4077{
4078 PreMergePipelineCaches(device, pSrcCaches);
4079
4080 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4081
4082 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4083
4084 return result;
4085}
4086
4087bool PreCreateGraphicsPipelines(
4088 VkDevice device,
4089 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4090{
4091 if(pCreateInfos != nullptr)
4092 {
4093 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4094 {
4095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4096 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4097 return false;
4098 }
4099 if(pCreateInfos->pStages != nullptr)
4100 {
4101 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4102 {
4103 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4104 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4105 return false;
4106 }
4107 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4108 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4109 {
4110 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4111 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4112 return false;
4113 }
4114 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4115 {
4116 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4117 {
4118 }
4119 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4120 {
4121 }
4122 }
4123 }
4124 if(pCreateInfos->pVertexInputState != nullptr)
4125 {
4126 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4127 {
4128 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4129 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4130 return false;
4131 }
4132 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4133 {
4134 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4135 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4136 {
4137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4138 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4139 return false;
4140 }
4141 }
4142 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4143 {
4144 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4145 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4146 {
4147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4148 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4149 return false;
4150 }
4151 }
4152 }
4153 if(pCreateInfos->pInputAssemblyState != nullptr)
4154 {
4155 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4156 {
4157 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4158 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4159 return false;
4160 }
4161 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4162 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4163 {
4164 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4165 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4166 return false;
4167 }
4168 }
4169 if(pCreateInfos->pTessellationState != nullptr)
4170 {
4171 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4172 {
4173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4174 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4175 return false;
4176 }
4177 }
4178 if(pCreateInfos->pViewportState != nullptr)
4179 {
4180 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4181 {
4182 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4183 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4184 return false;
4185 }
4186 }
4187 if(pCreateInfos->pRasterState != nullptr)
4188 {
4189 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4190 {
4191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4192 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4193 return false;
4194 }
4195 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4196 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4197 {
4198 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4199 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4200 return false;
4201 }
4202 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4203 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4204 {
4205 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4206 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4207 return false;
4208 }
4209 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4210 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4211 {
4212 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4213 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4214 return false;
4215 }
4216 }
4217 if(pCreateInfos->pMultisampleState != nullptr)
4218 {
4219 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4220 {
4221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4222 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4223 return false;
4224 }
4225 }
4226 if(pCreateInfos->pDepthStencilState != nullptr)
4227 {
4228 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4229 {
4230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4231 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4232 return false;
4233 }
4234 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4235 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4236 {
4237 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4238 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4239 return false;
4240 }
4241 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4242 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4243 {
4244 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4245 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4246 return false;
4247 }
4248 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4249 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4250 {
4251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4252 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4253 return false;
4254 }
4255 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4256 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4257 {
4258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4259 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4260 return false;
4261 }
4262 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4263 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4264 {
4265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4266 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4267 return false;
4268 }
4269 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4270 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4271 {
4272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4273 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4274 return false;
4275 }
4276 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4277 pCreateInfos->pDepthStencilState->back.stencilPassOp > 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->back.stencilPassOp, is an unrecognized enumerator");
4281 return false;
4282 }
4283 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4284 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > 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->back.stencilDepthFailOp, is an unrecognized enumerator");
4288 return false;
4289 }
4290 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4291 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4292 {
4293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4294 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4295 return false;
4296 }
4297 }
4298 if(pCreateInfos->pColorBlendState != nullptr)
4299 {
4300 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4301 {
4302 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4303 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4304 return false;
4305 }
Michael Lentine6d033602015-10-06 14:55:54 -07004306 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4307 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004308 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4309 {
4310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4311 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4312 return false;
4313 }
Michael Lentined833b882015-09-15 14:59:56 -05004314 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004315 {
4316 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4317 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4318 {
4319 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4320 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4321 return false;
4322 }
4323 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4324 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4325 {
4326 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4327 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4328 return false;
4329 }
4330 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4331 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4332 {
4333 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4334 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4335 return false;
4336 }
4337 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4338 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4339 {
4340 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4341 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4342 return false;
4343 }
4344 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4345 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4346 {
4347 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4348 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4349 return false;
4350 }
4351 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4352 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4353 {
4354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4355 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4356 return false;
4357 }
4358 }
4359 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06004360 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4361 {
4362 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4363 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4364 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004365 }
4366
4367 return true;
4368}
4369
4370bool PostCreateGraphicsPipelines(
4371 VkDevice device,
4372 VkPipelineCache pipelineCache,
4373 uint32_t count,
4374 VkPipeline* pPipelines,
4375 VkResult result)
4376{
4377
4378
4379
4380 if(pPipelines != nullptr)
4381 {
4382 }
4383
4384 if(result < VK_SUCCESS)
4385 {
4386 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4388 return false;
4389 }
4390
4391 return true;
4392}
4393
4394VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4395 VkDevice device,
4396 VkPipelineCache pipelineCache,
4397 uint32_t count,
4398 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4399 VkPipeline* pPipelines)
4400{
4401 PreCreateGraphicsPipelines(device, pCreateInfos);
4402
4403 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4404
4405 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4406
4407 return result;
4408}
4409
4410bool PreCreateComputePipelines(
4411 VkDevice device,
4412 const VkComputePipelineCreateInfo* pCreateInfos)
4413{
4414 if(pCreateInfos != nullptr)
4415 {
4416 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4417 {
4418 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4419 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4420 return false;
4421 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004422 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004423 {
4424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4425 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4426 return false;
4427 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004428 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4429 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004430 {
4431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4432 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4433 return false;
4434 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004435 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004436 {
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004437 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004438 {
4439 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06004440 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004441 {
4442 }
4443 }
4444 }
4445
4446 return true;
4447}
4448
4449bool PostCreateComputePipelines(
4450 VkDevice device,
4451 VkPipelineCache pipelineCache,
4452 uint32_t count,
4453 VkPipeline* pPipelines,
4454 VkResult result)
4455{
4456
4457
4458
4459 if(pPipelines != nullptr)
4460 {
4461 }
4462
4463 if(result < VK_SUCCESS)
4464 {
4465 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4466 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4467 return false;
4468 }
4469
4470 return true;
4471}
4472
4473VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4474 VkDevice device,
4475 VkPipelineCache pipelineCache,
4476 uint32_t count,
4477 const VkComputePipelineCreateInfo* pCreateInfos,
4478 VkPipeline* pPipelines)
4479{
4480 PreCreateComputePipelines(device, pCreateInfos);
4481
4482 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4483
4484 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4485
4486 return result;
4487}
4488
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004489bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004490 VkDevice device,
4491 const VkPipelineLayoutCreateInfo* pCreateInfo)
4492{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004493 if(pCreateInfo != nullptr)
4494 {
4495 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004497 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004498 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004500 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004501 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004502 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004503 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004504 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004505 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004506 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004507 }
4508
4509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510}
4511
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004512bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004513 VkDevice device,
4514 VkPipelineLayout* pPipelineLayout,
4515 VkResult result)
4516{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004517
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004518 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004519 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004520 }
4521
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004522 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004523 {
4524 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004525 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4526 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004527 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004528
4529 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004530}
4531
4532VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4533 VkDevice device,
4534 const VkPipelineLayoutCreateInfo* pCreateInfo,
4535 VkPipelineLayout* pPipelineLayout)
4536{
4537 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004538
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004539 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4540
4541 PostCreatePipelineLayout(device, pPipelineLayout, result);
4542
4543 return result;
4544}
4545
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004546bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004547 VkDevice device,
4548 const VkSamplerCreateInfo* pCreateInfo)
4549{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004550 if(pCreateInfo != nullptr)
4551 {
4552 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004553 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004554 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004555 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004556 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004557 }
4558 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4559 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4560 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004561 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004562 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004563 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004564 }
4565 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4566 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4567 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004568 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004569 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004570 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004571 }
4572 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4573 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4574 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004575 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004576 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004577 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004578 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004579 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4580 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004581 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004582 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004583 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004584 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004585 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004586 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4587 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004588 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004589 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004590 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004591 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004592 }
Courtney Goeltzenleuchter60ce96d2015-10-19 16:23:53 -06004593 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4594 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004595 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004596 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004597 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004598 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004599 }
4600 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4601 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4602 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004604 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004605 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004606 }
4607 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4608 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4609 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004611 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004612 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004613 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004614 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004615
4616 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004617}
4618
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004619bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004620 VkDevice device,
4621 VkSampler* pSampler,
4622 VkResult result)
4623{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004624
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004625 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004626 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004627 }
4628
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004629 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004630 {
4631 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4633 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004634 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004635
4636 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004637}
4638
4639VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4640 VkDevice device,
4641 const VkSamplerCreateInfo* pCreateInfo,
4642 VkSampler* pSampler)
4643{
4644 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004645
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004646 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4647
4648 PostCreateSampler(device, pSampler, result);
4649
4650 return result;
4651}
4652
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004653bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004654 VkDevice device,
4655 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4656{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004657 if(pCreateInfo != nullptr)
4658 {
4659 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004660 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004662 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004663 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004664 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004665 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004666 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004667 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4668 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4669 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004670 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004671 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004672 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004673 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004674 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004675 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 }
4677 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004678 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004679
4680 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004681}
4682
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004683bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004684 VkDevice device,
4685 VkDescriptorSetLayout* pSetLayout,
4686 VkResult result)
4687{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004688
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004689 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004690 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004691 }
4692
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004693 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004694 {
4695 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4697 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004698 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004699
4700 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004701}
4702
4703VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4704 VkDevice device,
4705 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4706 VkDescriptorSetLayout* pSetLayout)
4707{
4708 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004709
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004710 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4711
4712 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4713
4714 return result;
4715}
4716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004717bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004718 VkDevice device,
4719 const VkDescriptorPoolCreateInfo* pCreateInfo)
4720{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004721 if(pCreateInfo != nullptr)
4722 {
4723 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004724 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004725 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004726 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004727 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004728 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004729 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004730 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004731 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4732 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4733 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004734 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004735 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004736 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004737 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004738 }
4739 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004740
4741 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004742}
4743
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004744bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004745 VkDevice device,
4746 VkDescriptorPoolUsage poolUsage,
4747 uint32_t maxSets,
4748 VkDescriptorPool* pDescriptorPool,
4749 VkResult result)
4750{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004751
4752 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4753 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4754 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004755 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004756 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004757 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004758 }
4759
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004760 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004761
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004762 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004763 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004764 }
4765
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004766 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004767 {
4768 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4770 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004771 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004772
4773 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004774}
4775
4776VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4777 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004778 const VkDescriptorPoolCreateInfo* pCreateInfo,
4779 VkDescriptorPool* pDescriptorPool)
4780{
4781 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004782
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004783 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004784
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004785 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004786
4787 return result;
4788}
4789
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004790bool PostResetDescriptorPool(
4791 VkDevice device,
4792 VkDescriptorPool descriptorPool,
4793 VkResult result)
4794{
4795
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004796
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004797 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004798 {
4799 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004800 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4801 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004802 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004803
4804 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004805}
4806
4807VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4808 VkDevice device,
4809 VkDescriptorPool descriptorPool)
4810{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004811 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4812
4813 PostResetDescriptorPool(device, descriptorPool, result);
4814
4815 return result;
4816}
4817
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004818bool PreAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004819 VkDevice device,
4820 const VkDescriptorSetLayout* pSetLayouts)
4821{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004822 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004823 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004824 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004825
4826 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004827}
4828
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004829bool PostAllocDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004830 VkDevice device,
4831 VkDescriptorPool descriptorPool,
4832 VkDescriptorSetUsage setUsage,
4833 uint32_t count,
4834 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004835 VkResult result)
4836{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004837
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004838
4839 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4840 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4841 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004843 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004844 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004845 }
4846
4847
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004848 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004849 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004850 }
4851
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004852 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004853 {
4854 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004855 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4856 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004857 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004858
4859 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004860}
4861
4862VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4863 VkDevice device,
4864 VkDescriptorPool descriptorPool,
4865 VkDescriptorSetUsage setUsage,
4866 uint32_t count,
4867 const VkDescriptorSetLayout* pSetLayouts,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004868 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004869{
4870 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004871
Cody Northropc8aa4a52015-08-03 12:47:29 -06004872 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004873
Cody Northropc8aa4a52015-08-03 12:47:29 -06004874 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004875
4876 return result;
4877}
4878
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004879bool PreFreeDescriptorSets(
4880 VkDevice device,
4881 const VkDescriptorSet* pDescriptorSets)
4882{
4883 if(pDescriptorSets != nullptr)
4884 {
4885 }
4886
4887 return true;
4888}
4889
4890bool PostFreeDescriptorSets(
4891 VkDevice device,
4892 VkDescriptorPool descriptorPool,
4893 uint32_t count,
4894 VkResult result)
4895{
4896
4897
4898
4899 if(result < VK_SUCCESS)
4900 {
4901 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4902 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4903 return false;
4904 }
4905
4906 return true;
4907}
4908
4909VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4910 VkDevice device,
4911 VkDescriptorPool descriptorPool,
4912 uint32_t count,
4913 const VkDescriptorSet* pDescriptorSets)
4914{
4915 PreFreeDescriptorSets(device, pDescriptorSets);
4916
4917 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4918
4919 PostFreeDescriptorSets(device, descriptorPool, count, result);
4920
4921 return result;
4922}
4923
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004924bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004925 VkDevice device,
4926 const VkWriteDescriptorSet* pDescriptorWrites,
4927 const VkCopyDescriptorSet* pDescriptorCopies)
4928{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004929 if(pDescriptorWrites != nullptr)
4930 {
4931 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004932 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004934 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004936 }
4937 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4938 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4939 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004940 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004941 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004942 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004943 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004944 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004945 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004946 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4947 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4948 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004949 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004950 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004951 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004952 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004953 }
4954 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004955
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004956 if(pDescriptorCopies != nullptr)
4957 {
4958 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004959 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004961 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004962 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004963 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004964 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004965
4966 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004967}
4968
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004969VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004970 VkDevice device,
4971 uint32_t writeCount,
4972 const VkWriteDescriptorSet* pDescriptorWrites,
4973 uint32_t copyCount,
4974 const VkCopyDescriptorSet* pDescriptorCopies)
4975{
4976 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004977
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004978 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004979}
4980
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004981bool PreCreateFramebuffer(
4982 VkDevice device,
4983 const VkFramebufferCreateInfo* pCreateInfo)
4984{
4985 if(pCreateInfo != nullptr)
4986 {
4987 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4988 {
4989 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4990 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4991 return false;
4992 }
4993 if(pCreateInfo->pAttachments != nullptr)
4994 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004995 }
4996 }
4997
4998 return true;
4999}
5000
5001bool PostCreateFramebuffer(
5002 VkDevice device,
5003 VkFramebuffer* pFramebuffer,
5004 VkResult result)
5005{
5006
5007 if(pFramebuffer != nullptr)
5008 {
5009 }
5010
5011 if(result < VK_SUCCESS)
5012 {
5013 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
5014 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5015 return false;
5016 }
5017
5018 return true;
5019}
5020
5021VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5022 VkDevice device,
5023 const VkFramebufferCreateInfo* pCreateInfo,
5024 VkFramebuffer* pFramebuffer)
5025{
5026 PreCreateFramebuffer(device, pCreateInfo);
5027
5028 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5029
5030 PostCreateFramebuffer(device, pFramebuffer, result);
5031
5032 return result;
5033}
5034
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005035bool PreCreateRenderPass(
5036 VkDevice device,
5037 const VkRenderPassCreateInfo* pCreateInfo)
5038{
5039 if(pCreateInfo != nullptr)
5040 {
5041 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5042 {
5043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5044 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5045 return false;
5046 }
5047 if(pCreateInfo->pAttachments != nullptr)
5048 {
5049 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5050 {
5051 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5052 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5053 return false;
5054 }
5055 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5056 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5057 {
5058 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5059 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5060 return false;
5061 }
5062 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5063 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5064 {
5065 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5066 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5067 return false;
5068 }
5069 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5070 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5071 {
5072 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5073 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5074 return false;
5075 }
5076 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5077 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5078 {
5079 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5080 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5081 return false;
5082 }
5083 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5084 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5085 {
5086 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5087 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5088 return false;
5089 }
5090 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5091 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5092 {
5093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5094 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5095 return false;
5096 }
5097 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5098 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5099 {
5100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5101 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5102 return false;
5103 }
5104 }
5105 if(pCreateInfo->pSubpasses != nullptr)
5106 {
5107 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5108 {
5109 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5110 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5111 return false;
5112 }
5113 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5114 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5115 {
5116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5117 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5118 return false;
5119 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005120 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005121 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005122 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5123 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005124 {
5125 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005126 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005127 return false;
5128 }
5129 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005130 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005131 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005132 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5133 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005134 {
5135 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005136 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005137 return false;
5138 }
5139 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005140 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005141 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005142 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5143 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005144 {
5145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005146 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005147 return false;
5148 }
5149 }
5150 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5151 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5152 {
5153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5154 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5155 return false;
5156 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005157 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005158 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005159 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5160 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005161 {
5162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06005163 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005164 return false;
5165 }
5166 }
5167 }
5168 if(pCreateInfo->pDependencies != nullptr)
5169 {
5170 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5171 {
5172 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5173 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5174 return false;
5175 }
5176 }
5177 }
5178
5179 return true;
5180}
5181
5182bool PostCreateRenderPass(
5183 VkDevice device,
5184 VkRenderPass* pRenderPass,
5185 VkResult result)
5186{
5187
5188 if(pRenderPass != nullptr)
5189 {
5190 }
5191
5192 if(result < VK_SUCCESS)
5193 {
5194 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5195 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5196 return false;
5197 }
5198
5199 return true;
5200}
5201
5202VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5203 VkDevice device,
5204 const VkRenderPassCreateInfo* pCreateInfo,
5205 VkRenderPass* pRenderPass)
5206{
5207 PreCreateRenderPass(device, pCreateInfo);
5208
5209 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5210
5211 PostCreateRenderPass(device, pRenderPass, result);
5212
5213 return result;
5214}
5215
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005216bool PostGetRenderAreaGranularity(
5217 VkDevice device,
5218 VkRenderPass renderPass,
5219 VkExtent2D* pGranularity,
5220 VkResult result)
5221{
5222
5223
5224 if(pGranularity != nullptr)
5225 {
5226 }
5227
5228 if(result < VK_SUCCESS)
5229 {
5230 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5231 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5232 return false;
5233 }
5234
5235 return true;
5236}
5237
5238VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5239 VkDevice device,
5240 VkRenderPass renderPass,
5241 VkExtent2D* pGranularity)
5242{
5243 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5244
5245 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5246
5247 return result;
5248}
5249
5250bool PreCreateCommandPool(
5251 VkDevice device,
5252 const VkCmdPoolCreateInfo* pCreateInfo)
5253{
5254 if(pCreateInfo != nullptr)
5255 {
5256 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5257 {
5258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5259 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5260 return false;
5261 }
5262 }
5263
5264 return true;
5265}
5266
5267bool PostCreateCommandPool(
5268 VkDevice device,
5269 VkCmdPool* pCmdPool,
5270 VkResult result)
5271{
5272
5273 if(pCmdPool != nullptr)
5274 {
5275 }
5276
5277 if(result < VK_SUCCESS)
5278 {
5279 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5280 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5281 return false;
5282 }
5283
5284 return true;
5285}
5286
5287VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5288 VkDevice device,
5289 const VkCmdPoolCreateInfo* pCreateInfo,
5290 VkCmdPool* pCmdPool)
5291{
5292 PreCreateCommandPool(device, pCreateInfo);
5293
5294 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5295
5296 PostCreateCommandPool(device, pCmdPool, result);
5297
5298 return result;
5299}
5300
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005301bool PostResetCommandPool(
5302 VkDevice device,
5303 VkCmdPool cmdPool,
5304 VkCmdPoolResetFlags flags,
5305 VkResult result)
5306{
5307
5308
5309
5310 if(result < VK_SUCCESS)
5311 {
5312 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5313 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5314 return false;
5315 }
5316
5317 return true;
5318}
5319
5320VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5321 VkDevice device,
5322 VkCmdPool cmdPool,
5323 VkCmdPoolResetFlags flags)
5324{
5325 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5326
5327 PostResetCommandPool(device, cmdPool, flags, result);
5328
5329 return result;
5330}
5331
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005332bool PreCreateCommandBuffer(
5333 VkDevice device,
5334 const VkCmdBufferCreateInfo* pCreateInfo)
5335{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005336 if(pCreateInfo != nullptr)
5337 {
5338 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005339 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005340 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005341 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005342 return false;
5343 }
5344 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5345 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5346 {
5347 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005348 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005349 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005350 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005351 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005352
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005353 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005354}
5355
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005356bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005357 VkDevice device,
5358 VkCmdBuffer* pCmdBuffer,
5359 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005360{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005362 if(pCmdBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005363 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005364 }
5365
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005366 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 {
5368 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005369 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5370 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005372
5373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374}
5375
5376VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5377 VkDevice device,
5378 const VkCmdBufferCreateInfo* pCreateInfo,
5379 VkCmdBuffer* pCmdBuffer)
5380{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005381 PreCreateCommandBuffer(device, pCreateInfo);
5382
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005383 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5384
5385 PostCreateCommandBuffer(device, pCmdBuffer, result);
5386
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005387 return result;
5388}
5389
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005390bool PreBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005391 VkCmdBuffer cmdBuffer,
5392 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005393{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005394 if(pBeginInfo != nullptr)
5395 {
5396 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005397 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005398 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005399 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005400 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005401 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005402 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403
5404 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405}
5406
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005407bool PostBeginCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005408 VkCmdBuffer cmdBuffer,
5409 VkResult result)
5410{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005411
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005412 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005413 {
5414 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005415 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5416 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005417 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005418
5419 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005420}
5421
5422VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5423 VkCmdBuffer cmdBuffer,
5424 const VkCmdBufferBeginInfo* pBeginInfo)
5425{
5426 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005427
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5429
5430 PostBeginCommandBuffer(cmdBuffer, result);
5431
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005432 return result;
5433}
5434
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005435bool PostEndCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005436 VkCmdBuffer cmdBuffer,
5437 VkResult result)
5438{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005439
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005440 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005441 {
5442 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005443 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5444 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005445 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005446
5447 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005448}
5449
5450VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5451 VkCmdBuffer cmdBuffer)
5452{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5454
5455 PostEndCommandBuffer(cmdBuffer, result);
5456
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005457 return result;
5458}
5459
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005460bool PostResetCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005462 VkCmdBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005463 VkResult result)
5464{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005466
5467 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005468 {
5469 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005470 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5471 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005472 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005473
5474 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005475}
5476
5477VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005478 VkCmdBuffer cmdBuffer,
5479 VkCmdBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005480{
Courtney Goeltzenleuchter902d0812015-07-10 19:50:17 -06005481 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005482
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005483 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005484
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005485 return result;
5486}
5487
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005488bool PostCmdBindPipeline(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005489 VkCmdBuffer cmdBuffer,
5490 VkPipelineBindPoint pipelineBindPoint,
5491 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005492{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005493
5494 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5495 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5496 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005497 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005498 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005499 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500 }
5501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005502
5503 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005504}
5505
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005506VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5507 VkCmdBuffer cmdBuffer,
5508 VkPipelineBindPoint pipelineBindPoint,
5509 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005510{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005511 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5512
5513 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5514}
5515
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005516VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517{
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005518 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5519}
5520
5521VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5522{
5523 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005524}
5525
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005526VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005527{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005528 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529}
5530
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005531VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005532{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005533 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005534}
5535
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005536VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005537{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005538 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northropf5bd2252015-08-17 11:10:49 -06005539}
5540
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005541VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005542{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005543 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005544}
5545
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005546VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005547{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005548 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005549}
5550
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005551VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005552{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005553 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005554}
5555
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005556VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557{
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06005558 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005559}
5560
5561bool PreCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005562 VkCmdBuffer cmdBuffer,
5563 const VkDescriptorSet* pDescriptorSets,
5564 const uint32_t* pDynamicOffsets)
5565{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005566 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005567 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005568 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005569
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005570 if(pDynamicOffsets != nullptr)
5571 {
5572 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005573
5574 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005575}
5576
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005577bool PostCmdBindDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005578 VkCmdBuffer cmdBuffer,
5579 VkPipelineBindPoint pipelineBindPoint,
5580 VkPipelineLayout layout,
5581 uint32_t firstSet,
5582 uint32_t setCount,
5583 uint32_t dynamicOffsetCount)
5584{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005585
5586 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5587 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5588 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005589 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005590 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005591 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005592 }
5593
5594
5595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005596
5597
5598 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005599}
5600
5601VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5602 VkCmdBuffer cmdBuffer,
5603 VkPipelineBindPoint pipelineBindPoint,
5604 VkPipelineLayout layout,
5605 uint32_t firstSet,
5606 uint32_t setCount,
5607 const VkDescriptorSet* pDescriptorSets,
5608 uint32_t dynamicOffsetCount,
5609 const uint32_t* pDynamicOffsets)
5610{
5611 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005612
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005613 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5614
5615 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5616}
5617
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005618bool PostCmdBindIndexBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005619 VkCmdBuffer cmdBuffer,
5620 VkBuffer buffer,
5621 VkDeviceSize offset,
5622 VkIndexType indexType)
5623{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005625
5626
5627 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5628 indexType > VK_INDEX_TYPE_END_RANGE)
5629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005630 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005631 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005633 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005634
5635 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005636}
5637
5638VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5639 VkCmdBuffer cmdBuffer,
5640 VkBuffer buffer,
5641 VkDeviceSize offset,
5642 VkIndexType indexType)
5643{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5645
5646 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5647}
5648
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005649bool PreCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650 VkCmdBuffer cmdBuffer,
5651 const VkBuffer* pBuffers,
5652 const VkDeviceSize* pOffsets)
5653{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005654 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005655 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005656 }
5657
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005658 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005660 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005661
5662 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663}
5664
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005665bool PostCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005666 VkCmdBuffer cmdBuffer,
5667 uint32_t startBinding,
5668 uint32_t bindingCount)
5669{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005670
5671
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005672
5673 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005674}
5675
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005676VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677 VkCmdBuffer cmdBuffer,
5678 uint32_t startBinding,
5679 uint32_t bindingCount,
5680 const VkBuffer* pBuffers,
5681 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005682{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005683 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005684
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005685 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5686
5687 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005688}
5689
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005690bool PostCmdDraw(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005691 VkCmdBuffer cmdBuffer,
5692 uint32_t firstVertex,
5693 uint32_t vertexCount,
5694 uint32_t firstInstance,
5695 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005696{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005697
5698
5699
5700
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701
5702 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005703}
5704
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005705VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5706 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005707 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005708 uint32_t instanceCount,
5709 uint32_t firstVertex,
5710 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005711{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005712 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005713
5714 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005715}
5716
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005717bool PostCmdDrawIndexed(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005718 VkCmdBuffer cmdBuffer,
5719 uint32_t firstIndex,
5720 uint32_t indexCount,
5721 int32_t vertexOffset,
5722 uint32_t firstInstance,
5723 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005724{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005725
5726
5727
5728
5729
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005730
5731 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005732}
5733
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005734VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5735 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005736 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005737 uint32_t instanceCount,
5738 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005740 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005741{
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005742 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005743
5744 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5745}
5746
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005747bool PostCmdDrawIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005748 VkCmdBuffer cmdBuffer,
5749 VkBuffer buffer,
5750 VkDeviceSize offset,
5751 uint32_t count,
5752 uint32_t stride)
5753{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005754
5755
5756
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005757
5758
5759 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005760}
5761
5762VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5763 VkCmdBuffer cmdBuffer,
5764 VkBuffer buffer,
5765 VkDeviceSize offset,
5766 uint32_t count,
5767 uint32_t stride)
5768{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005769 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5770
5771 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5772}
5773
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005774bool PostCmdDrawIndexedIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005775 VkCmdBuffer cmdBuffer,
5776 VkBuffer buffer,
5777 VkDeviceSize offset,
5778 uint32_t count,
5779 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005780{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005781
5782
5783
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784
5785
5786 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005787}
5788
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5790 VkCmdBuffer cmdBuffer,
5791 VkBuffer buffer,
5792 VkDeviceSize offset,
5793 uint32_t count,
5794 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005795{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005796 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5797
5798 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5799}
5800
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005801bool PostCmdDispatch(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 VkCmdBuffer cmdBuffer,
5803 uint32_t x,
5804 uint32_t y,
5805 uint32_t z)
5806{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807
5808
5809
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005810
5811 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005812}
5813
5814VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5815 VkCmdBuffer cmdBuffer,
5816 uint32_t x,
5817 uint32_t y,
5818 uint32_t z)
5819{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005820 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5821
5822 PostCmdDispatch(cmdBuffer, x, y, z);
5823}
5824
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005825bool PostCmdDispatchIndirect(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005826 VkCmdBuffer cmdBuffer,
5827 VkBuffer buffer,
5828 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005829{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005830
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005831
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832
5833 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005834}
5835
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005836VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5837 VkCmdBuffer cmdBuffer,
5838 VkBuffer buffer,
5839 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005840{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005841 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5842
5843 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005844}
5845
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005846bool PreCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005847 VkCmdBuffer cmdBuffer,
5848 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005849{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005850 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005851 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005852 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005853
5854 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005855}
5856
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005857bool PostCmdCopyBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005858 VkCmdBuffer cmdBuffer,
5859 VkBuffer srcBuffer,
5860 VkBuffer destBuffer,
5861 uint32_t regionCount)
5862{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005863
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005864
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005865
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866
5867 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005868}
5869
5870VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5871 VkCmdBuffer cmdBuffer,
5872 VkBuffer srcBuffer,
5873 VkBuffer destBuffer,
5874 uint32_t regionCount,
5875 const VkBufferCopy* pRegions)
5876{
5877 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005878
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005879 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5880
5881 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5882}
5883
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005884bool PreCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005885 VkCmdBuffer cmdBuffer,
5886 const VkImageCopy* pRegions)
5887{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005888 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005889 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005890 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5891 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5892 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005893 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005894 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005895 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005896 }
5897 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5898 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5899 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005900 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005901 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005902 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005903 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005904 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005905
5906 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907}
5908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005909bool PostCmdCopyImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005910 VkCmdBuffer cmdBuffer,
5911 VkImage srcImage,
5912 VkImageLayout srcImageLayout,
5913 VkImage destImage,
5914 VkImageLayout destImageLayout,
5915 uint32_t regionCount)
5916{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005917
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918
5919 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5920 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5921 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005922 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005923 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005924 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005925 }
5926
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005927
5928 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5929 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5930 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005931 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005932 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005933 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005934 }
5935
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005936
5937 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938}
5939
5940VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5941 VkCmdBuffer cmdBuffer,
5942 VkImage srcImage,
5943 VkImageLayout srcImageLayout,
5944 VkImage destImage,
5945 VkImageLayout destImageLayout,
5946 uint32_t regionCount,
5947 const VkImageCopy* pRegions)
5948{
5949 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005950
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005951 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5952
5953 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5954}
5955
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005956bool PreCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 VkCmdBuffer cmdBuffer,
5958 const VkImageBlit* pRegions)
5959{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005960 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005961 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005962 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5963 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5964 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005965 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005966 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005967 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005968 }
5969 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5970 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5971 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005972 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005973 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005975 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005976 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005977
5978 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005979}
5980
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005981bool PostCmdBlitImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005982 VkCmdBuffer cmdBuffer,
5983 VkImage srcImage,
5984 VkImageLayout srcImageLayout,
5985 VkImage destImage,
5986 VkImageLayout destImageLayout,
5987 uint32_t regionCount,
5988 VkTexFilter filter)
5989{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005990
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005991
5992 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5993 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5994 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005995 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005996 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005997 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005998 }
5999
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006000
6001 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6002 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6003 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006004 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006005 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006006 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006007 }
6008
6009
6010 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
6011 filter > VK_TEX_FILTER_END_RANGE)
6012 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006013 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006014 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006015 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006017
6018 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019}
6020
6021VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6022 VkCmdBuffer cmdBuffer,
6023 VkImage srcImage,
6024 VkImageLayout srcImageLayout,
6025 VkImage destImage,
6026 VkImageLayout destImageLayout,
6027 uint32_t regionCount,
6028 const VkImageBlit* pRegions,
6029 VkTexFilter filter)
6030{
6031 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006032
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006033 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6034
6035 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6036}
6037
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006038bool PreCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006039 VkCmdBuffer cmdBuffer,
6040 const VkBufferImageCopy* pRegions)
6041{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006042 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006043 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006044 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6045 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6046 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006047 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006048 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006049 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006050 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006051 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006052
6053 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054}
6055
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006056bool PostCmdCopyBufferToImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006057 VkCmdBuffer cmdBuffer,
6058 VkBuffer srcBuffer,
6059 VkImage destImage,
6060 VkImageLayout destImageLayout,
6061 uint32_t regionCount)
6062{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006063
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006064
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006065
6066 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6067 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6068 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006069 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006070 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006071 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006072 }
6073
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006074
6075 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076}
6077
6078VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6079 VkCmdBuffer cmdBuffer,
6080 VkBuffer srcBuffer,
6081 VkImage destImage,
6082 VkImageLayout destImageLayout,
6083 uint32_t regionCount,
6084 const VkBufferImageCopy* pRegions)
6085{
6086 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006087
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006088 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6089
6090 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6091}
6092
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006093bool PreCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006094 VkCmdBuffer cmdBuffer,
6095 const VkBufferImageCopy* pRegions)
6096{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006097 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006098 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6100 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6101 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006102 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006103 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006104 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006105 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006106 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006107
6108 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006109}
6110
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006111bool PostCmdCopyImageToBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006112 VkCmdBuffer cmdBuffer,
6113 VkImage srcImage,
6114 VkImageLayout srcImageLayout,
6115 VkBuffer destBuffer,
6116 uint32_t regionCount)
6117{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006118
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006119
6120 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6121 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6122 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006123 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006124 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006125 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006126 }
6127
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006128
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006129
6130 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006131}
6132
6133VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6134 VkCmdBuffer cmdBuffer,
6135 VkImage srcImage,
6136 VkImageLayout srcImageLayout,
6137 VkBuffer destBuffer,
6138 uint32_t regionCount,
6139 const VkBufferImageCopy* pRegions)
6140{
6141 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006142
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006143 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6144
6145 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6146}
6147
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006148bool PreCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149 VkCmdBuffer cmdBuffer,
6150 const uint32_t* pData)
6151{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006152 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006153 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006154 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006155
6156 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006157}
6158
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006159bool PostCmdUpdateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160 VkCmdBuffer cmdBuffer,
6161 VkBuffer destBuffer,
6162 VkDeviceSize destOffset,
6163 VkDeviceSize dataSize)
6164{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006165
6166
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006167
6168
6169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006170}
6171
6172VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6173 VkCmdBuffer cmdBuffer,
6174 VkBuffer destBuffer,
6175 VkDeviceSize destOffset,
6176 VkDeviceSize dataSize,
6177 const uint32_t* pData)
6178{
6179 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006180
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006181 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6182
6183 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6184}
6185
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006186bool PostCmdFillBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006187 VkCmdBuffer cmdBuffer,
6188 VkBuffer destBuffer,
6189 VkDeviceSize destOffset,
6190 VkDeviceSize fillSize,
6191 uint32_t data)
6192{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006193
6194
6195
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006196
6197
6198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006199}
6200
6201VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6202 VkCmdBuffer cmdBuffer,
6203 VkBuffer destBuffer,
6204 VkDeviceSize destOffset,
6205 VkDeviceSize fillSize,
6206 uint32_t data)
6207{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006208 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6209
6210 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6211}
6212
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006213bool PreCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006214 VkCmdBuffer cmdBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12006215 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006216 const VkImageSubresourceRange* pRanges)
6217{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006218 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006219 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006220 }
6221
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006222 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006223 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006224 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006225 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006226
6227 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006228}
6229
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006230bool PostCmdClearColorImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231 VkCmdBuffer cmdBuffer,
6232 VkImage image,
6233 VkImageLayout imageLayout,
6234 uint32_t rangeCount)
6235{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006236
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006237
6238 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6239 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6240 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006241 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006242 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006243 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006244 }
6245
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006246
6247 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006248}
6249
6250VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6251 VkCmdBuffer cmdBuffer,
6252 VkImage image,
6253 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12006254 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006255 uint32_t rangeCount,
6256 const VkImageSubresourceRange* pRanges)
6257{
6258 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006259
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006260 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6261
6262 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6263}
6264
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006265bool PreCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006266 VkCmdBuffer cmdBuffer,
6267 const VkImageSubresourceRange* pRanges)
6268{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006269 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006270 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06006271 /*
6272 * TODO: How do we validation pRanges->aspectMask?
6273 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6274 * VK_IMAGE_ASPECT_STENCIL_BIT.
6275 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006276 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006277
6278 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006279}
6280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006281bool PostCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006282 VkCmdBuffer cmdBuffer,
6283 VkImage image,
6284 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006285 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006286 uint32_t rangeCount)
6287{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006288
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006289
6290 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6291 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6292 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006293 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006294 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006295 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006296 }
6297
6298
6299
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006300
6301 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006302}
6303
Chris Forbes2951d7d2015-06-22 17:21:59 +12006304VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006305 VkCmdBuffer cmdBuffer,
6306 VkImage image,
6307 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006308 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006309 uint32_t rangeCount,
6310 const VkImageSubresourceRange* pRanges)
6311{
Chris Forbes2951d7d2015-06-22 17:21:59 +12006312 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006313
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006314 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006315
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06006316 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006317}
6318
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006319bool PreCmdClearAttachments(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006320 VkCmdBuffer cmdBuffer,
6321 const VkClearColorValue* pColor,
6322 const VkRect3D* pRects)
6323{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006324 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006325 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006326 }
6327
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006328 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006329 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006330 }
6331
6332 return true;
6333}
6334
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006335VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6336 VkCmdBuffer cmdBuffer,
6337 uint32_t attachmentCount,
6338 const VkClearAttachment* pAttachments,
6339 uint32_t rectCount,
6340 const VkRect3D* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006341{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006342 for (uint32_t i = 0; i < attachmentCount; i++) {
6343 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006344 }
6345
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06006346 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006347}
6348
6349bool PreCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006350 VkCmdBuffer cmdBuffer,
6351 const VkImageResolve* pRegions)
6352{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006353 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006354 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006355 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6356 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6357 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006358 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006359 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006360 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006361 }
6362 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6363 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6364 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006365 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006366 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006367 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006368 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006369 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006370
6371 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006372}
6373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006374bool PostCmdResolveImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 VkCmdBuffer cmdBuffer,
6376 VkImage srcImage,
6377 VkImageLayout srcImageLayout,
6378 VkImage destImage,
6379 VkImageLayout destImageLayout,
6380 uint32_t regionCount)
6381{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006382
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006383
6384 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6385 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6386 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006387 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006388 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006389 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006390 }
6391
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006392
6393 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6394 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6395 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006396 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006397 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006398 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006399 }
6400
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006401
6402 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006403}
6404
6405VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6406 VkCmdBuffer cmdBuffer,
6407 VkImage srcImage,
6408 VkImageLayout srcImageLayout,
6409 VkImage destImage,
6410 VkImageLayout destImageLayout,
6411 uint32_t regionCount,
6412 const VkImageResolve* pRegions)
6413{
6414 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006415
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006416 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6417
6418 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6419}
6420
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006421bool PostCmdSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006422 VkCmdBuffer cmdBuffer,
6423 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006424 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006425{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006426
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006428
6429 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006430}
6431
6432VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6433 VkCmdBuffer cmdBuffer,
6434 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006435 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006437 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006438
Tony Barbourc2e987e2015-06-29 16:20:35 -06006439 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006440}
6441
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006442bool PostCmdResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006443 VkCmdBuffer cmdBuffer,
6444 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006445 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006446{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006447
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006448
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006449
6450 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006451}
6452
6453VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6454 VkCmdBuffer cmdBuffer,
6455 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006456 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006457{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006458 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006459
Tony Barbourc2e987e2015-06-29 16:20:35 -06006460 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006461}
6462
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006463bool PreCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006464 VkCmdBuffer cmdBuffer,
6465 const VkEvent* pEvents,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006466 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006467{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006468 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006470 }
6471
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006472 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006473 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006474 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006475
6476 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006477}
6478
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006479bool PostCmdWaitEvents(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006480 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006481 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006482 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006483 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006484 uint32_t memBarrierCount)
6485{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006486
Tony Barbourc2e987e2015-06-29 16:20:35 -06006487
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006488
6489
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006490
6491 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006492}
6493
6494VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6495 VkCmdBuffer cmdBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006496 uint32_t eventCount,
6497 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006498 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006499 VkPipelineStageFlags destStageMask,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006500 uint32_t memBarrierCount,
Courtney Goeltzenleuchterd9ba3422015-07-12 12:58:58 -06006501 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502{
6503 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006504
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006505 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006506
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006507 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006508}
6509
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006510bool PreCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006511 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006512 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006513{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006514 if(ppMemBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006517
6518 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006519}
6520
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006521bool PostCmdPipelineBarrier(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006523 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006524 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006525 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006526 uint32_t memBarrierCount)
6527{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528
Tony Barbourc2e987e2015-06-29 16:20:35 -06006529
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530
6531
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006532
6533 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006534}
6535
6536VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6537 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006538 VkPipelineStageFlags srcStageMask,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006539 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06006540 VkBool32 byRegion,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006541 uint32_t memBarrierCount,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006542 const void* const* ppMemBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006543{
Tony Barbourc2e987e2015-06-29 16:20:35 -06006544 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006545
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006546 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006547
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006548 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006549}
6550
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006551bool PostCmdBeginQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552 VkCmdBuffer cmdBuffer,
6553 VkQueryPool queryPool,
6554 uint32_t slot,
6555 VkQueryControlFlags flags)
6556{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006557
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006558
6559
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006560
6561 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562}
6563
6564VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6565 VkCmdBuffer cmdBuffer,
6566 VkQueryPool queryPool,
6567 uint32_t slot,
6568 VkQueryControlFlags flags)
6569{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006570 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6571
6572 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6573}
6574
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006575bool PostCmdEndQuery(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006576 VkCmdBuffer cmdBuffer,
6577 VkQueryPool queryPool,
6578 uint32_t slot)
6579{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006580
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006581
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006582
6583 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006584}
6585
6586VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6587 VkCmdBuffer cmdBuffer,
6588 VkQueryPool queryPool,
6589 uint32_t slot)
6590{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006591 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6592
6593 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6594}
6595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006596bool PostCmdResetQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006597 VkCmdBuffer cmdBuffer,
6598 VkQueryPool queryPool,
6599 uint32_t startQuery,
6600 uint32_t queryCount)
6601{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006602
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006603
6604
6605
6606 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006607}
6608
6609VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6610 VkCmdBuffer cmdBuffer,
6611 VkQueryPool queryPool,
6612 uint32_t startQuery,
6613 uint32_t queryCount)
6614{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006615 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6616
6617 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6618}
6619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006620bool PostCmdWriteTimestamp(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006621 VkCmdBuffer cmdBuffer,
6622 VkTimestampType timestampType,
6623 VkBuffer destBuffer,
6624 VkDeviceSize destOffset)
6625{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006626
6627 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6628 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6629 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006630 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006631 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006632 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006633 }
6634
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006635
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006636
6637 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006638}
6639
6640VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6641 VkCmdBuffer cmdBuffer,
6642 VkTimestampType timestampType,
6643 VkBuffer destBuffer,
6644 VkDeviceSize destOffset)
6645{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006646 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6647
6648 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6649}
6650
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006651bool PostCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006652 VkCmdBuffer cmdBuffer,
6653 VkQueryPool queryPool,
6654 uint32_t startQuery,
6655 uint32_t queryCount,
6656 VkBuffer destBuffer,
6657 VkDeviceSize destOffset,
6658 VkDeviceSize destStride,
6659 VkQueryResultFlags flags)
6660{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006661
6662
6663
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006665
6666
6667
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006668
6669 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006670}
6671
Jeremy Hayescf469132015-04-17 10:36:53 -06006672VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006673 VkCmdBuffer cmdBuffer,
6674 VkQueryPool queryPool,
6675 uint32_t startQuery,
6676 uint32_t queryCount,
6677 VkBuffer destBuffer,
6678 VkDeviceSize destOffset,
6679 VkDeviceSize destStride,
6680 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006681{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006682 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6683
6684 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006685}
6686
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006687bool PreCmdPushConstants(
6688 VkCmdBuffer cmdBuffer,
6689 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006690{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006691 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006692 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006693 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006694
6695 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006696}
6697
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006698bool PostCmdPushConstants(
6699 VkCmdBuffer cmdBuffer,
6700 VkPipelineLayout layout,
6701 VkShaderStageFlags stageFlags,
6702 uint32_t start,
6703 uint32_t length)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006704{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006705
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006706
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006707
6708
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006709
6710 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006711}
6712
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006713VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6714 VkCmdBuffer cmdBuffer,
6715 VkPipelineLayout layout,
6716 VkShaderStageFlags stageFlags,
6717 uint32_t start,
6718 uint32_t length,
6719 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006720{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006721 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006722
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006723 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006724
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006725 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006726}
6727
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006728bool PreCmdBeginRenderPass(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006729 VkCmdBuffer cmdBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006730 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006731{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006732 if(pRenderPassBegin != nullptr)
6733 {
6734 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006735 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006736 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006737 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006738 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006739 }
Cody Northropc332eef2015-08-04 11:51:03 -06006740 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006741 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006742 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006743 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006744
6745 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006746}
6747
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006748bool PostCmdBeginRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006749 VkCmdBuffer cmdBuffer,
6750 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006751{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006752
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006753 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6754 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6755 {
6756 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6757 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6758 return false;
6759 }
6760
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006761 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006762}
6763
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006764VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6765 VkCmdBuffer cmdBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006766 const VkRenderPassBeginInfo* pRenderPassBegin,
6767 VkRenderPassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006768{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006769 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6770
Chia-I Wuc278df82015-07-07 11:50:03 +08006771 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006772
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006773 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006774}
6775
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006776bool PostCmdNextSubpass(
Chia-I Wuc278df82015-07-07 11:50:03 +08006777 VkCmdBuffer cmdBuffer,
6778 VkRenderPassContents contents)
6779{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006780
6781 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006782 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006783 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006784 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006785 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6786 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006787 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006788
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006789 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006790}
6791
6792VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6793 VkCmdBuffer cmdBuffer,
6794 VkRenderPassContents contents)
6795{
Chia-I Wuc278df82015-07-07 11:50:03 +08006796 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6797
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006798 PostCmdNextSubpass(cmdBuffer, contents);
6799}
6800
6801bool PostCmdEndRenderPass(
6802 VkCmdBuffer cmdBuffer)
6803{
6804
6805 return true;
6806}
6807
6808VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6809 VkCmdBuffer cmdBuffer)
6810{
6811 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6812
6813 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006814}
6815
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006816bool PreCmdExecuteCommands(
6817 VkCmdBuffer cmdBuffer,
6818 const VkCmdBuffer* pCmdBuffers)
6819{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006820 if(pCmdBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006821 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006822 }
6823
6824 return true;
6825}
6826
6827bool PostCmdExecuteCommands(
6828 VkCmdBuffer cmdBuffer,
6829 uint32_t cmdBuffersCount)
6830{
6831
6832
6833 return true;
6834}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006835
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006836VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006837 VkCmdBuffer cmdBuffer,
6838 uint32_t cmdBuffersCount,
6839 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006840{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006841 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6842
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006843 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6844
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006845 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006846}
6847
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006848VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006849{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006850 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006851 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006852 }
6853
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006854 /* loader uses this to force layer initialization; device object is wrapped */
6855 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006856 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006857 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006858 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006859
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006860 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006861 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006862 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006863 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006864 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006865 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006866 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006867 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006868 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006869 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006870 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006871 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006872 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006873 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006874 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006875 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006876 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006877 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006878 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006879 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006880 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006881 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006882 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006883 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006884 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006885 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006886 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006887 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006888 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006889 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006890 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006891 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006892 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006893 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006894 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006895 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006896 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006897 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006898 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006899 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006900 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006901 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006902 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006903 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006904 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006905 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006906 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006907 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006908 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006909 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006910 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006911 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006912 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006913 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006914 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006915 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006916 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006917 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine6715e522015-09-15 14:59:14 -05006918 if (!strcmp(funcName, "vkCreateShaderModule"))
6919 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006920 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006921 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006922 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006923 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006924 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006925 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006926 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006927 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006928 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006929 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006930 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006931 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006932 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006933 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006934 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006935 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006936 if (!strcmp(funcName, "vkCmdSetViewport"))
6937 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006938 if (!strcmp(funcName, "vkCmdSetScissor"))
6939 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006940 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6941 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6942 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6943 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6944 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6945 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6946 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6947 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6948 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6949 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6950 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6951 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6952 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6953 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006954 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006955 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006956 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006957 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006958 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006959 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006960 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006961 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006962 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006963 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006964 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006965 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006966 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006967 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006968 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006969 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006970 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006971 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006972 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006973 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006974 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006975 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006976 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006977 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006978 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006979 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006980 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006981 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006982 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006983 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006984 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006985 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006986 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006987 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006988 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006989 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006990 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006991 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006992 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006993 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006994 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006995 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006996 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006997 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006998 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006999 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007000 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007001 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007002 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007003 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007004 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007005 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007006 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007007 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007008 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007009 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007010 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007011 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007012 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007013 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007014 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007015 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007016 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007017 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007018 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007019 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007020 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007021 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007022 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007023 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08007024 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007025 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007026
Jon Ashburn6f8cd632015-06-01 09:37:38 -06007027 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007028 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007029 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007030 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06007031 }
7032}
7033
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007034VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007035{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007036 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007037 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05007038 }
7039
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007040 /* loader uses this to force layer initialization; instance object is wrapped */
7041 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007042 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007043 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06007044 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007045
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007046 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007047 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007048 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007049 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007050 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007051 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007052 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007053 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007054 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007055 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06007056 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007057 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06007058 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
7059 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
7060 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
7061 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
7062 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
7063 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
7064 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
7065 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007066
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007067 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06007068 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007069 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06007070 return fptr;
7071
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06007072 {
7073 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7074 return NULL;
7075 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7076 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06007077}