blob: 029d085f19a60ad685c50e3da6f13744752befba [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 Goeltzenleuchter49c73082015-09-17 15:06:17 -06005500VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportAndScissorCount, const VkViewport* pViewports, const VkRect2D* pScissors)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005502 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportAndScissorCount, pViewports, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005503}
5504
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005505VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005506{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005507 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005508}
5509
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005510VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBias, float depthBiasClamp, float slopeScaledDepthBias)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005511{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005512 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBias, depthBiasClamp, slopeScaledDepthBias);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005513}
5514
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005515VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005516{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005517 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northrop12365112015-08-17 11:10:49 -06005518}
5519
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005520VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005521{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005522 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005523}
5524
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005525VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005526{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005527 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005528}
5529
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005530VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005531{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005532 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533}
5534
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005535VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005536{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005537 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005538}
5539
5540bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541 VkCmdBuffer cmdBuffer,
5542 const VkDescriptorSet* pDescriptorSets,
5543 const uint32_t* pDynamicOffsets)
5544{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005545 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005547 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005549 if(pDynamicOffsets != nullptr)
5550 {
5551 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005552
5553 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005554}
5555
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005556bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557 VkCmdBuffer cmdBuffer,
5558 VkPipelineBindPoint pipelineBindPoint,
5559 VkPipelineLayout layout,
5560 uint32_t firstSet,
5561 uint32_t setCount,
5562 uint32_t dynamicOffsetCount)
5563{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564
5565 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5566 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5567 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005568 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005569 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005570 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571 }
5572
5573
5574
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005575
5576
5577 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578}
5579
5580VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5581 VkCmdBuffer cmdBuffer,
5582 VkPipelineBindPoint pipelineBindPoint,
5583 VkPipelineLayout layout,
5584 uint32_t firstSet,
5585 uint32_t setCount,
5586 const VkDescriptorSet* pDescriptorSets,
5587 uint32_t dynamicOffsetCount,
5588 const uint32_t* pDynamicOffsets)
5589{
5590 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005591
Jeremy Hayes99a96322015-06-26 12:48:09 -06005592 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5593
5594 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5595}
5596
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005597bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598 VkCmdBuffer cmdBuffer,
5599 VkBuffer buffer,
5600 VkDeviceSize offset,
5601 VkIndexType indexType)
5602{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005603
Jeremy Hayes99a96322015-06-26 12:48:09 -06005604
5605
5606 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5607 indexType > VK_INDEX_TYPE_END_RANGE)
5608 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005609 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005610 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005611 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005613
5614 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005615}
5616
5617VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5618 VkCmdBuffer cmdBuffer,
5619 VkBuffer buffer,
5620 VkDeviceSize offset,
5621 VkIndexType indexType)
5622{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005623 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5624
5625 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5626}
5627
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005628bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629 VkCmdBuffer cmdBuffer,
5630 const VkBuffer* pBuffers,
5631 const VkDeviceSize* pOffsets)
5632{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005633 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635 }
5636
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005637 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005638 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005640
5641 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005642}
5643
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005644bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645 VkCmdBuffer cmdBuffer,
5646 uint32_t startBinding,
5647 uint32_t bindingCount)
5648{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649
5650
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005651
5652 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005653}
5654
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005655VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005656 VkCmdBuffer cmdBuffer,
5657 uint32_t startBinding,
5658 uint32_t bindingCount,
5659 const VkBuffer* pBuffers,
5660 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005661{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005662 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005663
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5665
5666 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005667}
5668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005669bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005670 VkCmdBuffer cmdBuffer,
5671 uint32_t firstVertex,
5672 uint32_t vertexCount,
5673 uint32_t firstInstance,
5674 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005675{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676
5677
5678
5679
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005680
5681 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005682}
5683
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5685 VkCmdBuffer cmdBuffer,
5686 uint32_t firstVertex,
5687 uint32_t vertexCount,
5688 uint32_t firstInstance,
5689 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005690{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
5692
5693 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005694}
5695
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005696bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005697 VkCmdBuffer cmdBuffer,
5698 uint32_t firstIndex,
5699 uint32_t indexCount,
5700 int32_t vertexOffset,
5701 uint32_t firstInstance,
5702 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005703{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005704
5705
5706
5707
5708
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709
5710 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005711}
5712
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5714 VkCmdBuffer cmdBuffer,
5715 uint32_t firstIndex,
5716 uint32_t indexCount,
5717 int32_t vertexOffset,
5718 uint32_t firstInstance,
5719 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005720{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5722
5723 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5724}
5725
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005726bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005727 VkCmdBuffer cmdBuffer,
5728 VkBuffer buffer,
5729 VkDeviceSize offset,
5730 uint32_t count,
5731 uint32_t stride)
5732{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733
5734
5735
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736
5737
5738 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739}
5740
5741VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5742 VkCmdBuffer cmdBuffer,
5743 VkBuffer buffer,
5744 VkDeviceSize offset,
5745 uint32_t count,
5746 uint32_t stride)
5747{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005748 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5749
5750 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5751}
5752
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005753bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754 VkCmdBuffer cmdBuffer,
5755 VkBuffer buffer,
5756 VkDeviceSize offset,
5757 uint32_t count,
5758 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005759{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760
5761
5762
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763
5764
5765 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005766}
5767
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5769 VkCmdBuffer cmdBuffer,
5770 VkBuffer buffer,
5771 VkDeviceSize offset,
5772 uint32_t count,
5773 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005774{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5776
5777 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5778}
5779
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005780bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005781 VkCmdBuffer cmdBuffer,
5782 uint32_t x,
5783 uint32_t y,
5784 uint32_t z)
5785{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786
5787
5788
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005789
5790 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005791}
5792
5793VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5794 VkCmdBuffer cmdBuffer,
5795 uint32_t x,
5796 uint32_t y,
5797 uint32_t z)
5798{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5800
5801 PostCmdDispatch(cmdBuffer, x, y, z);
5802}
5803
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005804bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005805 VkCmdBuffer cmdBuffer,
5806 VkBuffer buffer,
5807 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005808{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005809
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005811
5812 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005813}
5814
Jeremy Hayes99a96322015-06-26 12:48:09 -06005815VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5816 VkCmdBuffer cmdBuffer,
5817 VkBuffer buffer,
5818 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005819{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005820 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5821
5822 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005823}
5824
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005825bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005826 VkCmdBuffer cmdBuffer,
5827 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005828{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005829 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005832
5833 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834}
5835
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005836bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005837 VkCmdBuffer cmdBuffer,
5838 VkBuffer srcBuffer,
5839 VkBuffer destBuffer,
5840 uint32_t regionCount)
5841{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005845
5846 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847}
5848
5849VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5850 VkCmdBuffer cmdBuffer,
5851 VkBuffer srcBuffer,
5852 VkBuffer destBuffer,
5853 uint32_t regionCount,
5854 const VkBufferCopy* pRegions)
5855{
5856 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005857
Jeremy Hayes99a96322015-06-26 12:48:09 -06005858 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5859
5860 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5861}
5862
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005864 VkCmdBuffer cmdBuffer,
5865 const VkImageCopy* pRegions)
5866{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005867 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005869 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5870 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5871 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005873 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005874 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005875 }
5876 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5877 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5878 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005879 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005880 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005881 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005882 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005883 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005884
5885 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005886}
5887
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005888bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005889 VkCmdBuffer cmdBuffer,
5890 VkImage srcImage,
5891 VkImageLayout srcImageLayout,
5892 VkImage destImage,
5893 VkImageLayout destImageLayout,
5894 uint32_t regionCount)
5895{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005896
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897
5898 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5899 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5900 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005902 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005904 }
5905
Jeremy Hayes99a96322015-06-26 12:48:09 -06005906
5907 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5908 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5909 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005910 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005911 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005912 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005913 }
5914
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915
5916 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005917}
5918
5919VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5920 VkCmdBuffer cmdBuffer,
5921 VkImage srcImage,
5922 VkImageLayout srcImageLayout,
5923 VkImage destImage,
5924 VkImageLayout destImageLayout,
5925 uint32_t regionCount,
5926 const VkImageCopy* pRegions)
5927{
5928 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005929
Jeremy Hayes99a96322015-06-26 12:48:09 -06005930 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5931
5932 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5933}
5934
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005935bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005936 VkCmdBuffer cmdBuffer,
5937 const VkImageBlit* pRegions)
5938{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005939 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005940 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005941 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5942 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5943 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005944 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005945 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005947 }
5948 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
5949 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
5950 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005951 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005952 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005953 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005954 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005955 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005956
5957 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005958}
5959
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005960bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961 VkCmdBuffer cmdBuffer,
5962 VkImage srcImage,
5963 VkImageLayout srcImageLayout,
5964 VkImage destImage,
5965 VkImageLayout destImageLayout,
5966 uint32_t regionCount,
5967 VkTexFilter filter)
5968{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005969
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970
5971 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5972 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5973 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005974 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005975 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005976 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005977 }
5978
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979
5980 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5981 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5982 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005984 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005985 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986 }
5987
5988
5989 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5990 filter > VK_TEX_FILTER_END_RANGE)
5991 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005992 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005993 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005994 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005995 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005996
5997 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005998}
5999
6000VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6001 VkCmdBuffer cmdBuffer,
6002 VkImage srcImage,
6003 VkImageLayout srcImageLayout,
6004 VkImage destImage,
6005 VkImageLayout destImageLayout,
6006 uint32_t regionCount,
6007 const VkImageBlit* pRegions,
6008 VkTexFilter filter)
6009{
6010 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006011
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6013
6014 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6015}
6016
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006017bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018 VkCmdBuffer cmdBuffer,
6019 const VkBufferImageCopy* pRegions)
6020{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006021 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6024 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6025 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006026 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006027 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006028 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006031
6032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033}
6034
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036 VkCmdBuffer cmdBuffer,
6037 VkBuffer srcBuffer,
6038 VkImage destImage,
6039 VkImageLayout destImageLayout,
6040 uint32_t regionCount)
6041{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006042
Jeremy Hayes99a96322015-06-26 12:48:09 -06006043
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044
6045 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6046 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6047 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006048 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006049 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006050 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 }
6052
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006053
6054 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055}
6056
6057VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6058 VkCmdBuffer cmdBuffer,
6059 VkBuffer srcBuffer,
6060 VkImage destImage,
6061 VkImageLayout destImageLayout,
6062 uint32_t regionCount,
6063 const VkBufferImageCopy* pRegions)
6064{
6065 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006066
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6068
6069 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6070}
6071
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006072bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073 VkCmdBuffer cmdBuffer,
6074 const VkBufferImageCopy* pRegions)
6075{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006076 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006077 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6079 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6080 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006081 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006082 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006083 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086
6087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088}
6089
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006090bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091 VkCmdBuffer cmdBuffer,
6092 VkImage srcImage,
6093 VkImageLayout srcImageLayout,
6094 VkBuffer destBuffer,
6095 uint32_t regionCount)
6096{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098
6099 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6100 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6101 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006102 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006103 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006104 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105 }
6106
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006108
6109 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110}
6111
6112VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6113 VkCmdBuffer cmdBuffer,
6114 VkImage srcImage,
6115 VkImageLayout srcImageLayout,
6116 VkBuffer destBuffer,
6117 uint32_t regionCount,
6118 const VkBufferImageCopy* pRegions)
6119{
6120 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006121
Jeremy Hayes99a96322015-06-26 12:48:09 -06006122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6123
6124 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6125}
6126
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006127bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128 VkCmdBuffer cmdBuffer,
6129 const uint32_t* pData)
6130{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006131 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006132 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006134
6135 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136}
6137
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006138bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006139 VkCmdBuffer cmdBuffer,
6140 VkBuffer destBuffer,
6141 VkDeviceSize destOffset,
6142 VkDeviceSize dataSize)
6143{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144
6145
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006146
6147
6148 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006149}
6150
6151VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6152 VkCmdBuffer cmdBuffer,
6153 VkBuffer destBuffer,
6154 VkDeviceSize destOffset,
6155 VkDeviceSize dataSize,
6156 const uint32_t* pData)
6157{
6158 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006159
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6161
6162 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6163}
6164
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006165bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006166 VkCmdBuffer cmdBuffer,
6167 VkBuffer destBuffer,
6168 VkDeviceSize destOffset,
6169 VkDeviceSize fillSize,
6170 uint32_t data)
6171{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006172
6173
6174
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006175
6176
6177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178}
6179
6180VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6181 VkCmdBuffer cmdBuffer,
6182 VkBuffer destBuffer,
6183 VkDeviceSize destOffset,
6184 VkDeviceSize fillSize,
6185 uint32_t data)
6186{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6188
6189 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6190}
6191
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006192bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12006194 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195 const VkImageSubresourceRange* pRanges)
6196{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006197 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006199 }
6200
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006201 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006203 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205
6206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006209bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006210 VkCmdBuffer cmdBuffer,
6211 VkImage image,
6212 VkImageLayout imageLayout,
6213 uint32_t rangeCount)
6214{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006215
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216
6217 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6218 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6219 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006220 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006221 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223 }
6224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006225
6226 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006227}
6228
6229VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6230 VkCmdBuffer cmdBuffer,
6231 VkImage image,
6232 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12006233 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006234 uint32_t rangeCount,
6235 const VkImageSubresourceRange* pRanges)
6236{
6237 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006238
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6240
6241 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6242}
6243
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006244bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 VkCmdBuffer cmdBuffer,
6246 const VkImageSubresourceRange* pRanges)
6247{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006248 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006249 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006250 /*
6251 * TODO: How do we validation pRanges->aspectMask?
6252 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6253 * VK_IMAGE_ASPECT_STENCIL_BIT.
6254 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006255 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006256
6257 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006258}
6259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006260bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261 VkCmdBuffer cmdBuffer,
6262 VkImage image,
6263 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006264 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006265 uint32_t rangeCount)
6266{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268
6269 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6270 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6271 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006272 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006273 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006274 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275 }
6276
6277
6278
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006279
6280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281}
6282
Chris Forbesd9be82b2015-06-22 17:21:59 +12006283VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006284 VkCmdBuffer cmdBuffer,
6285 VkImage image,
6286 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006287 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006288 uint32_t rangeCount,
6289 const VkImageSubresourceRange* pRanges)
6290{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006291 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006292
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006293 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006295 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296}
6297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006298bool PreCmdClearColorAttachment(
6299 VkCmdBuffer cmdBuffer,
6300 const VkClearColorValue* pColor,
6301 const VkRect3D* pRects)
6302{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006303 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006304 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006305 }
6306
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006307 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006308 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006309 }
6310
6311 return true;
6312}
6313
6314bool PostCmdClearColorAttachment(
6315 VkCmdBuffer cmdBuffer,
6316 uint32_t colorAttachment,
6317 VkImageLayout imageLayout,
6318 uint32_t rectCount)
6319{
6320
6321
6322 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6323 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6324 {
6325 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006326 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006327 return false;
6328 }
6329
6330
6331 return true;
6332}
6333
6334VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
6335 VkCmdBuffer cmdBuffer,
6336 uint32_t colorAttachment,
6337 VkImageLayout imageLayout,
6338 const VkClearColorValue* pColor,
6339 uint32_t rectCount,
6340 const VkRect3D* pRects)
6341{
6342 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
6343
6344 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
6345
6346 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
6347}
6348
6349bool PreCmdClearDepthStencilAttachment(
6350 VkCmdBuffer cmdBuffer,
6351 const VkRect3D* pRects)
6352{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006353 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006354 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006355 }
6356
6357 return true;
6358}
6359
6360bool PostCmdClearDepthStencilAttachment(
6361 VkCmdBuffer cmdBuffer,
6362 VkImageAspectFlags imageAspectMask,
6363 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006364 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006365 uint32_t rectCount)
6366{
6367
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006368
6369 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6370 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6371 {
6372 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006373 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006374 return false;
6375 }
6376
6377
6378
6379
6380 return true;
6381}
6382
6383VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
6384 VkCmdBuffer cmdBuffer,
6385 VkImageAspectFlags imageAspectMask,
6386 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006387 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006388 uint32_t rectCount,
6389 const VkRect3D* pRects)
6390{
6391 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
6392
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006393 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006394
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006395 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, pDepthStencil, rectCount);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006396}
6397
6398bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006399 VkCmdBuffer cmdBuffer,
6400 const VkImageResolve* pRegions)
6401{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006402 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006403 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6405 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6406 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006407 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006408 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006409 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006410 }
6411 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6412 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6413 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006414 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006415 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006416 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006418 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419
6420 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006421}
6422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006423bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424 VkCmdBuffer cmdBuffer,
6425 VkImage srcImage,
6426 VkImageLayout srcImageLayout,
6427 VkImage destImage,
6428 VkImageLayout destImageLayout,
6429 uint32_t regionCount)
6430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006431
Jeremy Hayes99a96322015-06-26 12:48:09 -06006432
6433 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6434 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6435 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006436 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006437 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006438 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006439 }
6440
Jeremy Hayes99a96322015-06-26 12:48:09 -06006441
6442 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6443 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6444 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006445 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006446 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006447 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 }
6449
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006450
6451 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452}
6453
6454VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6455 VkCmdBuffer cmdBuffer,
6456 VkImage srcImage,
6457 VkImageLayout srcImageLayout,
6458 VkImage destImage,
6459 VkImageLayout destImageLayout,
6460 uint32_t regionCount,
6461 const VkImageResolve* pRegions)
6462{
6463 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006464
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6466
6467 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6468}
6469
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006470bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 VkCmdBuffer cmdBuffer,
6472 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006473 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006477
6478 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479}
6480
6481VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6482 VkCmdBuffer cmdBuffer,
6483 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006484 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006486 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006488 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489}
6490
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006491bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 VkCmdBuffer cmdBuffer,
6493 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006494 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006498
6499 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500}
6501
6502VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6503 VkCmdBuffer cmdBuffer,
6504 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006505 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006507 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006509 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510}
6511
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006512bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513 VkCmdBuffer cmdBuffer,
6514 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006515 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006517 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006519 }
6520
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006521 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006524
6525 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006526}
6527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006528bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006531 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006532 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 uint32_t memBarrierCount)
6534{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006536
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537
6538
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006539
6540 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006541}
6542
6543VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6544 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006545 uint32_t eventCount,
6546 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006547 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006548 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006549 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006550 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551{
6552 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006553
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006554 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006555
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006556 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557}
6558
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006559bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006561 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006563 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006566
6567 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568}
6569
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006570bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006572 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006573 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006574 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 uint32_t memBarrierCount)
6576{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006578
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579
6580
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006581
6582 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583}
6584
6585VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6586 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006587 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006588 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006589 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006591 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006593 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006594
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006595 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006597 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598}
6599
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006600bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601 VkCmdBuffer cmdBuffer,
6602 VkQueryPool queryPool,
6603 uint32_t slot,
6604 VkQueryControlFlags flags)
6605{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607
6608
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006609
6610 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611}
6612
6613VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6614 VkCmdBuffer cmdBuffer,
6615 VkQueryPool queryPool,
6616 uint32_t slot,
6617 VkQueryControlFlags flags)
6618{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006619 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6620
6621 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6622}
6623
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006624bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006625 VkCmdBuffer cmdBuffer,
6626 VkQueryPool queryPool,
6627 uint32_t slot)
6628{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006629
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006631
6632 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006633}
6634
6635VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6636 VkCmdBuffer cmdBuffer,
6637 VkQueryPool queryPool,
6638 uint32_t slot)
6639{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6641
6642 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6643}
6644
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006645bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006646 VkCmdBuffer cmdBuffer,
6647 VkQueryPool queryPool,
6648 uint32_t startQuery,
6649 uint32_t queryCount)
6650{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006652
6653
6654
6655 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656}
6657
6658VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6659 VkCmdBuffer cmdBuffer,
6660 VkQueryPool queryPool,
6661 uint32_t startQuery,
6662 uint32_t queryCount)
6663{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6665
6666 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6667}
6668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006669bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006670 VkCmdBuffer cmdBuffer,
6671 VkTimestampType timestampType,
6672 VkBuffer destBuffer,
6673 VkDeviceSize destOffset)
6674{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006675
6676 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6677 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6678 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006679 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006680 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006682 }
6683
Jeremy Hayes99a96322015-06-26 12:48:09 -06006684
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006685
6686 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006687}
6688
6689VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6690 VkCmdBuffer cmdBuffer,
6691 VkTimestampType timestampType,
6692 VkBuffer destBuffer,
6693 VkDeviceSize destOffset)
6694{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006695 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6696
6697 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6698}
6699
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006700bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006701 VkCmdBuffer cmdBuffer,
6702 VkQueryPool queryPool,
6703 uint32_t startQuery,
6704 uint32_t queryCount,
6705 VkBuffer destBuffer,
6706 VkDeviceSize destOffset,
6707 VkDeviceSize destStride,
6708 VkQueryResultFlags flags)
6709{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006710
6711
6712
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006713
Jeremy Hayes99a96322015-06-26 12:48:09 -06006714
6715
6716
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006717
6718 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006719}
6720
Jeremy Hayesad367152015-04-17 10:36:53 -06006721VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006722 VkCmdBuffer cmdBuffer,
6723 VkQueryPool queryPool,
6724 uint32_t startQuery,
6725 uint32_t queryCount,
6726 VkBuffer destBuffer,
6727 VkDeviceSize destOffset,
6728 VkDeviceSize destStride,
6729 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006730{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006731 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
6732
6733 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006734}
6735
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006736bool PreCmdPushConstants(
6737 VkCmdBuffer cmdBuffer,
6738 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006739{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006740 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006741 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006742 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006743
6744 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006745}
6746
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006747bool PostCmdPushConstants(
6748 VkCmdBuffer cmdBuffer,
6749 VkPipelineLayout layout,
6750 VkShaderStageFlags stageFlags,
6751 uint32_t start,
6752 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006753{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006754
Jeremy Hayes99a96322015-06-26 12:48:09 -06006755
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006756
6757
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006758
6759 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006760}
6761
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006762VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6763 VkCmdBuffer cmdBuffer,
6764 VkPipelineLayout layout,
6765 VkShaderStageFlags stageFlags,
6766 uint32_t start,
6767 uint32_t length,
6768 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006769{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006770 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006771
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006772 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006773
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006774 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006775}
6776
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006777bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006778 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006779 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006780{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006781 if(pRenderPassBegin != nullptr)
6782 {
6783 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006784 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006785 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006786 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006787 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006788 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006789 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006790 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006791 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006792 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006793
6794 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006795}
6796
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006797bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006798 VkCmdBuffer cmdBuffer,
6799 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006800{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006801
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006802 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6803 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6804 {
6805 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6806 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6807 return false;
6808 }
6809
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006810 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006811}
6812
Jeremy Hayes99a96322015-06-26 12:48:09 -06006813VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6814 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006815 const VkRenderPassBeginInfo* pRenderPassBegin,
6816 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006817{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006818 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6819
Chia-I Wu08accc62015-07-07 11:50:03 +08006820 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006821
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006822 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006823}
6824
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006825bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006826 VkCmdBuffer cmdBuffer,
6827 VkRenderPassContents contents)
6828{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006829
6830 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006831 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006832 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006833 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006834 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6835 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006836 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006837
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006838 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006839}
6840
6841VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6842 VkCmdBuffer cmdBuffer,
6843 VkRenderPassContents contents)
6844{
Chia-I Wu08accc62015-07-07 11:50:03 +08006845 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6846
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006847 PostCmdNextSubpass(cmdBuffer, contents);
6848}
6849
6850bool PostCmdEndRenderPass(
6851 VkCmdBuffer cmdBuffer)
6852{
6853
6854 return true;
6855}
6856
6857VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6858 VkCmdBuffer cmdBuffer)
6859{
6860 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6861
6862 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006863}
6864
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006865bool PreCmdExecuteCommands(
6866 VkCmdBuffer cmdBuffer,
6867 const VkCmdBuffer* pCmdBuffers)
6868{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006869 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006870 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006871 }
6872
6873 return true;
6874}
6875
6876bool PostCmdExecuteCommands(
6877 VkCmdBuffer cmdBuffer,
6878 uint32_t cmdBuffersCount)
6879{
6880
6881
6882 return true;
6883}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006884
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006885VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006886 VkCmdBuffer cmdBuffer,
6887 uint32_t cmdBuffersCount,
6888 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006889{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006890 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6891
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006892 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6893
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006894 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006895}
6896
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006897VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006898{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006899 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006900 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006901 }
6902
Jon Ashburn8fd08252015-05-28 16:25:02 -06006903 /* loader uses this to force layer initialization; device object is wrapped */
6904 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006905 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006906 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006907 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006908
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006909 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006910 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006911 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006912 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006913 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006914 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006915 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006916 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006917 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006918 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006919 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006920 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006921 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006922 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006923 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006924 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006925 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006926 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006927 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006928 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006929 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006930 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006931 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006932 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006933 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006934 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006935 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006936 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006937 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006938 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006939 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006940 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006941 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006942 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006943 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006944 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006945 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006946 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006947 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006948 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006949 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006950 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006951 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006952 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006953 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006954 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006955 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006956 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006957 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006958 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006959 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006960 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006961 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006962 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006963 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006964 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006965 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006966 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006967 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006968 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006969 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006970 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006971 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006972 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006973 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006974 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006975 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006976 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006977 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006978 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006979 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006980 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006981 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006982 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006983 if (!strcmp(funcName, "vkCmdSetViewport"))
6984 return (PFN_vkVoidFunction) vkCmdSetViewport;
6985 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6986 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6987 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6988 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6989 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6990 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6991 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6992 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6993 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6994 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6995 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6996 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6997 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6998 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006999 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007000 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007001 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007002 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007003 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007004 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007005 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007006 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007007 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007008 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007009 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007010 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007011 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007012 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007013 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007014 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007015 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007016 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007017 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007018 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007019 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007020 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007021 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007022 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007023 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007024 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007025 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007026 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007027 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007028 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007029 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007030 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007031 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007032 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007033 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007034 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007035 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007036 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007037 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007038 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007039 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007040 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007041 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007042 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007043 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007044 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007045 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007046 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007047 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007048 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007049 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007050 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007051 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007052 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007053 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007054 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007055 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007056 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007057 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007058 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007059 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007060 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007061 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007062 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007063 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007064 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007065 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007066 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007067 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007068 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08007069 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007070 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06007071
Jon Ashburneab34492015-06-01 09:37:38 -06007072 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007073 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007074 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007075 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007076 }
7077}
7078
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007079VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007080{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007081 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007082 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007083 }
7084
Jon Ashburn8fd08252015-05-28 16:25:02 -06007085 /* loader uses this to force layer initialization; instance object is wrapped */
7086 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007087 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007088 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06007089 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007090
Jeremy Hayes99a96322015-06-26 12:48:09 -06007091 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007092 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007093 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007094 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007095 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007096 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007097 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007098 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007099 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007100 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06007101 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007102 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06007103 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
7104 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
7105 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
7106 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
7107 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
7108 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
7109 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
7110 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007111
Jeremy Hayes99a96322015-06-26 12:48:09 -06007112 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007113 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007114 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007115 return fptr;
7116
Jeremy Hayes99a96322015-06-26 12:48:09 -06007117 {
7118 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7119 return NULL;
7120 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7121 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007122}