blob: 2ffeefa6775ffeea35f24831a2c8c74523bef797 [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050032#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060033#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060034
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060035#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060036#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060037#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060038#include "vk_enum_validate_helper.h"
39#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060040//The following is #included again to catch certain OS-specific functions being used:
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060041#include "vk_loader_platform.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060042
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060043#include "vk_layer_table.h"
44#include "vk_layer_data.h"
45#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060046#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060047
Jeremy Hayes99a96322015-06-26 12:48:09 -060048typedef struct _layer_data {
49 debug_report_data *report_data;
50 VkDbgMsgCallback logging_callback;
51} layer_data;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050052
Jeremy Hayes99a96322015-06-26 12:48:09 -060053static std::unordered_map<void*, layer_data*> layer_data_map;
54static device_table_map pc_device_table_map;
55static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060056
Jeremy Hayes99a96322015-06-26 12:48:09 -060057// "my instance data"
58debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060059{
Jeremy Hayes99a96322015-06-26 12:48:09 -060060 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060061 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060062#if DISPATCH_MAP_DEBUG
63 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
64#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060065 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060066
67 return data->report_data;
68}
69
70// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060071debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060072{
73 dispatch_key key = get_dispatch_key(object);
74 layer_data *data = get_my_data_ptr(key, layer_data_map);
75#if DISPATCH_MAP_DEBUG
76 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
77#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060078 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060079 return data->report_data;
80}
81
82static void InitParamChecker(layer_data *data)
83{
84 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
85
86 uint32_t debug_action = 0;
87 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
88 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
89 {
90 FILE *log_output = NULL;
91 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060092 log_output = getLayerLogOutput(option_str, "ParamChecker");
Jeremy Hayes99a96322015-06-26 12:48:09 -060093 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
94 }
95}
96
97VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
98 VkInstance instance,
99 VkFlags msgFlags,
100 const PFN_vkDbgMsgCallback pfnMsgCallback,
101 void* pUserData,
102 VkDbgMsgCallback* pMsgCallback)
103{
104 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
105 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
106
107 if (result == VK_SUCCESS)
108 {
109 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
110 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
111 }
112
113 return result;
114}
115
116VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
117 VkInstance instance,
118 VkDbgMsgCallback msgCallback)
119{
120 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
121 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
122
123 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
124 layer_destroy_msg_callback(data->report_data, msgCallback);
125
126 return result;
127}
128
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600129static const VkLayerProperties pc_global_layers[] = {
130 {
131 "ParamChecker",
132 VK_API_VERSION,
133 VK_MAKE_VERSION(0, 1, 0),
134 "Validation layer: ParamChecker",
135 }
136};
Tony Barbour59a47322015-06-24 16:06:58 -0600137
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600138VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600139 const char *pLayerName,
140 uint32_t *pCount,
141 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600142{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600143 /* ParamChecker does not have any global extensions */
144 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600145}
146
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600147VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600148 uint32_t *pCount,
149 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600150{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600151 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
152 pc_global_layers,
153 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600154}
155
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600156VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600157 VkPhysicalDevice physicalDevice,
158 const char* pLayerName,
159 uint32_t* pCount,
160 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600161{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600162 /* ParamChecker does not have any physical device extensions */
163 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600164}
165
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 uint32_t* pCount,
169 VkLayerProperties* pProperties)
170{
171 /* ParamChecker's physical device layers are the same as global */
172 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
173 pCount, pProperties);
174}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600175
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600176// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600177
Jeremy Hayes99a96322015-06-26 12:48:09 -0600178static
179std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600180{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600181 switch(enumerator)
182 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600183 case VK_RESULT_MAX_ENUM:
184 {
185 return "VK_RESULT_MAX_ENUM";
186 break;
187 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600188 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600189 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600190 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600191 break;
192 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600193 case VK_ERROR_INCOMPATIBLE_DRIVER:
194 {
195 return "VK_ERROR_INCOMPATIBLE_DRIVER";
196 break;
197 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600198 case VK_ERROR_MEMORY_MAP_FAILED:
199 {
200 return "VK_ERROR_MEMORY_MAP_FAILED";
201 break;
202 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600203 case VK_INCOMPLETE:
204 {
205 return "VK_INCOMPLETE";
206 break;
207 }
208 case VK_ERROR_OUT_OF_HOST_MEMORY:
209 {
210 return "VK_ERROR_OUT_OF_HOST_MEMORY";
211 break;
212 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600213 case VK_ERROR_INITIALIZATION_FAILED:
214 {
215 return "VK_ERROR_INITIALIZATION_FAILED";
216 break;
217 }
218 case VK_NOT_READY:
219 {
220 return "VK_NOT_READY";
221 break;
222 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600223 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
224 {
225 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
226 break;
227 }
228 case VK_EVENT_SET:
229 {
230 return "VK_EVENT_SET";
231 break;
232 }
233 case VK_TIMEOUT:
234 {
235 return "VK_TIMEOUT";
236 break;
237 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600238 case VK_EVENT_RESET:
239 {
240 return "VK_EVENT_RESET";
241 break;
242 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600243 case VK_UNSUPPORTED:
244 {
245 return "VK_UNSUPPORTED";
246 break;
247 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600248 case VK_SUCCESS:
249 {
250 return "VK_SUCCESS";
251 break;
252 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600253 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600254 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600255 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600256 break;
257 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600258 case VK_ERROR_DEVICE_LOST:
259 {
260 return "VK_ERROR_DEVICE_LOST";
261 break;
262 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600263 default:
264 {
265 return "unrecognized enumerator";
266 break;
267 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600268 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600269}
270
271static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600272bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
273{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600274 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600275 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
276 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
277 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
278 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
279 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
280 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
281 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
282 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
283 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600284 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
285 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
286 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600287 if(enumerator & (~allFlags))
288 {
289 return false;
290 }
291
292 return true;
293}
294
295static
296std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
297{
298 if(!ValidateEnumerator(enumerator))
299 {
300 return "unrecognized enumerator";
301 }
302
303 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600304 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
305 {
306 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
307 }
308 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
309 {
310 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
311 }
312 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
313 {
314 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
315 }
316 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
317 {
318 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
319 }
320 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
321 {
322 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
323 }
324 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
325 {
326 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
327 }
328 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
329 {
330 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
331 }
332 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
333 {
334 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
335 }
336 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
337 {
338 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
339 }
340 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
341 {
342 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
343 }
Cody Northrop61d6dd62015-08-18 14:58:29 -0600344 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
345 {
346 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
347 }
348 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
349 {
350 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
351 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600352
353 std::string enumeratorString;
354 for(auto const& string : strings)
355 {
356 enumeratorString += string;
357
358 if(string != strings.back())
359 {
360 enumeratorString += '|';
361 }
362 }
363
364 return enumeratorString;
365}
366
367static
368bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
369{
370 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600371 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600372 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
373 VK_IMAGE_USAGE_STORAGE_BIT |
374 VK_IMAGE_USAGE_SAMPLED_BIT |
375 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
376 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600377 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600378 if(enumerator & (~allFlags))
379 {
380 return false;
381 }
382
383 return true;
384}
385
386static
387std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
388{
389 if(!ValidateEnumerator(enumerator))
390 {
391 return "unrecognized enumerator";
392 }
393
394 std::vector<std::string> strings;
395 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
396 {
397 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
398 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600399 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600400 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600401 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600402 }
403 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
404 {
405 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
406 }
407 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
408 {
409 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
410 }
411 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
412 {
413 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
414 }
415 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
416 {
417 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
418 }
419 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
420 {
421 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
422 }
423 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
424 {
425 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
426 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600427
428 std::string enumeratorString;
429 for(auto const& string : strings)
430 {
431 enumeratorString += string;
432
433 if(string != strings.back())
434 {
435 enumeratorString += '|';
436 }
437 }
438
439 return enumeratorString;
440}
441
442static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600443bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
444{
445 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
446 VK_QUEUE_DMA_BIT |
447 VK_QUEUE_COMPUTE_BIT |
448 VK_QUEUE_SPARSE_MEMMGR_BIT |
449 VK_QUEUE_GRAPHICS_BIT);
450 if(enumerator & (~allFlags))
451 {
452 return false;
453 }
454
455 return true;
456}
457
458static
459std::string EnumeratorString(VkQueueFlagBits const& enumerator)
460{
461 if(!ValidateEnumerator(enumerator))
462 {
463 return "unrecognized enumerator";
464 }
465
466 std::vector<std::string> strings;
467 if(enumerator & VK_QUEUE_EXTENDED_BIT)
468 {
469 strings.push_back("VK_QUEUE_EXTENDED_BIT");
470 }
471 if(enumerator & VK_QUEUE_DMA_BIT)
472 {
473 strings.push_back("VK_QUEUE_DMA_BIT");
474 }
475 if(enumerator & VK_QUEUE_COMPUTE_BIT)
476 {
477 strings.push_back("VK_QUEUE_COMPUTE_BIT");
478 }
479 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
480 {
481 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
482 }
483 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
484 {
485 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
486 }
487
488 std::string enumeratorString;
489 for(auto const& string : strings)
490 {
491 enumeratorString += string;
492
493 if(string != strings.back())
494 {
495 enumeratorString += '|';
496 }
497 }
498
499 return enumeratorString;
500}
501
502static
503bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
504{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600505 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
506 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600507 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
508 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
509 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
510 VK_MEMORY_PROPERTY_DEVICE_ONLY);
511 if(enumerator & (~allFlags))
512 {
513 return false;
514 }
515
516 return true;
517}
518
519static
520std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
521{
522 if(!ValidateEnumerator(enumerator))
523 {
524 return "unrecognized enumerator";
525 }
526
527 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600528 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
529 {
530 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
531 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600532 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
535 }
536 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
547 }
548 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
549 {
550 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
551 }
552
553 std::string enumeratorString;
554 for(auto const& string : strings)
555 {
556 enumeratorString += string;
557
558 if(string != strings.back())
559 {
560 enumeratorString += '|';
561 }
562 }
563
564 return enumeratorString;
565}
566
567static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600568bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600569{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600570 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600571 if(enumerator & (~allFlags))
572 {
573 return false;
574 }
575
576 return true;
577}
578
579static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600580std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600581{
582 if(!ValidateEnumerator(enumerator))
583 {
584 return "unrecognized enumerator";
585 }
586
587 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600588 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600590 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600591 }
592
593 std::string enumeratorString;
594 for(auto const& string : strings)
595 {
596 enumeratorString += string;
597
598 if(string != strings.back())
599 {
600 enumeratorString += '|';
601 }
602 }
603
604 return enumeratorString;
605}
606
607static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600608bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
609{
610 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
611 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
612 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
613 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600614 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600615 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600616 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600617
618 return true;
619}
620
621static
622std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
623{
624 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600625 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600626 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600628
629 std::vector<std::string> strings;
630 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600631 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600632 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600633 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600634 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600636 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600637 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600638 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600639 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600640 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600641 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600642
643 std::string enumeratorString;
644 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646 enumeratorString += string;
647
648 if(string != strings.back())
649 {
650 enumeratorString += '|';
651 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600652 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600653
654 return enumeratorString;
655}
656
657static
658bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
659{
660 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
661 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600662 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600663 return false;
664 }
665
666 return true;
667}
668
669static
670std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
671{
672 if(!ValidateEnumerator(enumerator))
673 {
674 return "unrecognized enumerator";
675 }
676
677 std::vector<std::string> strings;
678 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
679 {
680 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
681 }
682
683 std::string enumeratorString;
684 for(auto const& string : strings)
685 {
686 enumeratorString += string;
687
688 if(string != strings.back())
689 {
690 enumeratorString += '|';
691 }
692 }
693
694 return enumeratorString;
695}
696
697static
698bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
699{
700 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
701 if(enumerator & (~allFlags))
702 {
703 return false;
704 }
705
706 return true;
707}
708
709static
710std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
711{
712 if(!ValidateEnumerator(enumerator))
713 {
714 return "unrecognized enumerator";
715 }
716
717 std::vector<std::string> strings;
718 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
719 {
720 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
721 }
722
723 std::string enumeratorString;
724 for(auto const& string : strings)
725 {
726 enumeratorString += string;
727
728 if(string != strings.back())
729 {
730 enumeratorString += '|';
731 }
732 }
733
734 return enumeratorString;
735}
736
737static
738bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
739{
740 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
751 if(enumerator & (~allFlags))
752 {
753 return false;
754 }
755
756 return true;
757}
758
759static
760std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
761{
762 if(!ValidateEnumerator(enumerator))
763 {
764 return "unrecognized enumerator";
765 }
766
767 std::vector<std::string> strings;
768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
769 {
770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
771 }
772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
773 {
774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
775 }
776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
777 {
778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
779 }
780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
781 {
782 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
783 }
784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
785 {
786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
787 }
788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
789 {
790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
791 }
792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
793 {
794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
795 }
796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
797 {
798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
799 }
800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
801 {
802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
803 }
804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
805 {
806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
807 }
808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
809 {
810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
811 }
812
813 std::string enumeratorString;
814 for(auto const& string : strings)
815 {
816 enumeratorString += string;
817
818 if(string != strings.back())
819 {
820 enumeratorString += '|';
821 }
822 }
823
824 return enumeratorString;
825}
826
827static
828bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
829{
830 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
831 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
832 VK_QUERY_RESULT_WAIT_BIT |
833 VK_QUERY_RESULT_64_BIT |
834 VK_QUERY_RESULT_DEFAULT);
835 if(enumerator & (~allFlags))
836 {
837 return false;
838 }
839
840 return true;
841}
842
843static
844std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
845{
846 if(!ValidateEnumerator(enumerator))
847 {
848 return "unrecognized enumerator";
849 }
850
851 std::vector<std::string> strings;
852 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_64_BIT)
865 {
866 strings.push_back("VK_QUERY_RESULT_64_BIT");
867 }
868 if(enumerator & VK_QUERY_RESULT_DEFAULT)
869 {
870 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600871 }
872
873 std::string enumeratorString;
874 for(auto const& string : strings)
875 {
876 enumeratorString += string;
877
878 if(string != strings.back())
879 {
880 enumeratorString += '|';
881 }
882 }
883
884 return enumeratorString;
885}
886
887static
888bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
889{
890 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
891 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
892 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
893 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
894 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
895 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
896 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
897 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600898 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600899 if(enumerator & (~allFlags))
900 {
901 return false;
902 }
903
904 return true;
905}
906
907static
908std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
909{
910 if(!ValidateEnumerator(enumerator))
911 {
912 return "unrecognized enumerator";
913 }
914
915 std::vector<std::string> strings;
916 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
951 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600952
953 std::string enumeratorString;
954 for(auto const& string : strings)
955 {
956 enumeratorString += string;
957
958 if(string != strings.back())
959 {
960 enumeratorString += '|';
961 }
962 }
963
964 return enumeratorString;
965}
966
967static
968bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
969{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600970 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
971 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600972 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600973 if(enumerator & (~allFlags))
974 {
975 return false;
976 }
977
978 return true;
979}
980
981static
982std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
983{
984 if(!ValidateEnumerator(enumerator))
985 {
986 return "unrecognized enumerator";
987 }
988
989 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600990 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
993 }
994 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
995 {
996 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
997 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600998 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600999 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001000 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001001 }
1002
1003 std::string enumeratorString;
1004 for(auto const& string : strings)
1005 {
1006 enumeratorString += string;
1007
1008 if(string != strings.back())
1009 {
1010 enumeratorString += '|';
1011 }
1012 }
1013
1014 return enumeratorString;
1015}
1016
1017static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1019{
1020 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001021 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1022 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001024 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001025 if(enumerator & (~allFlags))
1026 {
1027 return false;
1028 }
1029
1030 return true;
1031}
1032
1033static
1034std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1035{
1036 if(!ValidateEnumerator(enumerator))
1037 {
1038 return "unrecognized enumerator";
1039 }
1040
1041 std::vector<std::string> strings;
1042 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1045 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001046 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1049 }
1050 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1053 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001054 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1055 {
1056 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1057 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001058 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001059 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001060 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001061 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001062
1063 std::string enumeratorString;
1064 for(auto const& string : strings)
1065 {
1066 enumeratorString += string;
1067
1068 if(string != strings.back())
1069 {
1070 enumeratorString += '|';
1071 }
1072 }
1073
1074 return enumeratorString;
1075}
1076
1077static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001078bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001079{
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001080 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1081 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001091std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001099 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001100 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001101 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 }
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001103 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001104 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001105 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 }
1107
1108 std::string enumeratorString;
1109 for(auto const& string : strings)
1110 {
1111 enumeratorString += string;
1112
1113 if(string != strings.back())
1114 {
1115 enumeratorString += '|';
1116 }
1117 }
1118
1119 return enumeratorString;
1120}
1121
1122static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001123bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1124{
1125 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1126 VK_CHANNEL_B_BIT |
1127 VK_CHANNEL_G_BIT |
1128 VK_CHANNEL_R_BIT);
1129 if(enumerator & (~allFlags))
1130 {
1131 return false;
1132 }
1133
1134 return true;
1135}
1136
1137static
1138std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1139{
1140 if(!ValidateEnumerator(enumerator))
1141 {
1142 return "unrecognized enumerator";
1143 }
1144
1145 std::vector<std::string> strings;
1146 if(enumerator & VK_CHANNEL_A_BIT)
1147 {
1148 strings.push_back("VK_CHANNEL_A_BIT");
1149 }
1150 if(enumerator & VK_CHANNEL_B_BIT)
1151 {
1152 strings.push_back("VK_CHANNEL_B_BIT");
1153 }
1154 if(enumerator & VK_CHANNEL_G_BIT)
1155 {
1156 strings.push_back("VK_CHANNEL_G_BIT");
1157 }
1158 if(enumerator & VK_CHANNEL_R_BIT)
1159 {
1160 strings.push_back("VK_CHANNEL_R_BIT");
1161 }
1162
1163 std::string enumeratorString;
1164 for(auto const& string : strings)
1165 {
1166 enumeratorString += string;
1167
1168 if(string != strings.back())
1169 {
1170 enumeratorString += '|';
1171 }
1172 }
1173
1174 return enumeratorString;
1175}
1176
1177static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001178bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001179{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001180 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1181 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1182 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001183 if(enumerator & (~allFlags))
1184 {
1185 return false;
1186 }
1187
1188 return true;
1189}
1190
1191static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001192std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001193{
1194 if(!ValidateEnumerator(enumerator))
1195 {
1196 return "unrecognized enumerator";
1197 }
1198
1199 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001200 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001201 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1203 }
1204 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1205 {
1206 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1207 }
1208 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1209 {
1210 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001211 }
1212
1213 std::string enumeratorString;
1214 for(auto const& string : strings)
1215 {
1216 enumeratorString += string;
1217
1218 if(string != strings.back())
1219 {
1220 enumeratorString += '|';
1221 }
1222 }
1223
1224 return enumeratorString;
1225}
1226
1227static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001229{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001230 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1231 VK_SHADER_STAGE_FRAGMENT_BIT |
1232 VK_SHADER_STAGE_GEOMETRY_BIT |
1233 VK_SHADER_STAGE_COMPUTE_BIT |
1234 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1235 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1236 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001237 if(enumerator & (~allFlags))
1238 {
1239 return false;
1240 }
1241
1242 return true;
1243}
1244
1245static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001247{
1248 if(!ValidateEnumerator(enumerator))
1249 {
1250 return "unrecognized enumerator";
1251 }
1252
1253 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001255 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001257 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001258 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001259 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001261 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001263 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001264 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1265 }
1266 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1267 {
1268 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1269 }
1270 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1271 {
1272 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1273 }
1274 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1275 {
1276 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1277 }
1278 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1279 {
1280 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001281 }
1282
1283 std::string enumeratorString;
1284 for(auto const& string : strings)
1285 {
1286 enumeratorString += string;
1287
1288 if(string != strings.back())
1289 {
1290 enumeratorString += '|';
1291 }
1292 }
1293
1294 return enumeratorString;
1295}
1296
1297static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001298bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001299{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001300 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001301 if(enumerator & (~allFlags))
1302 {
1303 return false;
1304 }
1305
1306 return true;
1307}
1308
1309static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001310std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001311{
1312 if(!ValidateEnumerator(enumerator))
1313 {
1314 return "unrecognized enumerator";
1315 }
1316
1317 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001318 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001319 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001320 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001321 }
1322
1323 std::string enumeratorString;
1324 for(auto const& string : strings)
1325 {
1326 enumeratorString += string;
1327
1328 if(string != strings.back())
1329 {
1330 enumeratorString += '|';
1331 }
1332 }
1333
1334 return enumeratorString;
1335}
1336
1337static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001338bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001339{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001340 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1341 VK_PIPELINE_STAGE_HOST_BIT |
1342 VK_PIPELINE_STAGE_TRANSFER_BIT |
1343 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1344 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1345 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001346 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1347 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1348 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1349 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1350 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1351 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1352 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1353 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1354 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1355 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001356 if(enumerator & (~allFlags))
1357 {
1358 return false;
1359 }
1360
1361 return true;
1362}
1363
1364static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001365std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001366{
1367 if(!ValidateEnumerator(enumerator))
1368 {
1369 return "unrecognized enumerator";
1370 }
1371
1372 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001373 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001374 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001375 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001376 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001377 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001378 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001379 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001380 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001381 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001382 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001383 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001384 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001385 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001386 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001387 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001388 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001389 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001390 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001391 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001392 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001393 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001394 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001395 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001396 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001397 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001398 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001399 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001400 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001401 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001402 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001403 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001404 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001405 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001406 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001407 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001408 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001409 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001410 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001411 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1412 }
1413 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1414 {
1415 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1416 }
1417 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1418 {
1419 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1420 }
1421 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1422 {
1423 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1424 }
1425 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1426 {
1427 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1428 }
1429 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1430 {
1431 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1432 }
1433 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1434 {
1435 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 }
1437
1438 std::string enumeratorString;
1439 for(auto const& string : strings)
1440 {
1441 enumeratorString += string;
1442
1443 if(string != strings.back())
1444 {
1445 enumeratorString += '|';
1446 }
1447 }
1448
1449 return enumeratorString;
1450}
1451
1452static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001453bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001454{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001455 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1456 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1457 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1458 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1459 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001460 if(enumerator & (~allFlags))
1461 {
1462 return false;
1463 }
1464
1465 return true;
1466}
1467
1468static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001469std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001470{
1471 if(!ValidateEnumerator(enumerator))
1472 {
1473 return "unrecognized enumerator";
1474 }
1475
1476 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001477 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001478 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001479 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001480 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001481 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001482 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001483 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001484 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001485 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001486 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001487 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1488 }
1489 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1490 {
1491 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1492 }
1493 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1494 {
1495 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001496 }
1497
1498 std::string enumeratorString;
1499 for(auto const& string : strings)
1500 {
1501 enumeratorString += string;
1502
1503 if(string != strings.back())
1504 {
1505 enumeratorString += '|';
1506 }
1507 }
1508
1509 return enumeratorString;
1510}
1511
1512static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001513bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001514{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001515 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1516 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1517 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1518 VK_MEMORY_INPUT_SHADER_READ_BIT |
1519 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1520 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1521 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1522 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1523 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1524 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001525 if(enumerator & (~allFlags))
1526 {
1527 return false;
1528 }
1529
1530 return true;
1531}
1532
1533static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001535{
1536 if(!ValidateEnumerator(enumerator))
1537 {
1538 return "unrecognized enumerator";
1539 }
1540
1541 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001543 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001544 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1545 }
1546 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1547 {
1548 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1549 }
1550 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1551 {
1552 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1553 }
1554 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1555 {
1556 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1557 }
1558 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1559 {
1560 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1561 }
1562 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1563 {
1564 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1565 }
1566 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1567 {
1568 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1569 }
1570 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1571 {
1572 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1573 }
1574 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1575 {
1576 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1577 }
1578 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1579 {
1580 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001581 }
1582
1583 std::string enumeratorString;
1584 for(auto const& string : strings)
1585 {
1586 enumeratorString += string;
1587
1588 if(string != strings.back())
1589 {
1590 enumeratorString += '|';
1591 }
1592 }
1593
1594 return enumeratorString;
1595}
1596
1597static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001598bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001599{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001600 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1601 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001602 if(enumerator & (~allFlags))
1603 {
1604 return false;
1605 }
1606
1607 return true;
1608}
1609
1610static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001611std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612{
1613 if(!ValidateEnumerator(enumerator))
1614 {
1615 return "unrecognized enumerator";
1616 }
1617
1618 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001619 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001620 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001621 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001622 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001623 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001624 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001625 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001626 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001627
1628 std::string enumeratorString;
1629 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001630 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001631 enumeratorString += string;
1632
1633 if(string != strings.back())
1634 {
1635 enumeratorString += '|';
1636 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001637 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001638
1639 return enumeratorString;
1640}
1641
1642static
1643bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1644{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001645 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001646 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001647 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001648 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001649 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001650
1651 return true;
1652}
1653
1654static
1655std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1656{
1657 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001658 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001659 return "unrecognized enumerator";
1660 }
1661
1662 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001663 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001664 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001665 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001666 }
1667
1668 std::string enumeratorString;
1669 for(auto const& string : strings)
1670 {
1671 enumeratorString += string;
1672
1673 if(string != strings.back())
1674 {
1675 enumeratorString += '|';
1676 }
1677 }
1678
1679 return enumeratorString;
1680}
1681
1682static
1683bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1684{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001685 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1686 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001687 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1688 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1689 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1690 if(enumerator & (~allFlags))
1691 {
1692 return false;
1693 }
1694
1695 return true;
1696}
1697
1698static
1699std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1700{
1701 if(!ValidateEnumerator(enumerator))
1702 {
1703 return "unrecognized enumerator";
1704 }
1705
1706 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001707 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1708 {
1709 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1710 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001711 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1712 {
1713 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1714 }
1715 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1716 {
1717 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1718 }
1719 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1720 {
1721 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1722 }
1723 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1724 {
1725 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1726 }
1727
1728 std::string enumeratorString;
1729 for(auto const& string : strings)
1730 {
1731 enumeratorString += string;
1732
1733 if(string != strings.back())
1734 {
1735 enumeratorString += '|';
1736 }
1737 }
1738
1739 return enumeratorString;
1740}
1741
1742static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001743bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001744{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001745 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001746 if(enumerator & (~allFlags))
1747 {
1748 return false;
1749 }
1750
1751 return true;
1752}
1753
1754static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001755std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001756{
1757 if(!ValidateEnumerator(enumerator))
1758 {
1759 return "unrecognized enumerator";
1760 }
1761
1762 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001763 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001764 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001765 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001766 }
1767
1768 std::string enumeratorString;
1769 for(auto const& string : strings)
1770 {
1771 enumeratorString += string;
1772
1773 if(string != strings.back())
1774 {
1775 enumeratorString += '|';
1776 }
1777 }
1778
1779 return enumeratorString;
1780}
1781
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001782static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001783bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001784{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001785 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1786 VK_IMAGE_ASPECT_STENCIL_BIT |
1787 VK_IMAGE_ASPECT_DEPTH_BIT |
1788 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001789 if(enumerator & (~allFlags))
1790 {
1791 return false;
1792 }
1793
1794 return true;
1795}
1796
1797static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001798std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001799{
1800 if(!ValidateEnumerator(enumerator))
1801 {
1802 return "unrecognized enumerator";
1803 }
1804
1805 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001806 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001807 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001808 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1809 }
1810 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1811 {
1812 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1813 }
1814 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1815 {
1816 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1817 }
1818 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1819 {
1820 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1821 }
1822
1823 std::string enumeratorString;
1824 for(auto const& string : strings)
1825 {
1826 enumeratorString += string;
1827
1828 if(string != strings.back())
1829 {
1830 enumeratorString += '|';
1831 }
1832 }
1833
1834 return enumeratorString;
1835}
1836
1837static
1838bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1839{
1840 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1841 if(enumerator & (~allFlags))
1842 {
1843 return false;
1844 }
1845
1846 return true;
1847}
1848
1849static
1850std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1851{
1852 if(!ValidateEnumerator(enumerator))
1853 {
1854 return "unrecognized enumerator";
1855 }
1856
1857 std::vector<std::string> strings;
1858 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1859 {
1860 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001861 }
1862
1863 std::string enumeratorString;
1864 for(auto const& string : strings)
1865 {
1866 enumeratorString += string;
1867
1868 if(string != strings.back())
1869 {
1870 enumeratorString += '|';
1871 }
1872 }
1873
1874 return enumeratorString;
1875}
1876
Jeremy Hayes99a96322015-06-26 12:48:09 -06001877VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1878 const VkInstanceCreateInfo* pCreateInfo,
1879 VkInstance* pInstance)
1880{
1881 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1882 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1883
1884 if (result == VK_SUCCESS) {
1885 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1886 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001887 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001888
1889 InitParamChecker(data);
1890 }
1891
1892 return result;
1893}
1894
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001895VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001896 VkInstance instance)
1897{
1898 // Grab the key before the instance is destroyed.
1899 dispatch_key key = get_dispatch_key(instance);
1900 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001901 pTable->DestroyInstance(instance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001902
1903 // Clean up logging callback, if any
1904 layer_data *data = get_my_data_ptr(key, layer_data_map);
1905 if(data->logging_callback)
1906 {
1907 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1908 }
1909
1910 layer_debug_report_destroy_instance(mid(instance));
1911 layer_data_map.erase(pTable);
1912
1913 pc_instance_table_map.erase(key);
1914 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001915}
1916
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001917bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001918 VkInstance instance,
1919 uint32_t* pPhysicalDeviceCount,
1920 VkPhysicalDevice* pPhysicalDevices,
1921 VkResult result)
1922{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001923
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001924 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001925 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001926 }
1927
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001928 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001929 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001930 }
1931
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001932 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001933 {
1934 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001935 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1936 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001937 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001938
1939 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001940}
1941
1942VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1943 VkInstance instance,
1944 uint32_t* pPhysicalDeviceCount,
1945 VkPhysicalDevice* pPhysicalDevices)
1946{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001947 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1948
1949 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1950
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001951 return result;
1952}
1953
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001954bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001955 VkPhysicalDevice physicalDevice,
1956 VkPhysicalDeviceFeatures* pFeatures,
1957 VkResult result)
1958{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001959
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001960 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001961 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001962 }
1963
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001964 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001965 {
1966 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001967 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1968 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001969 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001970
1971 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001972}
1973
1974VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
1975 VkPhysicalDevice physicalDevice,
1976 VkPhysicalDeviceFeatures* pFeatures)
1977{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001978 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
1979
1980 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
1981
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001982 return result;
1983}
1984
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001985bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001986 VkPhysicalDevice physicalDevice,
1987 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001988 VkFormatProperties* pFormatProperties,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001989 VkResult result)
1990{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001991
1992 if(format < VK_FORMAT_BEGIN_RANGE ||
1993 format > VK_FORMAT_END_RANGE)
1994 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001995 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001996 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001997 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001998 }
1999
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002000 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002001 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002002 }
2003
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002004 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002005 {
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06002006 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002007 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2008 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002009 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002010
2011 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002012}
2013
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06002014VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002015 VkPhysicalDevice physicalDevice,
2016 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002017 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002018{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002020
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002021 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2022
2023 return result;
2024}
2025
2026bool PostGetPhysicalDeviceImageFormatProperties(
2027 VkPhysicalDevice physicalDevice,
2028 VkFormat format,
2029 VkImageType type,
2030 VkImageTiling tiling,
2031 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002032 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033 VkImageFormatProperties* pImageFormatProperties,
2034 VkResult result)
2035{
2036
2037 if(format < VK_FORMAT_BEGIN_RANGE ||
2038 format > VK_FORMAT_END_RANGE)
2039 {
2040 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2041 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2042 return false;
2043 }
2044
2045 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2046 type > VK_IMAGE_TYPE_END_RANGE)
2047 {
2048 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2049 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2050 return false;
2051 }
2052
2053 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2054 tiling > VK_IMAGE_TILING_END_RANGE)
2055 {
2056 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2057 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2058 return false;
2059 }
2060
2061
2062 if(pImageFormatProperties != nullptr)
2063 {
2064 }
2065
2066 if(result < VK_SUCCESS)
2067 {
2068 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2069 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2070 return false;
2071 }
2072
2073 return true;
2074}
2075
2076VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2077 VkPhysicalDevice physicalDevice,
2078 VkFormat format,
2079 VkImageType type,
2080 VkImageTiling tiling,
2081 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002082 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002083 VkImageFormatProperties* pImageFormatProperties)
2084{
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002085 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002086
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002087 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002089 return result;
2090}
2091
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002092bool PostGetPhysicalDeviceProperties(
2093 VkPhysicalDevice physicalDevice,
2094 VkPhysicalDeviceProperties* pProperties,
2095 VkResult result)
2096{
2097
2098 if(pProperties != nullptr)
2099 {
2100 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2101 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2102 {
2103 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2104 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2105 return false;
2106 }
2107 }
2108
2109 if(result < VK_SUCCESS)
2110 {
2111 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2112 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2113 return false;
2114 }
2115
2116 return true;
2117}
2118
2119VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2120 VkPhysicalDevice physicalDevice,
2121 VkPhysicalDeviceProperties* pProperties)
2122{
2123 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2124
2125 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2126
2127 return result;
2128}
2129
Cody Northropd0802882015-08-03 17:04:53 -06002130bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002131 VkPhysicalDevice physicalDevice,
2132 uint32_t* pCount,
Cody Northropd0802882015-08-03 17:04:53 -06002133 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002134 VkResult result)
2135{
2136
Cody Northropd0802882015-08-03 17:04:53 -06002137 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002138 {
2139 }
2140
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002141 if(pQueueProperties != nullptr)
2142 {
2143 }
2144
2145 if(result < VK_SUCCESS)
2146 {
Cody Northropd0802882015-08-03 17:04:53 -06002147 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002148 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2149 return false;
2150 }
2151
2152 return true;
2153}
2154
2155VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2156 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002157 uint32_t* pCount,
2158 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002159{
Cody Northropd0802882015-08-03 17:04:53 -06002160 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002161
Cody Northropd0802882015-08-03 17:04:53 -06002162 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002163
2164 return result;
2165}
2166
2167bool PostGetPhysicalDeviceMemoryProperties(
2168 VkPhysicalDevice physicalDevice,
2169 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2170 VkResult result)
2171{
2172
2173 if(pMemoryProperties != nullptr)
2174 {
2175 }
2176
2177 if(result < VK_SUCCESS)
2178 {
2179 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2180 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2181 return false;
2182 }
2183
2184 return true;
2185}
2186
2187VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2188 VkPhysicalDevice physicalDevice,
2189 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2190{
2191 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2192
2193 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2194
2195 return result;
2196}
2197
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2199 VkPhysicalDevice physicalDevice,
2200 const VkDeviceCreateInfo* pCreateInfo,
2201 VkDevice* pDevice)
2202{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002203 /*
2204 * NOTE: The loader fills in the ICD's device object in *pDevice.
2205 * Use that object to get the dispatch table.
2206 *
2207 * NOTE: We do not validate physicalDevice or any dispatchable
2208 * object as the first parameter. We couldn't get here if it was wrong!
2209 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002210 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2212 if(result == VK_SUCCESS)
2213 {
2214 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2215 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2216 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2217 }
2218
2219 return result;
2220}
2221
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002222VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223 VkDevice device)
2224{
2225 layer_debug_report_destroy_device(device);
2226
2227 dispatch_key key = get_dispatch_key(device);
2228#if DISPATCH_MAP_DEBUG
2229 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2230#endif
2231
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002232 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 pc_device_table_map.erase(key);
2234 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235}
2236
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002237bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002238 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002239 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 uint32_t queueIndex,
2241 VkQueue* pQueue,
2242 VkResult result)
2243{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002244
2245
2246
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002247 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249 }
2250
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002251 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252 {
2253 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2255 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002257
2258 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002259}
2260
2261VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2262 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002263 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264 uint32_t queueIndex,
2265 VkQueue* pQueue)
2266{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002267 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002269 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270
2271 return result;
2272}
2273
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002274bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275 VkQueue queue,
2276 const VkCmdBuffer* pCmdBuffers)
2277{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002278 if(pCmdBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002281
2282 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002283}
2284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002285bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002286 VkQueue queue,
2287 uint32_t cmdBufferCount,
2288 VkFence fence,
2289 VkResult result)
2290{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002291
2292
Jeremy Hayes99a96322015-06-26 12:48:09 -06002293
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002294 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002295 {
2296 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002297 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2298 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002300
2301 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002302}
2303
2304VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2305 VkQueue queue,
2306 uint32_t cmdBufferCount,
2307 const VkCmdBuffer* pCmdBuffers,
2308 VkFence fence)
2309{
2310 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002311
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2313
2314 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2315
2316 return result;
2317}
2318
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002319bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002320 VkQueue queue,
2321 VkResult result)
2322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002324 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002325 {
2326 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002327 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2328 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002330
2331 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002332}
2333
2334VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2335 VkQueue queue)
2336{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002337 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2338
2339 PostQueueWaitIdle(queue, result);
2340
2341 return result;
2342}
2343
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002344bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345 VkDevice device,
2346 VkResult result)
2347{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002348
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002349 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002350 {
2351 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002352 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2353 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002355
2356 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357}
2358
2359VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2360 VkDevice device)
2361{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002362 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2363
2364 PostDeviceWaitIdle(device, result);
2365
2366 return result;
2367}
2368
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002369bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002370 VkDevice device,
2371 const VkMemoryAllocInfo* pAllocInfo)
2372{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002373 if(pAllocInfo != nullptr)
2374 {
2375 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002377 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002378 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002379 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002380 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002382
2383 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002384}
2385
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387 VkDevice device,
2388 VkDeviceMemory* pMem,
2389 VkResult result)
2390{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002392 if(pMem != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002393 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002394 }
2395
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002396 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002397 {
2398 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2400 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002402
2403 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002404}
2405
2406VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2407 VkDevice device,
2408 const VkMemoryAllocInfo* pAllocInfo,
2409 VkDeviceMemory* pMem)
2410{
2411 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002412
Jeremy Hayes99a96322015-06-26 12:48:09 -06002413 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2414
2415 PostAllocMemory(device, pMem, result);
2416
2417 return result;
2418}
2419
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002420bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 VkDevice device,
2422 VkDeviceMemory mem,
2423 VkDeviceSize offset,
2424 VkDeviceSize size,
2425 VkMemoryMapFlags flags,
2426 void** ppData,
2427 VkResult result)
2428{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002429
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430
2431
2432
2433
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002434 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002436 }
2437
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002438 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002439 {
2440 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2442 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002443 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002444
2445 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002446}
2447
2448VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2449 VkDevice device,
2450 VkDeviceMemory mem,
2451 VkDeviceSize offset,
2452 VkDeviceSize size,
2453 VkMemoryMapFlags flags,
2454 void** ppData)
2455{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002456 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2457
2458 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2459
2460 return result;
2461}
2462
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002463bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 VkDevice device,
2465 const VkMappedMemoryRange* pMemRanges)
2466{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002467 if(pMemRanges != nullptr)
2468 {
2469 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002470 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002472 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002473 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002474 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002475 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476
2477 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478}
2479
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002481 VkDevice device,
2482 uint32_t memRangeCount,
2483 VkResult result)
2484{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002485
2486
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002487 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002488 {
2489 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2491 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002492 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002493
2494 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002495}
2496
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002497VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002498 VkDevice device,
2499 uint32_t memRangeCount,
2500 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002501{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002502 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002503
Jeremy Hayes99a96322015-06-26 12:48:09 -06002504 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002505
Jeremy Hayes99a96322015-06-26 12:48:09 -06002506 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2507
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002508 return result;
2509}
2510
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002511bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002512 VkDevice device,
2513 const VkMappedMemoryRange* pMemRanges)
2514{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002515 if(pMemRanges != nullptr)
2516 {
2517 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002518 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002520 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002521 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002522 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002523 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002524
2525 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002526}
2527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002528bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002529 VkDevice device,
2530 uint32_t memRangeCount,
2531 VkResult result)
2532{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002533
2534
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002535 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002536 {
2537 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002538 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2539 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002540 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002541
2542 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002543}
2544
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002545VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002546 VkDevice device,
2547 uint32_t memRangeCount,
2548 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002549{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002550 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002551
Jeremy Hayes99a96322015-06-26 12:48:09 -06002552 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002553
Jeremy Hayes99a96322015-06-26 12:48:09 -06002554 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2555
Tony Barbourb1250542015-04-16 19:23:13 -06002556 return result;
2557}
2558
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002559bool PostGetDeviceMemoryCommitment(
2560 VkDevice device,
2561 VkDeviceMemory memory,
2562 VkDeviceSize* pCommittedMemoryInBytes,
2563 VkResult result)
2564{
2565
2566
2567 if(pCommittedMemoryInBytes != nullptr)
2568 {
2569 }
2570
2571 if(result < VK_SUCCESS)
2572 {
2573 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2575 return false;
2576 }
2577
2578 return true;
2579}
2580
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002581VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002582 VkDevice device,
2583 VkDeviceMemory memory,
2584 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002585{
2586 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2587
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002588 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2589
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002590 return result;
2591}
2592
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002593bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002594 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002596 VkDeviceMemory mem,
2597 VkDeviceSize memOffset,
2598 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002599{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002600
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002601
Jeremy Hayes99a96322015-06-26 12:48:09 -06002602
2603
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002604 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002605 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002606 std::string reason = "vkBindBufferMemory 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 Hayes99a96322015-06-26 12:48:09 -06002609 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610
2611 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002612}
2613
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002615 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002616 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002617 VkDeviceMemory mem,
2618 VkDeviceSize memOffset)
2619{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002620 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002621
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002622 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002623
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002624 return result;
2625}
2626
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002628 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002629 VkImage image,
2630 VkDeviceMemory mem,
2631 VkDeviceSize memOffset,
2632 VkResult result)
2633{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002634
2635
2636
2637
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002638 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002639 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2641 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2642 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002643 }
2644
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645 return true;
2646}
2647
2648VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2649 VkDevice device,
2650 VkImage image,
2651 VkDeviceMemory mem,
2652 VkDeviceSize memOffset)
2653{
2654 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2655
2656 PostBindImageMemory(device, image, mem, memOffset, result);
2657
2658 return result;
2659}
2660
2661bool PostGetBufferMemoryRequirements(
2662 VkDevice device,
2663 VkBuffer buffer,
2664 VkMemoryRequirements* pMemoryRequirements,
2665 VkResult result)
2666{
2667
2668
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002669 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002670 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002671 }
2672
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002673 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002674 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675 std::string reason = "vkGetBufferMemoryRequirements 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;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002678 }
2679
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002680 return true;
2681}
2682
2683VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2684 VkDevice device,
2685 VkBuffer buffer,
2686 VkMemoryRequirements* pMemoryRequirements)
2687{
2688 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2689
2690 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2691
2692 return result;
2693}
2694
2695bool PostGetImageMemoryRequirements(
2696 VkDevice device,
2697 VkImage image,
2698 VkMemoryRequirements* pMemoryRequirements,
2699 VkResult result)
2700{
2701
2702
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002703 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002704 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002705 }
2706
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002707 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002708 {
2709 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2710 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2711 return false;
2712 }
2713
2714 return true;
2715}
2716
2717VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2718 VkDevice device,
2719 VkImage image,
2720 VkMemoryRequirements* pMemoryRequirements)
2721{
2722 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2723
2724 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2725
2726 return result;
2727}
2728
2729bool PostGetImageSparseMemoryRequirements(
2730 VkDevice device,
2731 VkImage image,
2732 uint32_t* pNumRequirements,
2733 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2734 VkResult result)
2735{
2736
2737
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002738 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002739 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002740 }
2741
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002742 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002743 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002744 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2745 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2746 {
2747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002748 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002749 return false;
2750 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002751 }
2752
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002753 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002754 {
2755 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2756 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2757 return false;
2758 }
2759
2760 return true;
2761}
2762
2763VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2764 VkDevice device,
2765 VkImage image,
2766 uint32_t* pNumRequirements,
2767 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2768{
2769 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2770
2771 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2772
2773 return result;
2774}
2775
2776bool PostGetPhysicalDeviceSparseImageFormatProperties(
2777 VkPhysicalDevice physicalDevice,
2778 VkFormat format,
2779 VkImageType type,
2780 uint32_t samples,
2781 VkImageUsageFlags usage,
2782 VkImageTiling tiling,
2783 uint32_t* pNumProperties,
2784 VkSparseImageFormatProperties* pProperties,
2785 VkResult result)
2786{
2787
2788 if(format < VK_FORMAT_BEGIN_RANGE ||
2789 format > VK_FORMAT_END_RANGE)
2790 {
2791 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002792 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002793 return false;
2794 }
2795
2796 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2797 type > VK_IMAGE_TYPE_END_RANGE)
2798 {
2799 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002800 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002801 return false;
2802 }
2803
2804
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805
2806 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2807 tiling > VK_IMAGE_TILING_END_RANGE)
2808 {
2809 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002810 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002811 return false;
2812 }
2813
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002815 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002816 }
2817
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002818 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002819 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002820 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2821 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2822 {
2823 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002824 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002825 return false;
2826 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002827 }
2828
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002829 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002830 {
2831 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2832 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2833 return false;
2834 }
2835
2836 return true;
2837}
2838
2839VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2840 VkPhysicalDevice physicalDevice,
2841 VkFormat format,
2842 VkImageType type,
2843 uint32_t samples,
2844 VkImageUsageFlags usage,
2845 VkImageTiling tiling,
2846 uint32_t* pNumProperties,
2847 VkSparseImageFormatProperties* pProperties)
2848{
2849 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2850
2851 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2852
2853 return result;
2854}
2855
2856bool PreQueueBindSparseBufferMemory(
2857 VkQueue queue,
2858 const VkSparseMemoryBindInfo* pBindInfo)
2859{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002860 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002861 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002862 }
2863
2864 return true;
2865}
2866
2867bool PostQueueBindSparseBufferMemory(
2868 VkQueue queue,
2869 VkBuffer buffer,
2870 uint32_t numBindings,
2871 VkResult result)
2872{
2873
2874
2875
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002876 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002877 {
2878 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2879 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2880 return false;
2881 }
2882
2883 return true;
2884}
2885
2886VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2887 VkQueue queue,
2888 VkBuffer buffer,
2889 uint32_t numBindings,
2890 const VkSparseMemoryBindInfo* pBindInfo)
2891{
2892 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2893
2894 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2895
2896 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2897
2898 return result;
2899}
2900
2901bool PreQueueBindSparseImageOpaqueMemory(
2902 VkQueue queue,
2903 const VkSparseMemoryBindInfo* pBindInfo)
2904{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002905 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002906 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002907 }
2908
2909 return true;
2910}
2911
2912bool PostQueueBindSparseImageOpaqueMemory(
2913 VkQueue queue,
2914 VkImage image,
2915 uint32_t numBindings,
2916 VkResult result)
2917{
2918
2919
2920
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002921 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002922 {
2923 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2924 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2925 return false;
2926 }
2927
2928 return true;
2929}
2930
2931VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2932 VkQueue queue,
2933 VkImage image,
2934 uint32_t numBindings,
2935 const VkSparseMemoryBindInfo* pBindInfo)
2936{
2937 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2938
2939 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2940
2941 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2942
2943 return result;
2944}
2945
2946bool PreQueueBindSparseImageMemory(
2947 VkQueue queue,
2948 const VkSparseImageMemoryBindInfo* pBindInfo)
2949{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002950 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002951 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002952 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2953 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2954 {
2955 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002956 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002957 return false;
2958 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002959 }
2960
2961 return true;
2962}
2963
2964bool PostQueueBindSparseImageMemory(
2965 VkQueue queue,
2966 VkImage image,
2967 uint32_t numBindings,
2968 VkResult result)
2969{
2970
2971
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002973 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002974 {
2975 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002976 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2977 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002979
2980 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981}
2982
2983VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002984 VkQueue queue,
2985 VkImage image,
2986 uint32_t numBindings,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002987 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988{
2989 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002990
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002991 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002992
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002993 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002995 return result;
2996}
2997
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002998bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002999 VkDevice device,
3000 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003001{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003002 if(pCreateInfo != nullptr)
3003 {
3004 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003005 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003006 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003007 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003008 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003009 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003010 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003011
3012 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003013}
3014
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003015bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003016 VkDevice device,
3017 VkFence* pFence,
3018 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003019{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003020
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003021 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023 }
3024
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003025 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003026 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003027 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3029 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031
3032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033}
3034
3035VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3036 VkDevice device,
3037 const VkFenceCreateInfo* pCreateInfo,
3038 VkFence* pFence)
3039{
3040 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003041
Jeremy Hayes99a96322015-06-26 12:48:09 -06003042 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3043
3044 PostCreateFence(device, pFence, result);
3045
3046 return result;
3047}
3048
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003049bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003050 VkDevice device,
3051 const VkFence* pFences)
3052{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003053 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003054 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003055 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056
3057 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058}
3059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003060bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003061 VkDevice device,
3062 uint32_t fenceCount,
3063 VkResult result)
3064{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003065
3066
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003067 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068 {
3069 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3071 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003073
3074 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075}
3076
3077VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3078 VkDevice device,
3079 uint32_t fenceCount,
3080 const VkFence* pFences)
3081{
3082 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003083
Jeremy Hayes99a96322015-06-26 12:48:09 -06003084 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3085
3086 PostResetFences(device, fenceCount, result);
3087
3088 return result;
3089}
3090
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003091bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003092 VkDevice device,
3093 VkFence fence,
3094 VkResult result)
3095{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096
Jeremy Hayes99a96322015-06-26 12:48:09 -06003097
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003098 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099 {
3100 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3102 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003104
3105 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106}
3107
3108VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3109 VkDevice device,
3110 VkFence fence)
3111{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003112 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3113
3114 PostGetFenceStatus(device, fence, result);
3115
3116 return result;
3117}
3118
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003119bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003120 VkDevice device,
3121 const VkFence* pFences)
3122{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003123 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003125 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003126
3127 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003128}
3129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 VkDevice device,
3132 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003133 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 uint64_t timeout,
3135 VkResult result)
3136{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003137
3138
3139
3140
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003141 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 {
3143 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003144 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3145 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003147
3148 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149}
3150
3151VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3152 VkDevice device,
3153 uint32_t fenceCount,
3154 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003155 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003156 uint64_t timeout)
3157{
3158 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003159
Jeremy Hayes99a96322015-06-26 12:48:09 -06003160 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3161
3162 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3163
3164 return result;
3165}
3166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003167bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 VkDevice device,
3169 const VkSemaphoreCreateInfo* pCreateInfo)
3170{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003171 if(pCreateInfo != nullptr)
3172 {
3173 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003174 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003176 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003180
3181 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003182}
3183
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003184bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 VkDevice device,
3186 VkSemaphore* pSemaphore,
3187 VkResult result)
3188{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003190 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192 }
3193
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003194 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195 {
3196 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3198 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003199 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003200
3201 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202}
3203
3204VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3205 VkDevice device,
3206 const VkSemaphoreCreateInfo* pCreateInfo,
3207 VkSemaphore* pSemaphore)
3208{
3209 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003210
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3212
3213 PostCreateSemaphore(device, pSemaphore, result);
3214
3215 return result;
3216}
3217
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003218bool PostQueueSignalSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 VkQueue queue,
3220 VkSemaphore semaphore,
3221 VkResult result)
3222{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003223
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003225 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226 {
3227 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003228 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3229 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003231
3232 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003233}
3234
3235VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3236 VkQueue queue,
3237 VkSemaphore semaphore)
3238{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3240
3241 PostQueueSignalSemaphore(queue, semaphore, result);
3242
3243 return result;
3244}
3245
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003246bool PostQueueWaitSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003247 VkQueue queue,
3248 VkSemaphore semaphore,
3249 VkResult result)
3250{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251
Jeremy Hayes99a96322015-06-26 12:48:09 -06003252
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003253 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254 {
3255 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003256 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259
3260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261}
3262
3263VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3264 VkQueue queue,
3265 VkSemaphore semaphore)
3266{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3268
3269 PostQueueWaitSemaphore(queue, semaphore, result);
3270
3271 return result;
3272}
3273
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003274bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 VkDevice device,
3276 const VkEventCreateInfo* pCreateInfo)
3277{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003278 if(pCreateInfo != nullptr)
3279 {
3280 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003283 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003284 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003285 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003286 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003287
3288 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289}
3290
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003291bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 VkDevice device,
3293 VkEvent* pEvent,
3294 VkResult result)
3295{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003297 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003299 }
3300
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003301 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003302 {
3303 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3305 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003306 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003307
3308 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003309}
3310
3311VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3312 VkDevice device,
3313 const VkEventCreateInfo* pCreateInfo,
3314 VkEvent* pEvent)
3315{
3316 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003317
Jeremy Hayes99a96322015-06-26 12:48:09 -06003318 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3319
3320 PostCreateEvent(device, pEvent, result);
3321
3322 return result;
3323}
3324
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003325bool PostGetEventStatus(
3326 VkDevice device,
3327 VkEvent event,
3328 VkResult result)
3329{
3330
Jeremy Hayes99a96322015-06-26 12:48:09 -06003331
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003332 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333 {
3334 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3336 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003338
3339 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003340}
3341
3342VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3343 VkDevice device,
3344 VkEvent event)
3345{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3347
3348 PostGetEventStatus(device, event, result);
3349
3350 return result;
3351}
3352
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003353bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354 VkDevice device,
3355 VkEvent event,
3356 VkResult result)
3357{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003358
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 {
3362 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3364 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003365 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003366
3367 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003368}
3369
3370VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3371 VkDevice device,
3372 VkEvent event)
3373{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003374 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3375
3376 PostSetEvent(device, event, result);
3377
3378 return result;
3379}
3380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003381bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 VkDevice device,
3383 VkEvent event,
3384 VkResult result)
3385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003386
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003388 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 {
3390 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3392 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003393 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003394
3395 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003396}
3397
3398VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3399 VkDevice device,
3400 VkEvent event)
3401{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3403
3404 PostResetEvent(device, event, result);
3405
3406 return result;
3407}
3408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003409bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003410 VkDevice device,
3411 const VkQueryPoolCreateInfo* pCreateInfo)
3412{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003413 if(pCreateInfo != nullptr)
3414 {
3415 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003418 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003419 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420 }
3421 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3422 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3423 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003425 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003426 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003428 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003429
3430 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431}
3432
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003433bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003434 VkDevice device,
3435 VkQueryPool* pQueryPool,
3436 VkResult result)
3437{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003438
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003439 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003440 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003441 }
3442
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003443 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003444 {
3445 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3447 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003448 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003449
3450 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003451}
3452
3453VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3454 VkDevice device,
3455 const VkQueryPoolCreateInfo* pCreateInfo,
3456 VkQueryPool* pQueryPool)
3457{
3458 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003459
Jeremy Hayes99a96322015-06-26 12:48:09 -06003460 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3461
3462 PostCreateQueryPool(device, pQueryPool, result);
3463
3464 return result;
3465}
3466
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003467bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003468 VkDevice device,
3469 VkQueryPool queryPool,
3470 uint32_t startQuery,
3471 uint32_t queryCount,
3472 size_t* pDataSize,
3473 void* pData,
3474 VkQueryResultFlags flags,
3475 VkResult result)
3476{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478
3479
3480
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003481 if(pDataSize != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003482 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003483 }
3484
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003485 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003486 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003487 }
3488
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003490 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003491 {
3492 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003493 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3494 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003495 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003496
3497 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003498}
3499
3500VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3501 VkDevice device,
3502 VkQueryPool queryPool,
3503 uint32_t startQuery,
3504 uint32_t queryCount,
3505 size_t* pDataSize,
3506 void* pData,
3507 VkQueryResultFlags flags)
3508{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003509 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3510
3511 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3512
3513 return result;
3514}
3515
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003516bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003517 VkDevice device,
3518 const VkBufferCreateInfo* pCreateInfo)
3519{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003520 if(pCreateInfo != nullptr)
3521 {
3522 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003523 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003525 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003526 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003528 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3529 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003530 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003532 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003533 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003534 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003535 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003536 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003537 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003538 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003539
3540 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003541}
3542
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003543bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003544 VkDevice device,
3545 VkBuffer* pBuffer,
3546 VkResult result)
3547{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003550 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003551 }
3552
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003553 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003554 {
3555 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003556 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3557 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003559
3560 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003561}
3562
3563VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3564 VkDevice device,
3565 const VkBufferCreateInfo* pCreateInfo,
3566 VkBuffer* pBuffer)
3567{
3568 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003569
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3571
3572 PostCreateBuffer(device, pBuffer, result);
3573
3574 return result;
3575}
3576
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003577bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578 VkDevice device,
3579 const VkBufferViewCreateInfo* pCreateInfo)
3580{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003581 if(pCreateInfo != nullptr)
3582 {
3583 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003584 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003586 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003587 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003588 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003589 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3590 pCreateInfo->format > VK_FORMAT_END_RANGE)
3591 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003592 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003593 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003594 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003595 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003596 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003597
3598 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003599}
3600
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003601bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003602 VkDevice device,
3603 VkBufferView* pView,
3604 VkResult result)
3605{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003606
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003607 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003608 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003609 }
3610
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003611 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003612 {
3613 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3615 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003616 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003617
3618 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003619}
3620
3621VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3622 VkDevice device,
3623 const VkBufferViewCreateInfo* pCreateInfo,
3624 VkBufferView* pView)
3625{
3626 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003627
Jeremy Hayes99a96322015-06-26 12:48:09 -06003628 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3629
3630 PostCreateBufferView(device, pView, result);
3631
3632 return result;
3633}
3634
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003635bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003636 VkDevice device,
3637 const VkImageCreateInfo* pCreateInfo)
3638{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003639 if(pCreateInfo != nullptr)
3640 {
3641 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003642 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003644 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003645 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003646 }
3647 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3648 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3649 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003650 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003651 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003652 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003653 }
3654 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3655 pCreateInfo->format > VK_FORMAT_END_RANGE)
3656 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003657 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003658 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003659 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003660 }
3661 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3662 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3663 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003664 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003665 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003666 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003667 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003668 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3669 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003670 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003671 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3672 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003673 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003674 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003675 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003676 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003677 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003678 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003679
3680 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003681}
3682
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003683bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003684 VkDevice device,
3685 VkImage* pImage,
3686 VkResult result)
3687{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003688
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003689 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003690 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003691 }
3692
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003693 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003694 {
3695 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3697 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003698 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003699
3700 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003701}
3702
Jeremy Hayes99a96322015-06-26 12:48:09 -06003703VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3704 VkDevice device,
3705 const VkImageCreateInfo* pCreateInfo,
3706 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003707{
3708 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003709
Jeremy Hayes99a96322015-06-26 12:48:09 -06003710 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3711
3712 PostCreateImage(device, pImage, result);
3713
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003714 return result;
3715}
3716
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003717bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003718 VkDevice device,
3719 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003720{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003721 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003722 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003723 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3724 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3725 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003727 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003728 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003729 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003730 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003731
3732 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003733}
3734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003735bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003736 VkDevice device,
3737 VkImage image,
3738 VkSubresourceLayout* pLayout,
3739 VkResult result)
3740{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003741
Jeremy Hayes99a96322015-06-26 12:48:09 -06003742
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003743 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003744 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003745 }
3746
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003747 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003748 {
3749 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003750 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3751 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003752 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003753
3754 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003755}
3756
3757VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3758 VkDevice device,
3759 VkImage image,
3760 const VkImageSubresource* pSubresource,
3761 VkSubresourceLayout* pLayout)
3762{
3763 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003764
Jeremy Hayes99a96322015-06-26 12:48:09 -06003765 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3766
3767 PostGetImageSubresourceLayout(device, image, pLayout, result);
3768
3769 return result;
3770}
3771
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003772bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003773 VkDevice device,
3774 const VkImageViewCreateInfo* pCreateInfo)
3775{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003776 if(pCreateInfo != nullptr)
3777 {
3778 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003779 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003782 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003783 }
3784 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3785 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3786 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003787 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003788 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003789 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003790 }
3791 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3792 pCreateInfo->format > VK_FORMAT_END_RANGE)
3793 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003794 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003795 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003796 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003797 }
3798 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3799 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3800 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003801 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003802 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003803 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003804 }
3805 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3806 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3807 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003808 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003810 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003811 }
3812 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3813 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3814 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003816 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003817 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003818 }
3819 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3820 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3821 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003823 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003824 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003825 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003827
3828 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003829}
3830
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003831bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003832 VkDevice device,
3833 VkImageView* pView,
3834 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003835{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003836
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003837 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003838 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003839 }
3840
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003841 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003842 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003843 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3845 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003846 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003847
3848 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003849}
3850
3851VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3852 VkDevice device,
3853 const VkImageViewCreateInfo* pCreateInfo,
3854 VkImageView* pView)
3855{
3856 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003857
Jeremy Hayes99a96322015-06-26 12:48:09 -06003858 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3859
3860 PostCreateImageView(device, pView, result);
3861
3862 return result;
3863}
3864
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003865bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003866 VkDevice device,
3867 const VkShaderCreateInfo* pCreateInfo)
3868{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003869 if(pCreateInfo != nullptr)
3870 {
3871 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003872 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003874 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003876 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003878 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003879 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003880 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003881
3882 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003883}
3884
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003885bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003886 VkDevice device,
3887 VkShader* pShader,
3888 VkResult result)
3889{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003890
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003891 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003892 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003893 }
3894
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003895 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003896 {
3897 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003898 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3899 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003900 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003901
3902 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003903}
3904
3905VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3906 VkDevice device,
3907 const VkShaderCreateInfo* pCreateInfo,
3908 VkShader* pShader)
3909{
3910 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003911
Jeremy Hayes99a96322015-06-26 12:48:09 -06003912 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3913
3914 PostCreateShader(device, pShader, result);
3915
3916 return result;
3917}
3918
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003919bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003920 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003921 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003922{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 if(pCreateInfo != nullptr)
3924 {
3925 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003926 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003928 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003929 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003930 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003931 if(pCreateInfo->initialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003932 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003933 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003934 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003935
3936 return true;
3937}
3938
3939bool PostCreatePipelineCache(
3940 VkDevice device,
3941 VkPipelineCache* pPipelineCache,
3942 VkResult result)
3943{
3944
3945 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003946 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003947 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003948
3949 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003950 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003951 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003952 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3953 return false;
3954 }
3955
3956 return true;
3957}
3958
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003959VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003960 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003961 const VkPipelineCacheCreateInfo* pCreateInfo,
3962 VkPipelineCache* pPipelineCache)
3963{
3964 PreCreatePipelineCache(device, pCreateInfo);
3965
3966 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3967
3968 PostCreatePipelineCache(device, pPipelineCache, result);
3969
3970 return result;
3971}
3972
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003973bool PostGetPipelineCacheSize(
3974 VkDevice device,
3975 VkPipelineCache pipelineCache)
3976{
3977
3978
3979 return true;
3980}
3981
3982VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
3983 VkDevice device,
3984 VkPipelineCache pipelineCache)
3985{
Jeremy Hayesa663c702015-07-31 12:54:58 -06003986 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003987
3988 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesa663c702015-07-31 12:54:58 -06003989
3990 return result;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003991}
3992
3993bool PostGetPipelineCacheData(
3994 VkDevice device,
3995 VkPipelineCache pipelineCache,
3996 void* pData,
3997 VkResult result)
3998{
3999
4000
4001 if(pData != nullptr)
4002 {
4003 }
4004
4005 if(result < VK_SUCCESS)
4006 {
4007 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4009 return false;
4010 }
4011
4012 return true;
4013}
4014
4015VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4016 VkDevice device,
4017 VkPipelineCache pipelineCache,
4018 void* pData)
4019{
4020 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4021
4022 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4023
4024 return result;
4025}
4026
4027bool PreMergePipelineCaches(
4028 VkDevice device,
4029 const VkPipelineCache* pSrcCaches)
4030{
4031 if(pSrcCaches != nullptr)
4032 {
4033 }
4034
4035 return true;
4036}
4037
4038bool PostMergePipelineCaches(
4039 VkDevice device,
4040 VkPipelineCache destCache,
4041 uint32_t srcCacheCount,
4042 VkResult result)
4043{
4044
4045
4046
4047 if(result < VK_SUCCESS)
4048 {
4049 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4051 return false;
4052 }
4053
4054 return true;
4055}
4056
4057VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4058 VkDevice device,
4059 VkPipelineCache destCache,
4060 uint32_t srcCacheCount,
4061 const VkPipelineCache* pSrcCaches)
4062{
4063 PreMergePipelineCaches(device, pSrcCaches);
4064
4065 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4066
4067 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4068
4069 return result;
4070}
4071
4072bool PreCreateGraphicsPipelines(
4073 VkDevice device,
4074 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4075{
4076 if(pCreateInfos != nullptr)
4077 {
4078 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4079 {
4080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4082 return false;
4083 }
4084 if(pCreateInfos->pStages != nullptr)
4085 {
4086 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4087 {
4088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4089 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4090 return false;
4091 }
4092 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4093 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4094 {
4095 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4096 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4097 return false;
4098 }
4099 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4100 {
4101 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4102 {
4103 }
4104 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4105 {
4106 }
4107 }
4108 }
4109 if(pCreateInfos->pVertexInputState != nullptr)
4110 {
4111 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4112 {
4113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4114 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4115 return false;
4116 }
4117 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4118 {
4119 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4120 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4121 {
4122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4123 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4124 return false;
4125 }
4126 }
4127 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4128 {
4129 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4130 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4131 {
4132 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4133 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4134 return false;
4135 }
4136 }
4137 }
4138 if(pCreateInfos->pInputAssemblyState != nullptr)
4139 {
4140 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4141 {
4142 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4143 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4144 return false;
4145 }
4146 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4147 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4148 {
4149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4150 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4151 return false;
4152 }
4153 }
4154 if(pCreateInfos->pTessellationState != nullptr)
4155 {
4156 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4157 {
4158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4159 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4160 return false;
4161 }
4162 }
4163 if(pCreateInfos->pViewportState != nullptr)
4164 {
4165 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4166 {
4167 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4168 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4169 return false;
4170 }
4171 }
4172 if(pCreateInfos->pRasterState != nullptr)
4173 {
4174 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4175 {
4176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4177 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4178 return false;
4179 }
4180 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4181 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4182 {
4183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4184 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4185 return false;
4186 }
4187 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4188 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4189 {
4190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4191 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4192 return false;
4193 }
4194 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4195 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4196 {
4197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4198 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4199 return false;
4200 }
4201 }
4202 if(pCreateInfos->pMultisampleState != nullptr)
4203 {
4204 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4205 {
4206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4207 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4208 return false;
4209 }
4210 }
4211 if(pCreateInfos->pDepthStencilState != nullptr)
4212 {
4213 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4214 {
4215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4216 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4217 return false;
4218 }
4219 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4220 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4221 {
4222 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4223 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4224 return false;
4225 }
4226 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4227 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4228 {
4229 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4230 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4231 return false;
4232 }
4233 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4234 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4235 {
4236 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4237 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4238 return false;
4239 }
4240 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4241 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4242 {
4243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4244 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4245 return false;
4246 }
4247 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4248 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4249 {
4250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4251 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4252 return false;
4253 }
4254 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4255 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4256 {
4257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4258 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4259 return false;
4260 }
4261 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4262 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4263 {
4264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4265 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4266 return false;
4267 }
4268 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4269 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4270 {
4271 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4272 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4273 return false;
4274 }
4275 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4276 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4277 {
4278 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4279 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4280 return false;
4281 }
4282 }
4283 if(pCreateInfos->pColorBlendState != nullptr)
4284 {
4285 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4286 {
4287 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4288 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4289 return false;
4290 }
4291 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4292 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4293 {
4294 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4295 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4296 return false;
4297 }
4298 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4299 {
4300 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4301 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4302 {
4303 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4304 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4305 return false;
4306 }
4307 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4308 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4309 {
4310 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4311 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4312 return false;
4313 }
4314 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4315 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4316 {
4317 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4318 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4319 return false;
4320 }
4321 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4322 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4323 {
4324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4325 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4326 return false;
4327 }
4328 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4329 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4330 {
4331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4332 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4333 return false;
4334 }
4335 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4336 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4337 {
4338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4339 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4340 return false;
4341 }
4342 }
4343 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004344 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4345 {
4346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4347 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4348 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004349 }
4350
4351 return true;
4352}
4353
4354bool PostCreateGraphicsPipelines(
4355 VkDevice device,
4356 VkPipelineCache pipelineCache,
4357 uint32_t count,
4358 VkPipeline* pPipelines,
4359 VkResult result)
4360{
4361
4362
4363
4364 if(pPipelines != nullptr)
4365 {
4366 }
4367
4368 if(result < VK_SUCCESS)
4369 {
4370 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4371 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4372 return false;
4373 }
4374
4375 return true;
4376}
4377
4378VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4379 VkDevice device,
4380 VkPipelineCache pipelineCache,
4381 uint32_t count,
4382 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4383 VkPipeline* pPipelines)
4384{
4385 PreCreateGraphicsPipelines(device, pCreateInfos);
4386
4387 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4388
4389 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4390
4391 return result;
4392}
4393
4394bool PreCreateComputePipelines(
4395 VkDevice device,
4396 const VkComputePipelineCreateInfo* pCreateInfos)
4397{
4398 if(pCreateInfos != nullptr)
4399 {
4400 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4401 {
4402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4403 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4404 return false;
4405 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004406 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004407 {
4408 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4409 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4410 return false;
4411 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004412 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4413 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004414 {
4415 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4416 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4417 return false;
4418 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004419 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004420 {
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004421 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004422 {
4423 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004424 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004425 {
4426 }
4427 }
4428 }
4429
4430 return true;
4431}
4432
4433bool PostCreateComputePipelines(
4434 VkDevice device,
4435 VkPipelineCache pipelineCache,
4436 uint32_t count,
4437 VkPipeline* pPipelines,
4438 VkResult result)
4439{
4440
4441
4442
4443 if(pPipelines != nullptr)
4444 {
4445 }
4446
4447 if(result < VK_SUCCESS)
4448 {
4449 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4450 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4451 return false;
4452 }
4453
4454 return true;
4455}
4456
4457VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4458 VkDevice device,
4459 VkPipelineCache pipelineCache,
4460 uint32_t count,
4461 const VkComputePipelineCreateInfo* pCreateInfos,
4462 VkPipeline* pPipelines)
4463{
4464 PreCreateComputePipelines(device, pCreateInfos);
4465
4466 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4467
4468 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4469
4470 return result;
4471}
4472
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004473bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004474 VkDevice device,
4475 const VkPipelineLayoutCreateInfo* pCreateInfo)
4476{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004477 if(pCreateInfo != nullptr)
4478 {
4479 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004480 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004482 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004484 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004485 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004486 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004487 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004488 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004490 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004491 }
4492
4493 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004494}
4495
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004496bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004497 VkDevice device,
4498 VkPipelineLayout* pPipelineLayout,
4499 VkResult result)
4500{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004501
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004502 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004503 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004504 }
4505
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004506 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004507 {
4508 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004509 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4510 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004511 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004512
4513 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004514}
4515
4516VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4517 VkDevice device,
4518 const VkPipelineLayoutCreateInfo* pCreateInfo,
4519 VkPipelineLayout* pPipelineLayout)
4520{
4521 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004522
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4524
4525 PostCreatePipelineLayout(device, pPipelineLayout, result);
4526
4527 return result;
4528}
4529
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004530bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004531 VkDevice device,
4532 const VkSamplerCreateInfo* pCreateInfo)
4533{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 if(pCreateInfo != nullptr)
4535 {
4536 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004538 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004539 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004541 }
4542 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4543 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4544 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004546 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004547 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 }
4549 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4550 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4551 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004552 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004553 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004554 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004555 }
4556 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4557 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4558 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004560 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004561 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004562 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004563 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_BEGIN_RANGE ||
4564 pCreateInfo->addressModeU > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004565 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004567 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004570 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_BEGIN_RANGE ||
4571 pCreateInfo->addressModeV > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004572 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004574 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004576 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004577 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_BEGIN_RANGE ||
4578 pCreateInfo->addressModeW > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004579 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004581 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004583 }
4584 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4585 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4586 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004588 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004589 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004590 }
4591 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4592 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4593 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004594 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004595 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004596 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004597 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004598 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004599
4600 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004601}
4602
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004603bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004604 VkDevice device,
4605 VkSampler* pSampler,
4606 VkResult result)
4607{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004608
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004609 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004610 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004611 }
4612
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004613 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004614 {
4615 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4617 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004618 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004619
4620 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004621}
4622
4623VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4624 VkDevice device,
4625 const VkSamplerCreateInfo* pCreateInfo,
4626 VkSampler* pSampler)
4627{
4628 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004629
Jeremy Hayes99a96322015-06-26 12:48:09 -06004630 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4631
4632 PostCreateSampler(device, pSampler, result);
4633
4634 return result;
4635}
4636
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004637bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004638 VkDevice device,
4639 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4640{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004641 if(pCreateInfo != nullptr)
4642 {
4643 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004644 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004645 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004646 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004647 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004648 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004649 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004650 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004651 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4652 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4653 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004654 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004655 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004656 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004657 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004658 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004659 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004660 }
4661 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004662 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004663
4664 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004665}
4666
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004667bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004668 VkDevice device,
4669 VkDescriptorSetLayout* pSetLayout,
4670 VkResult result)
4671{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004672
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004673 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004674 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004675 }
4676
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004677 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004678 {
4679 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004680 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004682 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004683
4684 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004685}
4686
4687VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4688 VkDevice device,
4689 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4690 VkDescriptorSetLayout* pSetLayout)
4691{
4692 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004693
Jeremy Hayes99a96322015-06-26 12:48:09 -06004694 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4695
4696 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4697
4698 return result;
4699}
4700
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004701bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004702 VkDevice device,
4703 const VkDescriptorPoolCreateInfo* pCreateInfo)
4704{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004705 if(pCreateInfo != nullptr)
4706 {
4707 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004708 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004710 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004711 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004712 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004714 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004715 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4716 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4717 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004718 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004719 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004720 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004721 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004722 }
4723 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004724
4725 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004726}
4727
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004728bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004729 VkDevice device,
4730 VkDescriptorPoolUsage poolUsage,
4731 uint32_t maxSets,
4732 VkDescriptorPool* pDescriptorPool,
4733 VkResult result)
4734{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004735
4736 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4737 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4738 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004740 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004741 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004742 }
4743
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004744 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004745
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004746 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004747 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004748 }
4749
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004750 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004751 {
4752 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4754 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004755 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004756
4757 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004758}
4759
4760VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4761 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004762 const VkDescriptorPoolCreateInfo* pCreateInfo,
4763 VkDescriptorPool* pDescriptorPool)
4764{
4765 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004766
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004767 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004768
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004769 PostCreateDescriptorPool(device, pCreateInfo->poolUsage, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004770
4771 return result;
4772}
4773
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004774bool PostResetDescriptorPool(
4775 VkDevice device,
4776 VkDescriptorPool descriptorPool,
4777 VkResult result)
4778{
4779
Jeremy Hayes99a96322015-06-26 12:48:09 -06004780
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004781 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004782 {
4783 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4785 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004786 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004787
4788 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004789}
4790
4791VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4792 VkDevice device,
4793 VkDescriptorPool descriptorPool)
4794{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004795 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4796
4797 PostResetDescriptorPool(device, descriptorPool, result);
4798
4799 return result;
4800}
4801
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004802bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004803 VkDevice device,
4804 const VkDescriptorSetLayout* pSetLayouts)
4805{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004806 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004807 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004808 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004809
4810 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004811}
4812
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004813bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004814 VkDevice device,
4815 VkDescriptorPool descriptorPool,
4816 VkDescriptorSetUsage setUsage,
4817 uint32_t count,
4818 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004819 VkResult result)
4820{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004821
Jeremy Hayes99a96322015-06-26 12:48:09 -06004822
4823 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4824 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4825 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004826 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004828 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004829 }
4830
4831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004832 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004833 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004834 }
4835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004836 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004837 {
4838 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4840 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004841 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004842
4843 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004844}
4845
4846VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4847 VkDevice device,
4848 VkDescriptorPool descriptorPool,
4849 VkDescriptorSetUsage setUsage,
4850 uint32_t count,
4851 const VkDescriptorSetLayout* pSetLayouts,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004852 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004853{
4854 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004855
Cody Northrop1e4f8022015-08-03 12:47:29 -06004856 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004857
Cody Northrop1e4f8022015-08-03 12:47:29 -06004858 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004859
4860 return result;
4861}
4862
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004863bool PreFreeDescriptorSets(
4864 VkDevice device,
4865 const VkDescriptorSet* pDescriptorSets)
4866{
4867 if(pDescriptorSets != nullptr)
4868 {
4869 }
4870
4871 return true;
4872}
4873
4874bool PostFreeDescriptorSets(
4875 VkDevice device,
4876 VkDescriptorPool descriptorPool,
4877 uint32_t count,
4878 VkResult result)
4879{
4880
4881
4882
4883 if(result < VK_SUCCESS)
4884 {
4885 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4886 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4887 return false;
4888 }
4889
4890 return true;
4891}
4892
4893VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4894 VkDevice device,
4895 VkDescriptorPool descriptorPool,
4896 uint32_t count,
4897 const VkDescriptorSet* pDescriptorSets)
4898{
4899 PreFreeDescriptorSets(device, pDescriptorSets);
4900
4901 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4902
4903 PostFreeDescriptorSets(device, descriptorPool, count, result);
4904
4905 return result;
4906}
4907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004908bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004909 VkDevice device,
4910 const VkWriteDescriptorSet* pDescriptorWrites,
4911 const VkCopyDescriptorSet* pDescriptorCopies)
4912{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004913 if(pDescriptorWrites != nullptr)
4914 {
4915 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004916 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004918 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004919 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004920 }
4921 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4922 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4923 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004925 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004926 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004927 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004928 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004929 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4931 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4932 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004933 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004934 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004935 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004936 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004937 }
4938 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004939
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004940 if(pDescriptorCopies != nullptr)
4941 {
4942 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004943 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004944 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004945 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004946 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004947 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004948 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004949
4950 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951}
4952
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004953VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004954 VkDevice device,
4955 uint32_t writeCount,
4956 const VkWriteDescriptorSet* pDescriptorWrites,
4957 uint32_t copyCount,
4958 const VkCopyDescriptorSet* pDescriptorCopies)
4959{
4960 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004962 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004963}
4964
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004965bool PreCreateFramebuffer(
4966 VkDevice device,
4967 const VkFramebufferCreateInfo* pCreateInfo)
4968{
4969 if(pCreateInfo != nullptr)
4970 {
4971 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4972 {
4973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4974 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4975 return false;
4976 }
4977 if(pCreateInfo->pAttachments != nullptr)
4978 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004979 }
4980 }
4981
4982 return true;
4983}
4984
4985bool PostCreateFramebuffer(
4986 VkDevice device,
4987 VkFramebuffer* pFramebuffer,
4988 VkResult result)
4989{
4990
4991 if(pFramebuffer != nullptr)
4992 {
4993 }
4994
4995 if(result < VK_SUCCESS)
4996 {
4997 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4999 return false;
5000 }
5001
5002 return true;
5003}
5004
5005VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5006 VkDevice device,
5007 const VkFramebufferCreateInfo* pCreateInfo,
5008 VkFramebuffer* pFramebuffer)
5009{
5010 PreCreateFramebuffer(device, pCreateInfo);
5011
5012 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5013
5014 PostCreateFramebuffer(device, pFramebuffer, result);
5015
5016 return result;
5017}
5018
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005019bool PreCreateRenderPass(
5020 VkDevice device,
5021 const VkRenderPassCreateInfo* pCreateInfo)
5022{
5023 if(pCreateInfo != nullptr)
5024 {
5025 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5026 {
5027 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5028 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5029 return false;
5030 }
5031 if(pCreateInfo->pAttachments != nullptr)
5032 {
5033 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5034 {
5035 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5036 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5037 return false;
5038 }
5039 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5040 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5041 {
5042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5043 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5044 return false;
5045 }
5046 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5047 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5048 {
5049 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5050 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5051 return false;
5052 }
5053 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5054 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5055 {
5056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5057 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5058 return false;
5059 }
5060 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5061 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5062 {
5063 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5064 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5065 return false;
5066 }
5067 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5068 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5069 {
5070 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5071 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5072 return false;
5073 }
5074 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5075 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5076 {
5077 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5078 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5079 return false;
5080 }
5081 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5082 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5083 {
5084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5085 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5086 return false;
5087 }
5088 }
5089 if(pCreateInfo->pSubpasses != nullptr)
5090 {
5091 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5092 {
5093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5094 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5095 return false;
5096 }
5097 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5098 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5099 {
5100 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5101 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5102 return false;
5103 }
Cody Northropa505dda2015-08-04 11:16:41 -06005104 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005105 {
Cody Northropa505dda2015-08-04 11:16:41 -06005106 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5107 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005108 {
5109 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005110 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005111 return false;
5112 }
5113 }
Cody Northropa505dda2015-08-04 11:16:41 -06005114 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005115 {
Cody Northropa505dda2015-08-04 11:16:41 -06005116 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5117 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005118 {
5119 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005120 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005121 return false;
5122 }
5123 }
Cody Northropa505dda2015-08-04 11:16:41 -06005124 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005125 {
Cody Northropa505dda2015-08-04 11:16:41 -06005126 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5127 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005128 {
5129 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005130 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005131 return false;
5132 }
5133 }
5134 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5135 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5136 {
5137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5138 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5139 return false;
5140 }
Cody Northropa505dda2015-08-04 11:16:41 -06005141 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005142 {
Cody Northropa505dda2015-08-04 11:16:41 -06005143 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5144 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005145 {
5146 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005147 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005148 return false;
5149 }
5150 }
5151 }
5152 if(pCreateInfo->pDependencies != nullptr)
5153 {
5154 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5155 {
5156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5157 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5158 return false;
5159 }
5160 }
5161 }
5162
5163 return true;
5164}
5165
5166bool PostCreateRenderPass(
5167 VkDevice device,
5168 VkRenderPass* pRenderPass,
5169 VkResult result)
5170{
5171
5172 if(pRenderPass != nullptr)
5173 {
5174 }
5175
5176 if(result < VK_SUCCESS)
5177 {
5178 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5179 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5180 return false;
5181 }
5182
5183 return true;
5184}
5185
5186VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5187 VkDevice device,
5188 const VkRenderPassCreateInfo* pCreateInfo,
5189 VkRenderPass* pRenderPass)
5190{
5191 PreCreateRenderPass(device, pCreateInfo);
5192
5193 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5194
5195 PostCreateRenderPass(device, pRenderPass, result);
5196
5197 return result;
5198}
5199
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005200bool PostGetRenderAreaGranularity(
5201 VkDevice device,
5202 VkRenderPass renderPass,
5203 VkExtent2D* pGranularity,
5204 VkResult result)
5205{
5206
5207
5208 if(pGranularity != nullptr)
5209 {
5210 }
5211
5212 if(result < VK_SUCCESS)
5213 {
5214 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5215 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5216 return false;
5217 }
5218
5219 return true;
5220}
5221
5222VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5223 VkDevice device,
5224 VkRenderPass renderPass,
5225 VkExtent2D* pGranularity)
5226{
5227 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5228
5229 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5230
5231 return result;
5232}
5233
5234bool PreCreateCommandPool(
5235 VkDevice device,
5236 const VkCmdPoolCreateInfo* pCreateInfo)
5237{
5238 if(pCreateInfo != nullptr)
5239 {
5240 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5241 {
5242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5243 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5244 return false;
5245 }
5246 }
5247
5248 return true;
5249}
5250
5251bool PostCreateCommandPool(
5252 VkDevice device,
5253 VkCmdPool* pCmdPool,
5254 VkResult result)
5255{
5256
5257 if(pCmdPool != nullptr)
5258 {
5259 }
5260
5261 if(result < VK_SUCCESS)
5262 {
5263 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5264 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5265 return false;
5266 }
5267
5268 return true;
5269}
5270
5271VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5272 VkDevice device,
5273 const VkCmdPoolCreateInfo* pCreateInfo,
5274 VkCmdPool* pCmdPool)
5275{
5276 PreCreateCommandPool(device, pCreateInfo);
5277
5278 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5279
5280 PostCreateCommandPool(device, pCmdPool, result);
5281
5282 return result;
5283}
5284
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005285bool PostResetCommandPool(
5286 VkDevice device,
5287 VkCmdPool cmdPool,
5288 VkCmdPoolResetFlags flags,
5289 VkResult result)
5290{
5291
5292
5293
5294 if(result < VK_SUCCESS)
5295 {
5296 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5297 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5298 return false;
5299 }
5300
5301 return true;
5302}
5303
5304VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5305 VkDevice device,
5306 VkCmdPool cmdPool,
5307 VkCmdPoolResetFlags flags)
5308{
5309 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5310
5311 PostResetCommandPool(device, cmdPool, flags, result);
5312
5313 return result;
5314}
5315
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005316bool PreCreateCommandBuffer(
5317 VkDevice device,
5318 const VkCmdBufferCreateInfo* pCreateInfo)
5319{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005320 if(pCreateInfo != nullptr)
5321 {
5322 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005323 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005325 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005326 return false;
5327 }
5328 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5329 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5330 {
5331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005332 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005333 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005334 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005335 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005336
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005337 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005338}
5339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005340bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005341 VkDevice device,
5342 VkCmdBuffer* pCmdBuffer,
5343 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005344{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005345
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005346 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005348 }
5349
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005350 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005351 {
5352 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5354 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356
5357 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005358}
5359
5360VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5361 VkDevice device,
5362 const VkCmdBufferCreateInfo* pCreateInfo,
5363 VkCmdBuffer* pCmdBuffer)
5364{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005365 PreCreateCommandBuffer(device, pCreateInfo);
5366
Jeremy Hayes99a96322015-06-26 12:48:09 -06005367 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5368
5369 PostCreateCommandBuffer(device, pCmdBuffer, result);
5370
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005371 return result;
5372}
5373
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005374bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 VkCmdBuffer cmdBuffer,
5376 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005377{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005378 if(pBeginInfo != nullptr)
5379 {
5380 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005381 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005382 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005383 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005384 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005385 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005387
5388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005389}
5390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005391bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392 VkCmdBuffer cmdBuffer,
5393 VkResult result)
5394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005396 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005397 {
5398 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005399 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5400 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005402
5403 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005404}
5405
5406VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5407 VkCmdBuffer cmdBuffer,
5408 const VkCmdBufferBeginInfo* pBeginInfo)
5409{
5410 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005411
Jeremy Hayes99a96322015-06-26 12:48:09 -06005412 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5413
5414 PostBeginCommandBuffer(cmdBuffer, result);
5415
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005416 return result;
5417}
5418
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005419bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 VkCmdBuffer cmdBuffer,
5421 VkResult result)
5422{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005423
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005424 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425 {
5426 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005427 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5428 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005429 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005430
5431 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005432}
5433
5434VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5435 VkCmdBuffer cmdBuffer)
5436{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5438
5439 PostEndCommandBuffer(cmdBuffer, result);
5440
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005441 return result;
5442}
5443
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005444bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005445 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005446 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447 VkResult result)
5448{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005449
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005450
5451 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452 {
5453 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005454 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005456 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457
5458 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459}
5460
5461VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005462 VkCmdBuffer cmdBuffer,
5463 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005464{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005465 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005467 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005469 return result;
5470}
5471
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005472bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473 VkCmdBuffer cmdBuffer,
5474 VkPipelineBindPoint pipelineBindPoint,
5475 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005476{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005477
5478 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5479 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5480 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005481 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005482 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484 }
5485
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005486
5487 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005488}
5489
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5491 VkCmdBuffer cmdBuffer,
5492 VkPipelineBindPoint pipelineBindPoint,
5493 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005494{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005495 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5496
5497 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5498}
5499
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005500VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501{
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005502 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5503}
5504
5505VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5506{
5507 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508}
5509
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005510VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005511{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005512 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005513}
5514
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005515VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005516{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005517 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005518}
5519
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005520VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005521{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005522 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northrop12365112015-08-17 11:10:49 -06005523}
5524
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005525VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005526{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005527 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005528}
5529
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005530VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005531{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005532 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533}
5534
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005535VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005536{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005537 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005538}
5539
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005540VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005541{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005542 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005543}
5544
5545bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546 VkCmdBuffer cmdBuffer,
5547 const VkDescriptorSet* pDescriptorSets,
5548 const uint32_t* pDynamicOffsets)
5549{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005550 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005552 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005553
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005554 if(pDynamicOffsets != nullptr)
5555 {
5556 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005557
5558 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559}
5560
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005561bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562 VkCmdBuffer cmdBuffer,
5563 VkPipelineBindPoint pipelineBindPoint,
5564 VkPipelineLayout layout,
5565 uint32_t firstSet,
5566 uint32_t setCount,
5567 uint32_t dynamicOffsetCount)
5568{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569
5570 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5571 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5572 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005573 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005574 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005576 }
5577
5578
5579
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005580
5581
5582 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583}
5584
5585VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5586 VkCmdBuffer cmdBuffer,
5587 VkPipelineBindPoint pipelineBindPoint,
5588 VkPipelineLayout layout,
5589 uint32_t firstSet,
5590 uint32_t setCount,
5591 const VkDescriptorSet* pDescriptorSets,
5592 uint32_t dynamicOffsetCount,
5593 const uint32_t* pDynamicOffsets)
5594{
5595 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005596
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5598
5599 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5600}
5601
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005602bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005603 VkCmdBuffer cmdBuffer,
5604 VkBuffer buffer,
5605 VkDeviceSize offset,
5606 VkIndexType indexType)
5607{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005608
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609
5610
5611 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5612 indexType > VK_INDEX_TYPE_END_RANGE)
5613 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005614 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005615 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005616 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005618
5619 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620}
5621
5622VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5623 VkCmdBuffer cmdBuffer,
5624 VkBuffer buffer,
5625 VkDeviceSize offset,
5626 VkIndexType indexType)
5627{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5629
5630 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5631}
5632
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005633bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634 VkCmdBuffer cmdBuffer,
5635 const VkBuffer* pBuffers,
5636 const VkDeviceSize* pOffsets)
5637{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005638 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640 }
5641
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005642 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005644 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005645
5646 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647}
5648
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005650 VkCmdBuffer cmdBuffer,
5651 uint32_t startBinding,
5652 uint32_t bindingCount)
5653{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654
5655
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005656
5657 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005658}
5659
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005660VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661 VkCmdBuffer cmdBuffer,
5662 uint32_t startBinding,
5663 uint32_t bindingCount,
5664 const VkBuffer* pBuffers,
5665 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005666{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005668
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5670
5671 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005672}
5673
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005674bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675 VkCmdBuffer cmdBuffer,
5676 uint32_t firstVertex,
5677 uint32_t vertexCount,
5678 uint32_t firstInstance,
5679 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005680{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005681
5682
5683
5684
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005685
5686 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005687}
5688
Jeremy Hayes99a96322015-06-26 12:48:09 -06005689VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5690 VkCmdBuffer cmdBuffer,
5691 uint32_t firstVertex,
5692 uint32_t vertexCount,
5693 uint32_t firstInstance,
5694 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005695{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005696 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
5697
5698 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005699}
5700
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005701bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 VkCmdBuffer cmdBuffer,
5703 uint32_t firstIndex,
5704 uint32_t indexCount,
5705 int32_t vertexOffset,
5706 uint32_t firstInstance,
5707 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005708{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709
5710
5711
5712
5713
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714
5715 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005716}
5717
Jeremy Hayes99a96322015-06-26 12:48:09 -06005718VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5719 VkCmdBuffer cmdBuffer,
5720 uint32_t firstIndex,
5721 uint32_t indexCount,
5722 int32_t vertexOffset,
5723 uint32_t firstInstance,
5724 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005725{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5727
5728 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5729}
5730
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005731bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732 VkCmdBuffer cmdBuffer,
5733 VkBuffer buffer,
5734 VkDeviceSize offset,
5735 uint32_t count,
5736 uint32_t stride)
5737{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005738
5739
5740
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005741
5742
5743 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005744}
5745
5746VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5747 VkCmdBuffer cmdBuffer,
5748 VkBuffer buffer,
5749 VkDeviceSize offset,
5750 uint32_t count,
5751 uint32_t stride)
5752{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5754
5755 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5756}
5757
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005758bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005759 VkCmdBuffer cmdBuffer,
5760 VkBuffer buffer,
5761 VkDeviceSize offset,
5762 uint32_t count,
5763 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005764{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765
5766
5767
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005768
5769
5770 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005771}
5772
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5774 VkCmdBuffer cmdBuffer,
5775 VkBuffer buffer,
5776 VkDeviceSize offset,
5777 uint32_t count,
5778 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005779{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005780 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5781
5782 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5783}
5784
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005785bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786 VkCmdBuffer cmdBuffer,
5787 uint32_t x,
5788 uint32_t y,
5789 uint32_t z)
5790{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005791
5792
5793
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005794
5795 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796}
5797
5798VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5799 VkCmdBuffer cmdBuffer,
5800 uint32_t x,
5801 uint32_t y,
5802 uint32_t z)
5803{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5805
5806 PostCmdDispatch(cmdBuffer, x, y, z);
5807}
5808
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005809bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810 VkCmdBuffer cmdBuffer,
5811 VkBuffer buffer,
5812 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005813{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005814
Jeremy Hayes99a96322015-06-26 12:48:09 -06005815
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005816
5817 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005818}
5819
Jeremy Hayes99a96322015-06-26 12:48:09 -06005820VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5821 VkCmdBuffer cmdBuffer,
5822 VkBuffer buffer,
5823 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005824{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5826
5827 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005828}
5829
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005830bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 VkCmdBuffer cmdBuffer,
5832 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005833{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005834 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005835 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005837
5838 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839}
5840
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005841bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842 VkCmdBuffer cmdBuffer,
5843 VkBuffer srcBuffer,
5844 VkBuffer destBuffer,
5845 uint32_t regionCount)
5846{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847
Jeremy Hayes99a96322015-06-26 12:48:09 -06005848
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005850
5851 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005852}
5853
5854VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5855 VkCmdBuffer cmdBuffer,
5856 VkBuffer srcBuffer,
5857 VkBuffer destBuffer,
5858 uint32_t regionCount,
5859 const VkBufferCopy* pRegions)
5860{
5861 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005862
Jeremy Hayes99a96322015-06-26 12:48:09 -06005863 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5864
5865 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5866}
5867
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005868bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005869 VkCmdBuffer cmdBuffer,
5870 const VkImageCopy* pRegions)
5871{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005872 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005874 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5875 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5876 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005878 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005879 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880 }
5881 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5882 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5883 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005884 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005885 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005886 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005888 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005889
5890 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005891}
5892
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005893bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005894 VkCmdBuffer cmdBuffer,
5895 VkImage srcImage,
5896 VkImageLayout srcImageLayout,
5897 VkImage destImage,
5898 VkImageLayout destImageLayout,
5899 uint32_t regionCount)
5900{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005901
Jeremy Hayes99a96322015-06-26 12:48:09 -06005902
5903 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5904 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5905 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005906 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005907 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005908 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005909 }
5910
Jeremy Hayes99a96322015-06-26 12:48:09 -06005911
5912 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5913 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5914 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005916 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005917 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005918 }
5919
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005920
5921 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922}
5923
5924VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5925 VkCmdBuffer cmdBuffer,
5926 VkImage srcImage,
5927 VkImageLayout srcImageLayout,
5928 VkImage destImage,
5929 VkImageLayout destImageLayout,
5930 uint32_t regionCount,
5931 const VkImageCopy* pRegions)
5932{
5933 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005934
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5936
5937 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5938}
5939
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005940bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005941 VkCmdBuffer cmdBuffer,
5942 const VkImageBlit* pRegions)
5943{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005944 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005945 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005946 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5947 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5948 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005949 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005950 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005951 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005952 }
5953 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5954 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5955 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005956 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005957 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005958 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005960 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005961
5962 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005963}
5964
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005965bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 VkCmdBuffer cmdBuffer,
5967 VkImage srcImage,
5968 VkImageLayout srcImageLayout,
5969 VkImage destImage,
5970 VkImageLayout destImageLayout,
5971 uint32_t regionCount,
5972 VkTexFilter filter)
5973{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005974
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975
5976 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5977 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5978 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005979 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005980 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005981 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982 }
5983
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984
5985 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5986 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5987 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005988 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005989 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005990 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005991 }
5992
5993
5994 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5995 filter > VK_TEX_FILTER_END_RANGE)
5996 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005997 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005998 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005999 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006000 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006001
6002 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003}
6004
6005VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6006 VkCmdBuffer cmdBuffer,
6007 VkImage srcImage,
6008 VkImageLayout srcImageLayout,
6009 VkImage destImage,
6010 VkImageLayout destImageLayout,
6011 uint32_t regionCount,
6012 const VkImageBlit* pRegions,
6013 VkTexFilter filter)
6014{
6015 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006016
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6018
6019 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6020}
6021
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006022bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023 VkCmdBuffer cmdBuffer,
6024 const VkBufferImageCopy* pRegions)
6025{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006026 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006027 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6029 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6030 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006031 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006032 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006033 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006035 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006036
6037 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038}
6039
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006040bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041 VkCmdBuffer cmdBuffer,
6042 VkBuffer srcBuffer,
6043 VkImage destImage,
6044 VkImageLayout destImageLayout,
6045 uint32_t regionCount)
6046{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048
Jeremy Hayes99a96322015-06-26 12:48:09 -06006049
6050 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6051 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6052 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006053 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006054 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006055 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056 }
6057
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006058
6059 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060}
6061
6062VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6063 VkCmdBuffer cmdBuffer,
6064 VkBuffer srcBuffer,
6065 VkImage destImage,
6066 VkImageLayout destImageLayout,
6067 uint32_t regionCount,
6068 const VkBufferImageCopy* pRegions)
6069{
6070 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006071
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6073
6074 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6075}
6076
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006077bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078 VkCmdBuffer cmdBuffer,
6079 const VkBufferImageCopy* pRegions)
6080{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006081 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006083 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6084 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6085 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006087 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006090 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006091
6092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093}
6094
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006095bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006096 VkCmdBuffer cmdBuffer,
6097 VkImage srcImage,
6098 VkImageLayout srcImageLayout,
6099 VkBuffer destBuffer,
6100 uint32_t regionCount)
6101{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006102
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103
6104 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6105 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6106 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006107 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006108 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110 }
6111
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006113
6114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006115}
6116
6117VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6118 VkCmdBuffer cmdBuffer,
6119 VkImage srcImage,
6120 VkImageLayout srcImageLayout,
6121 VkBuffer destBuffer,
6122 uint32_t regionCount,
6123 const VkBufferImageCopy* pRegions)
6124{
6125 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006126
Jeremy Hayes99a96322015-06-26 12:48:09 -06006127 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6128
6129 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6130}
6131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006132bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133 VkCmdBuffer cmdBuffer,
6134 const uint32_t* pData)
6135{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006136 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006139
6140 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141}
6142
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006143bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144 VkCmdBuffer cmdBuffer,
6145 VkBuffer destBuffer,
6146 VkDeviceSize destOffset,
6147 VkDeviceSize dataSize)
6148{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149
6150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006151
6152
6153 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154}
6155
6156VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6157 VkCmdBuffer cmdBuffer,
6158 VkBuffer destBuffer,
6159 VkDeviceSize destOffset,
6160 VkDeviceSize dataSize,
6161 const uint32_t* pData)
6162{
6163 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006164
Jeremy Hayes99a96322015-06-26 12:48:09 -06006165 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6166
6167 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6168}
6169
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006170bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171 VkCmdBuffer cmdBuffer,
6172 VkBuffer destBuffer,
6173 VkDeviceSize destOffset,
6174 VkDeviceSize fillSize,
6175 uint32_t data)
6176{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006177
6178
6179
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006180
6181
6182 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006183}
6184
6185VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6186 VkCmdBuffer cmdBuffer,
6187 VkBuffer destBuffer,
6188 VkDeviceSize destOffset,
6189 VkDeviceSize fillSize,
6190 uint32_t data)
6191{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6193
6194 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6195}
6196
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006197bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12006199 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006200 const VkImageSubresourceRange* pRanges)
6201{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006202 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006204 }
6205
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006206 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006208 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006209 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006210
6211 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006212}
6213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006214bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006215 VkCmdBuffer cmdBuffer,
6216 VkImage image,
6217 VkImageLayout imageLayout,
6218 uint32_t rangeCount)
6219{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006220
Jeremy Hayes99a96322015-06-26 12:48:09 -06006221
6222 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6223 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6224 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006225 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006226 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006227 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228 }
6229
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006230
6231 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232}
6233
6234VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6235 VkCmdBuffer cmdBuffer,
6236 VkImage image,
6237 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12006238 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239 uint32_t rangeCount,
6240 const VkImageSubresourceRange* pRanges)
6241{
6242 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006243
Jeremy Hayes99a96322015-06-26 12:48:09 -06006244 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6245
6246 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6247}
6248
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006249bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250 VkCmdBuffer cmdBuffer,
6251 const VkImageSubresourceRange* pRanges)
6252{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006253 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006254 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006255 /*
6256 * TODO: How do we validation pRanges->aspectMask?
6257 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6258 * VK_IMAGE_ASPECT_STENCIL_BIT.
6259 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006260 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006261
6262 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006263}
6264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006265bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266 VkCmdBuffer cmdBuffer,
6267 VkImage image,
6268 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006269 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270 uint32_t rangeCount)
6271{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272
Jeremy Hayes99a96322015-06-26 12:48:09 -06006273
6274 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6275 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6276 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006277 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006278 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006279 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280 }
6281
6282
6283
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006284
6285 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006286}
6287
Chris Forbesd9be82b2015-06-22 17:21:59 +12006288VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289 VkCmdBuffer cmdBuffer,
6290 VkImage image,
6291 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006292 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293 uint32_t rangeCount,
6294 const VkImageSubresourceRange* pRanges)
6295{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006296 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006297
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006298 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006299
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006300 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006301}
6302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006303bool PreCmdClearColorAttachment(
6304 VkCmdBuffer cmdBuffer,
6305 const VkClearColorValue* pColor,
6306 const VkRect3D* pRects)
6307{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006308 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006309 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006310 }
6311
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006312 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006313 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006314 }
6315
6316 return true;
6317}
6318
6319bool PostCmdClearColorAttachment(
6320 VkCmdBuffer cmdBuffer,
6321 uint32_t colorAttachment,
6322 VkImageLayout imageLayout,
6323 uint32_t rectCount)
6324{
6325
6326
6327 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6328 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6329 {
6330 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006331 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006332 return false;
6333 }
6334
6335
6336 return true;
6337}
6338
6339VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
6340 VkCmdBuffer cmdBuffer,
6341 uint32_t colorAttachment,
6342 VkImageLayout imageLayout,
6343 const VkClearColorValue* pColor,
6344 uint32_t rectCount,
6345 const VkRect3D* pRects)
6346{
6347 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
6348
6349 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
6350
6351 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
6352}
6353
6354bool PreCmdClearDepthStencilAttachment(
6355 VkCmdBuffer cmdBuffer,
6356 const VkRect3D* pRects)
6357{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006358 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006359 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006360 }
6361
6362 return true;
6363}
6364
6365bool PostCmdClearDepthStencilAttachment(
6366 VkCmdBuffer cmdBuffer,
6367 VkImageAspectFlags imageAspectMask,
6368 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006369 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370 uint32_t rectCount)
6371{
6372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006373
6374 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6375 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6376 {
6377 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006378 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006379 return false;
6380 }
6381
6382
6383
6384
6385 return true;
6386}
6387
6388VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
6389 VkCmdBuffer cmdBuffer,
6390 VkImageAspectFlags imageAspectMask,
6391 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006392 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006393 uint32_t rectCount,
6394 const VkRect3D* pRects)
6395{
6396 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
6397
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006398 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006399
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006400 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006401}
6402
6403bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404 VkCmdBuffer cmdBuffer,
6405 const VkImageResolve* pRegions)
6406{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006407 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006408 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006409 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6410 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6411 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006412 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006413 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006415 }
6416 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6417 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6418 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006420 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006422 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006423 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006424
6425 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006426}
6427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006428bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006429 VkCmdBuffer cmdBuffer,
6430 VkImage srcImage,
6431 VkImageLayout srcImageLayout,
6432 VkImage destImage,
6433 VkImageLayout destImageLayout,
6434 uint32_t regionCount)
6435{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006436
Jeremy Hayes99a96322015-06-26 12:48:09 -06006437
6438 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6439 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6440 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006441 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006442 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006444 }
6445
Jeremy Hayes99a96322015-06-26 12:48:09 -06006446
6447 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6448 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6449 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006450 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006451 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006453 }
6454
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006455
6456 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006457}
6458
6459VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6460 VkCmdBuffer cmdBuffer,
6461 VkImage srcImage,
6462 VkImageLayout srcImageLayout,
6463 VkImage destImage,
6464 VkImageLayout destImageLayout,
6465 uint32_t regionCount,
6466 const VkImageResolve* pRegions)
6467{
6468 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006469
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6471
6472 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6473}
6474
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006475bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 VkCmdBuffer cmdBuffer,
6477 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006478 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480
Jeremy Hayes99a96322015-06-26 12:48:09 -06006481
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006482
6483 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006484}
6485
6486VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6487 VkCmdBuffer cmdBuffer,
6488 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006489 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006490{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006491 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006493 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494}
6495
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006496bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497 VkCmdBuffer cmdBuffer,
6498 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006499 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006503
6504 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006505}
6506
6507VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6508 VkCmdBuffer cmdBuffer,
6509 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006510 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006511{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006512 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006514 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515}
6516
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006517bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 VkCmdBuffer cmdBuffer,
6519 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006520 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006522 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006524 }
6525
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006526 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006528 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006529
6530 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531}
6532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006533bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006534 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006536 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006537 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006538 uint32_t memBarrierCount)
6539{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006541
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542
6543
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006544
6545 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546}
6547
6548VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6549 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 uint32_t eventCount,
6551 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006552 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006553 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006555 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556{
6557 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006558
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006559 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006561 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562}
6563
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006564bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006566 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006568 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006571
6572 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573}
6574
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006575bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006577 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006578 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006579 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 uint32_t memBarrierCount)
6581{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006583
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584
6585
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006586
6587 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588}
6589
6590VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6591 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006592 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006593 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006594 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006595 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006596 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006598 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006599
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006600 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006602 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603}
6604
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006605bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 VkCmdBuffer cmdBuffer,
6607 VkQueryPool queryPool,
6608 uint32_t slot,
6609 VkQueryControlFlags flags)
6610{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612
6613
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006614
6615 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616}
6617
6618VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6619 VkCmdBuffer cmdBuffer,
6620 VkQueryPool queryPool,
6621 uint32_t slot,
6622 VkQueryControlFlags flags)
6623{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006624 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6625
6626 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6627}
6628
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006629bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630 VkCmdBuffer cmdBuffer,
6631 VkQueryPool queryPool,
6632 uint32_t slot)
6633{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006634
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006636
6637 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006638}
6639
6640VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6641 VkCmdBuffer cmdBuffer,
6642 VkQueryPool queryPool,
6643 uint32_t slot)
6644{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006645 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6646
6647 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6648}
6649
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006650bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651 VkCmdBuffer cmdBuffer,
6652 VkQueryPool queryPool,
6653 uint32_t startQuery,
6654 uint32_t queryCount)
6655{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006657
6658
6659
6660 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006661}
6662
6663VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6664 VkCmdBuffer cmdBuffer,
6665 VkQueryPool queryPool,
6666 uint32_t startQuery,
6667 uint32_t queryCount)
6668{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006669 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6670
6671 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6672}
6673
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006674bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006675 VkCmdBuffer cmdBuffer,
6676 VkTimestampType timestampType,
6677 VkBuffer destBuffer,
6678 VkDeviceSize destOffset)
6679{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006680
6681 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6682 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6683 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006684 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006685 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006686 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006687 }
6688
Jeremy Hayes99a96322015-06-26 12:48:09 -06006689
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006690
6691 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006692}
6693
6694VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6695 VkCmdBuffer cmdBuffer,
6696 VkTimestampType timestampType,
6697 VkBuffer destBuffer,
6698 VkDeviceSize destOffset)
6699{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6701
6702 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6703}
6704
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006705bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 VkCmdBuffer cmdBuffer,
6707 VkQueryPool queryPool,
6708 uint32_t startQuery,
6709 uint32_t queryCount,
6710 VkBuffer destBuffer,
6711 VkDeviceSize destOffset,
6712 VkDeviceSize destStride,
6713 VkQueryResultFlags flags)
6714{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006715
6716
6717
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006718
Jeremy Hayes99a96322015-06-26 12:48:09 -06006719
6720
6721
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006722
6723 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006724}
6725
Jeremy Hayesad367152015-04-17 10:36:53 -06006726VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006727 VkCmdBuffer cmdBuffer,
6728 VkQueryPool queryPool,
6729 uint32_t startQuery,
6730 uint32_t queryCount,
6731 VkBuffer destBuffer,
6732 VkDeviceSize destOffset,
6733 VkDeviceSize destStride,
6734 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006735{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006736 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6737
6738 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006739}
6740
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006741bool PreCmdPushConstants(
6742 VkCmdBuffer cmdBuffer,
6743 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006744{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006745 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006746 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006747 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006748
6749 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006750}
6751
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006752bool PostCmdPushConstants(
6753 VkCmdBuffer cmdBuffer,
6754 VkPipelineLayout layout,
6755 VkShaderStageFlags stageFlags,
6756 uint32_t start,
6757 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006758{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006759
Jeremy Hayes99a96322015-06-26 12:48:09 -06006760
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006761
6762
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006763
6764 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006765}
6766
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006767VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6768 VkCmdBuffer cmdBuffer,
6769 VkPipelineLayout layout,
6770 VkShaderStageFlags stageFlags,
6771 uint32_t start,
6772 uint32_t length,
6773 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006774{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006775 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006776
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006777 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006778
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006779 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006780}
6781
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006782bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006783 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006784 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006785{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006786 if(pRenderPassBegin != nullptr)
6787 {
6788 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006789 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006790 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006791 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006792 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006793 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006794 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006795 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006796 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006797 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006798
6799 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006800}
6801
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006802bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006803 VkCmdBuffer cmdBuffer,
6804 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006805{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006806
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006807 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6808 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6809 {
6810 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6811 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6812 return false;
6813 }
6814
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006815 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006816}
6817
Jeremy Hayes99a96322015-06-26 12:48:09 -06006818VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6819 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006820 const VkRenderPassBeginInfo* pRenderPassBegin,
6821 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006822{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006823 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6824
Chia-I Wu08accc62015-07-07 11:50:03 +08006825 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006826
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006827 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006828}
6829
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006830bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006831 VkCmdBuffer cmdBuffer,
6832 VkRenderPassContents contents)
6833{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006834
6835 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006836 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006837 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006838 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006839 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6840 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006841 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006843 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006844}
6845
6846VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6847 VkCmdBuffer cmdBuffer,
6848 VkRenderPassContents contents)
6849{
Chia-I Wu08accc62015-07-07 11:50:03 +08006850 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6851
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006852 PostCmdNextSubpass(cmdBuffer, contents);
6853}
6854
6855bool PostCmdEndRenderPass(
6856 VkCmdBuffer cmdBuffer)
6857{
6858
6859 return true;
6860}
6861
6862VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6863 VkCmdBuffer cmdBuffer)
6864{
6865 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6866
6867 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006868}
6869
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006870bool PreCmdExecuteCommands(
6871 VkCmdBuffer cmdBuffer,
6872 const VkCmdBuffer* pCmdBuffers)
6873{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006874 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006875 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006876 }
6877
6878 return true;
6879}
6880
6881bool PostCmdExecuteCommands(
6882 VkCmdBuffer cmdBuffer,
6883 uint32_t cmdBuffersCount)
6884{
6885
6886
6887 return true;
6888}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006889
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006890VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006891 VkCmdBuffer cmdBuffer,
6892 uint32_t cmdBuffersCount,
6893 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006894{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006895 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6896
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006897 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6898
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006899 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006900}
6901
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006902VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006903{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006904 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006905 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006906 }
6907
Jon Ashburn8fd08252015-05-28 16:25:02 -06006908 /* loader uses this to force layer initialization; device object is wrapped */
6909 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006910 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006911 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006912 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006913
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006914 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006915 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006916 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006917 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006918 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006919 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006920 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006921 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006922 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006923 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006924 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006925 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006926 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006927 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006928 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006929 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006930 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006931 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006932 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006933 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006934 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006935 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006936 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006937 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006938 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006939 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006940 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006941 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006942 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006943 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006944 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006945 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006946 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006947 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006948 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006949 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006950 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006951 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006952 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006953 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006954 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006955 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006956 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006957 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006958 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006959 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006960 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006961 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006962 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006963 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006964 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006965 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006966 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006967 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006968 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006969 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006970 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006971 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006972 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006973 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006974 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006975 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006976 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006977 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006978 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006979 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006980 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006981 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006982 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006983 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006984 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006985 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006986 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006987 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006988 if (!strcmp(funcName, "vkCmdSetViewport"))
6989 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006990 if (!strcmp(funcName, "vkCmdSetScissor"))
6991 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006992 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6993 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6994 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6995 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6996 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6997 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6998 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6999 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
7000 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
7001 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
7002 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
7003 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
7004 if (!strcmp(funcName, "vkCmdSetStencilReference"))
7005 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007006 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007007 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007008 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007009 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007010 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007011 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007012 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007013 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007014 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007015 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007016 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007017 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007018 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007019 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007020 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007021 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007022 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007023 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007024 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007025 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007026 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007027 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007028 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007029 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007030 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007031 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007032 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007033 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007034 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007035 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007036 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007037 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007038 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007039 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007040 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007041 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007042 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007043 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007044 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007045 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007046 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007047 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007048 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007049 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007050 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007051 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007052 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007053 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007054 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007055 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007056 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007057 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007058 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007059 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007060 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007061 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007062 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007063 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007064 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007065 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007066 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007067 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007068 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007069 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007070 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007071 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007072 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007073 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007074 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007075 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08007076 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007077 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06007078
Jon Ashburneab34492015-06-01 09:37:38 -06007079 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007080 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007081 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007082 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007083 }
7084}
7085
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007086VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007087{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007088 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007089 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007090 }
7091
Jon Ashburn8fd08252015-05-28 16:25:02 -06007092 /* loader uses this to force layer initialization; instance object is wrapped */
7093 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007094 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007095 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06007096 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007097
Jeremy Hayes99a96322015-06-26 12:48:09 -06007098 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007099 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007100 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007101 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007102 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007103 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007104 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007105 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007106 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007107 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06007108 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007109 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06007110 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
7111 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
7112 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
7113 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
7114 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
7115 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
7116 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
7117 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007118
Jeremy Hayes99a96322015-06-26 12:48:09 -06007119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007120 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007121 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007122 return fptr;
7123
Jeremy Hayes99a96322015-06-26 12:48:09 -06007124 {
7125 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7126 return NULL;
7127 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7128 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007129}