blob: 3c27fd09fb87ef24a7c7525f88cdc5b9dc87e5a8 [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");
92 if(option_str)
93 {
94 log_output = fopen(option_str, "w");
95 }
Tobin Ehlisb80b4252015-09-01 11:59:36 -060096 if (log_output == NULL) {
97 if (option_str)
98 std::cout << std::endl << "ParamChecker ERROR: Bad output filename specified: " << option_str << ". Writing to STDOUT instead" << std::endl << std::endl;
Jeremy Hayes99a96322015-06-26 12:48:09 -060099 log_output = stdout;
100 }
101
102 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void*)log_output, &data->logging_callback);
103 }
104}
105
106VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
107 VkInstance instance,
108 VkFlags msgFlags,
109 const PFN_vkDbgMsgCallback pfnMsgCallback,
110 void* pUserData,
111 VkDbgMsgCallback* pMsgCallback)
112{
113 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
114 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
115
116 if (result == VK_SUCCESS)
117 {
118 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
119 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
120 }
121
122 return result;
123}
124
125VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
126 VkInstance instance,
127 VkDbgMsgCallback msgCallback)
128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
130 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
131
132 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
133 layer_destroy_msg_callback(data->report_data, msgCallback);
134
135 return result;
136}
137
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600138static const VkLayerProperties pc_global_layers[] = {
139 {
140 "ParamChecker",
141 VK_API_VERSION,
142 VK_MAKE_VERSION(0, 1, 0),
143 "Validation layer: ParamChecker",
144 }
145};
Tony Barbour59a47322015-06-24 16:06:58 -0600146
147VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600148 const char *pLayerName,
149 uint32_t *pCount,
150 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600151{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600152 /* ParamChecker does not have any global extensions */
153 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600154}
155
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600156VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalLayerProperties(
157 uint32_t *pCount,
158 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600159{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600160 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
161 pc_global_layers,
162 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600163}
164
165VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600166 VkPhysicalDevice physicalDevice,
167 const char* pLayerName,
168 uint32_t* pCount,
169 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600170{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600171 /* ParamChecker does not have any physical device extensions */
172 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600173}
174
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600175VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceLayerProperties(
176 VkPhysicalDevice physicalDevice,
177 uint32_t* pCount,
178 VkLayerProperties* pProperties)
179{
180 /* ParamChecker's physical device layers are the same as global */
181 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
182 pCount, pProperties);
183}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600185// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600186
Jeremy Hayes99a96322015-06-26 12:48:09 -0600187static
188std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600189{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600190 switch(enumerator)
191 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600192 case VK_RESULT_MAX_ENUM:
193 {
194 return "VK_RESULT_MAX_ENUM";
195 break;
196 }
197 case VK_ERROR_INVALID_LAYER:
198 {
199 return "VK_ERROR_INVALID_LAYER";
200 break;
201 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600202 case VK_ERROR_INCOMPATIBLE_DRIVER:
203 {
204 return "VK_ERROR_INCOMPATIBLE_DRIVER";
205 break;
206 }
207 case VK_ERROR_MEMORY_UNMAP_FAILED:
208 {
209 return "VK_ERROR_MEMORY_UNMAP_FAILED";
210 break;
211 }
212 case VK_ERROR_MEMORY_MAP_FAILED:
213 {
214 return "VK_ERROR_MEMORY_MAP_FAILED";
215 break;
216 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600217 case VK_INCOMPLETE:
218 {
219 return "VK_INCOMPLETE";
220 break;
221 }
222 case VK_ERROR_OUT_OF_HOST_MEMORY:
223 {
224 return "VK_ERROR_OUT_OF_HOST_MEMORY";
225 break;
226 }
227 case VK_ERROR_UNKNOWN:
228 {
229 return "VK_ERROR_UNKNOWN";
230 break;
231 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600232 case VK_ERROR_INITIALIZATION_FAILED:
233 {
234 return "VK_ERROR_INITIALIZATION_FAILED";
235 break;
236 }
237 case VK_NOT_READY:
238 {
239 return "VK_NOT_READY";
240 break;
241 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600242 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
243 {
244 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
245 break;
246 }
247 case VK_EVENT_SET:
248 {
249 return "VK_EVENT_SET";
250 break;
251 }
252 case VK_TIMEOUT:
253 {
254 return "VK_TIMEOUT";
255 break;
256 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600257 case VK_EVENT_RESET:
258 {
259 return "VK_EVENT_RESET";
260 break;
261 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600262 case VK_UNSUPPORTED:
263 {
264 return "VK_UNSUPPORTED";
265 break;
266 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600267 case VK_ERROR_INCOMPATIBLE_DEVICE:
268 {
269 return "VK_ERROR_INCOMPATIBLE_DEVICE";
270 break;
271 }
272 case VK_SUCCESS:
273 {
274 return "VK_SUCCESS";
275 break;
276 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600277 case VK_ERROR_INVALID_EXTENSION:
278 {
279 return "VK_ERROR_INVALID_EXTENSION";
280 break;
281 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600282 case VK_ERROR_DEVICE_LOST:
283 {
284 return "VK_ERROR_DEVICE_LOST";
285 break;
286 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600287 default:
288 {
289 return "unrecognized enumerator";
290 break;
291 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600292 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600293}
294
295static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600296bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
297{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600298 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600299 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
300 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
301 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
302 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
303 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
304 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
305 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
306 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
307 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600308 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
309 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
310 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600311 if(enumerator & (~allFlags))
312 {
313 return false;
314 }
315
316 return true;
317}
318
319static
320std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
321{
322 if(!ValidateEnumerator(enumerator))
323 {
324 return "unrecognized enumerator";
325 }
326
327 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600328 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
329 {
330 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
331 }
332 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
333 {
334 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
335 }
336 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
337 {
338 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
339 }
340 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
341 {
342 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
343 }
344 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
345 {
346 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
347 }
348 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
349 {
350 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
351 }
352 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
353 {
354 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
355 }
356 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
357 {
358 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
359 }
360 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
361 {
362 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
363 }
364 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
365 {
366 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
367 }
Cody Northrop61d6dd62015-08-18 14:58:29 -0600368 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
369 {
370 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
371 }
372 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
373 {
374 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
375 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600376
377 std::string enumeratorString;
378 for(auto const& string : strings)
379 {
380 enumeratorString += string;
381
382 if(string != strings.back())
383 {
384 enumeratorString += '|';
385 }
386 }
387
388 return enumeratorString;
389}
390
391static
392bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
393{
394 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600395 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600396 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
397 VK_IMAGE_USAGE_STORAGE_BIT |
398 VK_IMAGE_USAGE_SAMPLED_BIT |
399 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
400 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600401 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600402 if(enumerator & (~allFlags))
403 {
404 return false;
405 }
406
407 return true;
408}
409
410static
411std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
412{
413 if(!ValidateEnumerator(enumerator))
414 {
415 return "unrecognized enumerator";
416 }
417
418 std::vector<std::string> strings;
419 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
420 {
421 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
422 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600423 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600424 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600425 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600426 }
427 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
428 {
429 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
430 }
431 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
432 {
433 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
434 }
435 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
436 {
437 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
438 }
439 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
440 {
441 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
442 }
443 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
444 {
445 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
446 }
447 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
448 {
449 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
450 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600451
452 std::string enumeratorString;
453 for(auto const& string : strings)
454 {
455 enumeratorString += string;
456
457 if(string != strings.back())
458 {
459 enumeratorString += '|';
460 }
461 }
462
463 return enumeratorString;
464}
465
466static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600467bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
468{
469 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
470 VK_QUEUE_DMA_BIT |
471 VK_QUEUE_COMPUTE_BIT |
472 VK_QUEUE_SPARSE_MEMMGR_BIT |
473 VK_QUEUE_GRAPHICS_BIT);
474 if(enumerator & (~allFlags))
475 {
476 return false;
477 }
478
479 return true;
480}
481
482static
483std::string EnumeratorString(VkQueueFlagBits const& enumerator)
484{
485 if(!ValidateEnumerator(enumerator))
486 {
487 return "unrecognized enumerator";
488 }
489
490 std::vector<std::string> strings;
491 if(enumerator & VK_QUEUE_EXTENDED_BIT)
492 {
493 strings.push_back("VK_QUEUE_EXTENDED_BIT");
494 }
495 if(enumerator & VK_QUEUE_DMA_BIT)
496 {
497 strings.push_back("VK_QUEUE_DMA_BIT");
498 }
499 if(enumerator & VK_QUEUE_COMPUTE_BIT)
500 {
501 strings.push_back("VK_QUEUE_COMPUTE_BIT");
502 }
503 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
504 {
505 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
506 }
507 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
508 {
509 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
510 }
511
512 std::string enumeratorString;
513 for(auto const& string : strings)
514 {
515 enumeratorString += string;
516
517 if(string != strings.back())
518 {
519 enumeratorString += '|';
520 }
521 }
522
523 return enumeratorString;
524}
525
526static
527bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
528{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600529 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
530 VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600531 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
532 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
533 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
534 VK_MEMORY_PROPERTY_DEVICE_ONLY);
535 if(enumerator & (~allFlags))
536 {
537 return false;
538 }
539
540 return true;
541}
542
543static
544std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
545{
546 if(!ValidateEnumerator(enumerator))
547 {
548 return "unrecognized enumerator";
549 }
550
551 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600552 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
553 {
554 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
555 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600556 if(enumerator & VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT)
557 {
558 strings.push_back("VK_MEMORY_PROPERTY_HOST_WRITE_COMBINED_BIT");
559 }
560 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
561 {
562 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
563 }
564 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
565 {
566 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
567 }
568 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
569 {
570 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
571 }
572 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
573 {
574 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
575 }
576
577 std::string enumeratorString;
578 for(auto const& string : strings)
579 {
580 enumeratorString += string;
581
582 if(string != strings.back())
583 {
584 enumeratorString += '|';
585 }
586 }
587
588 return enumeratorString;
589}
590
591static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600592bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600593{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600594 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600595 if(enumerator & (~allFlags))
596 {
597 return false;
598 }
599
600 return true;
601}
602
603static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600604std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600605{
606 if(!ValidateEnumerator(enumerator))
607 {
608 return "unrecognized enumerator";
609 }
610
611 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600612 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600613 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600614 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600615 }
616
617 std::string enumeratorString;
618 for(auto const& string : strings)
619 {
620 enumeratorString += string;
621
622 if(string != strings.back())
623 {
624 enumeratorString += '|';
625 }
626 }
627
628 return enumeratorString;
629}
630
631static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600632bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
633{
634 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
635 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
636 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
637 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600638 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600639 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600640 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600641
642 return true;
643}
644
645static
646std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
647{
648 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600649 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600650 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600651 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600652
653 std::vector<std::string> strings;
654 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600655 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600656 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600657 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600658 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600659 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600660 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600661 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600662 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600663 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600664 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600665 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600666
667 std::string enumeratorString;
668 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600669 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600670 enumeratorString += string;
671
672 if(string != strings.back())
673 {
674 enumeratorString += '|';
675 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600676 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600677
678 return enumeratorString;
679}
680
681static
682bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
683{
684 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT);
685 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600686 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600687 return false;
688 }
689
690 return true;
691}
692
693static
694std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
695{
696 if(!ValidateEnumerator(enumerator))
697 {
698 return "unrecognized enumerator";
699 }
700
701 std::vector<std::string> strings;
702 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT)
703 {
704 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_64KIB_BLOCK_BIT");
705 }
706
707 std::string enumeratorString;
708 for(auto const& string : strings)
709 {
710 enumeratorString += string;
711
712 if(string != strings.back())
713 {
714 enumeratorString += '|';
715 }
716 }
717
718 return enumeratorString;
719}
720
721static
722bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
723{
724 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
725 if(enumerator & (~allFlags))
726 {
727 return false;
728 }
729
730 return true;
731}
732
733static
734std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
735{
736 if(!ValidateEnumerator(enumerator))
737 {
738 return "unrecognized enumerator";
739 }
740
741 std::vector<std::string> strings;
742 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
743 {
744 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
745 }
746
747 std::string enumeratorString;
748 for(auto const& string : strings)
749 {
750 enumeratorString += string;
751
752 if(string != strings.back())
753 {
754 enumeratorString += '|';
755 }
756 }
757
758 return enumeratorString;
759}
760
761static
762bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
763{
764 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT |
765 VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT |
766 VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT |
767 VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT |
768 VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT |
769 VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT |
770 VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT |
771 VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT |
772 VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT |
773 VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT |
774 VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT);
775 if(enumerator & (~allFlags))
776 {
777 return false;
778 }
779
780 return true;
781}
782
783static
784std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
785{
786 if(!ValidateEnumerator(enumerator))
787 {
788 return "unrecognized enumerator";
789 }
790
791 std::vector<std::string> strings;
792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT)
793 {
794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CS_INVOCATIONS_BIT");
795 }
796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT)
797 {
798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_VERTICES_BIT");
799 }
800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT)
801 {
802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_IA_PRIMITIVES_BIT");
803 }
804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT)
805 {
806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_INVOCATIONS_BIT");
807 }
808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT)
809 {
810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VS_INVOCATIONS_BIT");
811 }
812 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT)
813 {
814 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_PRIMITIVES_BIT");
815 }
816 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT)
817 {
818 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FS_INVOCATIONS_BIT");
819 }
820 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT)
821 {
822 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_C_PRIMITIVES_BIT");
823 }
824 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT)
825 {
826 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TCS_PATCHES_BIT");
827 }
828 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT)
829 {
830 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GS_INVOCATIONS_BIT");
831 }
832 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT)
833 {
834 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TES_INVOCATIONS_BIT");
835 }
836
837 std::string enumeratorString;
838 for(auto const& string : strings)
839 {
840 enumeratorString += string;
841
842 if(string != strings.back())
843 {
844 enumeratorString += '|';
845 }
846 }
847
848 return enumeratorString;
849}
850
851static
852bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
853{
854 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
855 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
856 VK_QUERY_RESULT_WAIT_BIT |
857 VK_QUERY_RESULT_64_BIT |
858 VK_QUERY_RESULT_DEFAULT);
859 if(enumerator & (~allFlags))
860 {
861 return false;
862 }
863
864 return true;
865}
866
867static
868std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
869{
870 if(!ValidateEnumerator(enumerator))
871 {
872 return "unrecognized enumerator";
873 }
874
875 std::vector<std::string> strings;
876 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
877 {
878 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
879 }
880 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
881 {
882 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
883 }
884 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
885 {
886 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
887 }
888 if(enumerator & VK_QUERY_RESULT_64_BIT)
889 {
890 strings.push_back("VK_QUERY_RESULT_64_BIT");
891 }
892 if(enumerator & VK_QUERY_RESULT_DEFAULT)
893 {
894 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600895 }
896
897 std::string enumeratorString;
898 for(auto const& string : strings)
899 {
900 enumeratorString += string;
901
902 if(string != strings.back())
903 {
904 enumeratorString += '|';
905 }
906 }
907
908 return enumeratorString;
909}
910
911static
912bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
913{
914 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
915 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
916 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
917 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
918 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
919 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
920 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
921 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600922 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600923 if(enumerator & (~allFlags))
924 {
925 return false;
926 }
927
928 return true;
929}
930
931static
932std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
933{
934 if(!ValidateEnumerator(enumerator))
935 {
936 return "unrecognized enumerator";
937 }
938
939 std::vector<std::string> strings;
940 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
951 }
952 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
953 {
954 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
955 }
956 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
957 {
958 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
959 }
960 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
961 {
962 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
963 }
964 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
965 {
966 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
967 }
968 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
969 {
970 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
971 }
972 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
973 {
974 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
975 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600976
977 std::string enumeratorString;
978 for(auto const& string : strings)
979 {
980 enumeratorString += string;
981
982 if(string != strings.back())
983 {
984 enumeratorString += '|';
985 }
986 }
987
988 return enumeratorString;
989}
990
991static
992bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
993{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600994 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
995 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600996 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600997 if(enumerator & (~allFlags))
998 {
999 return false;
1000 }
1001
1002 return true;
1003}
1004
1005static
1006std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
1007{
1008 if(!ValidateEnumerator(enumerator))
1009 {
1010 return "unrecognized enumerator";
1011 }
1012
1013 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001014 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
1015 {
1016 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
1017 }
1018 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
1019 {
1020 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
1021 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001022 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001024 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001025 }
1026
1027 std::string enumeratorString;
1028 for(auto const& string : strings)
1029 {
1030 enumeratorString += string;
1031
1032 if(string != strings.back())
1033 {
1034 enumeratorString += '|';
1035 }
1036 }
1037
1038 return enumeratorString;
1039}
1040
1041static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001042bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1043{
1044 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001045 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1046 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001047 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001048 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001049 if(enumerator & (~allFlags))
1050 {
1051 return false;
1052 }
1053
1054 return true;
1055}
1056
1057static
1058std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1059{
1060 if(!ValidateEnumerator(enumerator))
1061 {
1062 return "unrecognized enumerator";
1063 }
1064
1065 std::vector<std::string> strings;
1066 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1067 {
1068 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1069 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001070 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1071 {
1072 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1073 }
1074 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1075 {
1076 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1077 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001078 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1079 {
1080 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1081 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001082 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001083 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001084 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001085 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001086
1087 std::string enumeratorString;
1088 for(auto const& string : strings)
1089 {
1090 enumeratorString += string;
1091
1092 if(string != strings.back())
1093 {
1094 enumeratorString += '|';
1095 }
1096 }
1097
1098 return enumeratorString;
1099}
1100
1101static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001102bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103{
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001104 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1105 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 if(enumerator & (~allFlags))
1107 {
1108 return false;
1109 }
1110
1111 return true;
1112}
1113
1114static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001115std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001116{
1117 if(!ValidateEnumerator(enumerator))
1118 {
1119 return "unrecognized enumerator";
1120 }
1121
1122 std::vector<std::string> strings;
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001123 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001124 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001125 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001126 }
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001127 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001128 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001129 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001130 }
1131
1132 std::string enumeratorString;
1133 for(auto const& string : strings)
1134 {
1135 enumeratorString += string;
1136
1137 if(string != strings.back())
1138 {
1139 enumeratorString += '|';
1140 }
1141 }
1142
1143 return enumeratorString;
1144}
1145
1146static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001147bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1148{
1149 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1150 VK_CHANNEL_B_BIT |
1151 VK_CHANNEL_G_BIT |
1152 VK_CHANNEL_R_BIT);
1153 if(enumerator & (~allFlags))
1154 {
1155 return false;
1156 }
1157
1158 return true;
1159}
1160
1161static
1162std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1163{
1164 if(!ValidateEnumerator(enumerator))
1165 {
1166 return "unrecognized enumerator";
1167 }
1168
1169 std::vector<std::string> strings;
1170 if(enumerator & VK_CHANNEL_A_BIT)
1171 {
1172 strings.push_back("VK_CHANNEL_A_BIT");
1173 }
1174 if(enumerator & VK_CHANNEL_B_BIT)
1175 {
1176 strings.push_back("VK_CHANNEL_B_BIT");
1177 }
1178 if(enumerator & VK_CHANNEL_G_BIT)
1179 {
1180 strings.push_back("VK_CHANNEL_G_BIT");
1181 }
1182 if(enumerator & VK_CHANNEL_R_BIT)
1183 {
1184 strings.push_back("VK_CHANNEL_R_BIT");
1185 }
1186
1187 std::string enumeratorString;
1188 for(auto const& string : strings)
1189 {
1190 enumeratorString += string;
1191
1192 if(string != strings.back())
1193 {
1194 enumeratorString += '|';
1195 }
1196 }
1197
1198 return enumeratorString;
1199}
1200
1201static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001203{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001204 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1205 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1206 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001207 if(enumerator & (~allFlags))
1208 {
1209 return false;
1210 }
1211
1212 return true;
1213}
1214
1215static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001216std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001217{
1218 if(!ValidateEnumerator(enumerator))
1219 {
1220 return "unrecognized enumerator";
1221 }
1222
1223 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001225 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001226 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1227 }
1228 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1229 {
1230 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1231 }
1232 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1233 {
1234 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001235 }
1236
1237 std::string enumeratorString;
1238 for(auto const& string : strings)
1239 {
1240 enumeratorString += string;
1241
1242 if(string != strings.back())
1243 {
1244 enumeratorString += '|';
1245 }
1246 }
1247
1248 return enumeratorString;
1249}
1250
1251static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001252bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001253{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1255 VK_SHADER_STAGE_FRAGMENT_BIT |
1256 VK_SHADER_STAGE_GEOMETRY_BIT |
1257 VK_SHADER_STAGE_COMPUTE_BIT |
1258 VK_SHADER_STAGE_TESS_EVALUATION_BIT |
1259 VK_SHADER_STAGE_TESS_CONTROL_BIT |
1260 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001261 if(enumerator & (~allFlags))
1262 {
1263 return false;
1264 }
1265
1266 return true;
1267}
1268
1269static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001271{
1272 if(!ValidateEnumerator(enumerator))
1273 {
1274 return "unrecognized enumerator";
1275 }
1276
1277 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001278 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001279 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001280 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001281 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001282 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001283 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001284 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001285 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001286 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001287 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001288 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1289 }
1290 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1291 {
1292 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1293 }
1294 if(enumerator & VK_SHADER_STAGE_TESS_EVALUATION_BIT)
1295 {
1296 strings.push_back("VK_SHADER_STAGE_TESS_EVALUATION_BIT");
1297 }
1298 if(enumerator & VK_SHADER_STAGE_TESS_CONTROL_BIT)
1299 {
1300 strings.push_back("VK_SHADER_STAGE_TESS_CONTROL_BIT");
1301 }
1302 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1303 {
1304 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001305 }
1306
1307 std::string enumeratorString;
1308 for(auto const& string : strings)
1309 {
1310 enumeratorString += string;
1311
1312 if(string != strings.back())
1313 {
1314 enumeratorString += '|';
1315 }
1316 }
1317
1318 return enumeratorString;
1319}
1320
1321static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001322bool ValidateEnumerator(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001323{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001324 VkSubpassDescriptionFlagBits allFlags = (VkSubpassDescriptionFlagBits)(VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001325 if(enumerator & (~allFlags))
1326 {
1327 return false;
1328 }
1329
1330 return true;
1331}
1332
1333static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001334std::string EnumeratorString(VkSubpassDescriptionFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001335{
1336 if(!ValidateEnumerator(enumerator))
1337 {
1338 return "unrecognized enumerator";
1339 }
1340
1341 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001342 if(enumerator & VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001343 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001344 strings.push_back("VK_SUBPASS_DESCRIPTION_NO_OVERDRAW_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001345 }
1346
1347 std::string enumeratorString;
1348 for(auto const& string : strings)
1349 {
1350 enumeratorString += string;
1351
1352 if(string != strings.back())
1353 {
1354 enumeratorString += '|';
1355 }
1356 }
1357
1358 return enumeratorString;
1359}
1360
1361static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001362bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001363{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001364 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1365 VK_PIPELINE_STAGE_HOST_BIT |
1366 VK_PIPELINE_STAGE_TRANSFER_BIT |
1367 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1368 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1369 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
1370 VK_PIPELINE_STAGE_TRANSITION_BIT |
1371 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
1372 VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT |
1373 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1374 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1375 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1376 VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT |
1377 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1378 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1379 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1380 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001381 if(enumerator & (~allFlags))
1382 {
1383 return false;
1384 }
1385
1386 return true;
1387}
1388
1389static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001390std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001391{
1392 if(!ValidateEnumerator(enumerator))
1393 {
1394 return "unrecognized enumerator";
1395 }
1396
1397 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001398 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001399 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001400 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001401 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001402 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001403 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001404 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001405 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001406 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001407 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001408 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001409 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001410 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001411 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001412 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001413 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001414 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001415 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001416 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001417 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001418 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001419 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001420 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001421 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001422 if(enumerator & VK_PIPELINE_STAGE_TRANSITION_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001423 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001424 strings.push_back("VK_PIPELINE_STAGE_TRANSITION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001425 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001426 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001427 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001428 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001429 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001430 if(enumerator & VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001431 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001432 strings.push_back("VK_PIPELINE_STAGE_TESS_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001433 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001434 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001435 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001436 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001437 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001438 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001439 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001440 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1441 }
1442 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1443 {
1444 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1445 }
1446 if(enumerator & VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT)
1447 {
1448 strings.push_back("VK_PIPELINE_STAGE_TESS_EVALUATION_SHADER_BIT");
1449 }
1450 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1451 {
1452 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1453 }
1454 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1455 {
1456 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1457 }
1458 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1459 {
1460 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1461 }
1462 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1463 {
1464 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001465 }
1466
1467 std::string enumeratorString;
1468 for(auto const& string : strings)
1469 {
1470 enumeratorString += string;
1471
1472 if(string != strings.back())
1473 {
1474 enumeratorString += '|';
1475 }
1476 }
1477
1478 return enumeratorString;
1479}
1480
1481static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001482bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001483{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001484 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1485 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1486 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1487 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1488 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001489 if(enumerator & (~allFlags))
1490 {
1491 return false;
1492 }
1493
1494 return true;
1495}
1496
1497static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001498std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001499{
1500 if(!ValidateEnumerator(enumerator))
1501 {
1502 return "unrecognized enumerator";
1503 }
1504
1505 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001506 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001507 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001508 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001509 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001510 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001511 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001512 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001513 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001514 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001515 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001516 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1517 }
1518 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1519 {
1520 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1521 }
1522 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1523 {
1524 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001525 }
1526
1527 std::string enumeratorString;
1528 for(auto const& string : strings)
1529 {
1530 enumeratorString += string;
1531
1532 if(string != strings.back())
1533 {
1534 enumeratorString += '|';
1535 }
1536 }
1537
1538 return enumeratorString;
1539}
1540
1541static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001543{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001544 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1545 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1546 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1547 VK_MEMORY_INPUT_SHADER_READ_BIT |
1548 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1549 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1550 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1551 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1552 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1553 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554 if(enumerator & (~allFlags))
1555 {
1556 return false;
1557 }
1558
1559 return true;
1560}
1561
1562static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001563std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001564{
1565 if(!ValidateEnumerator(enumerator))
1566 {
1567 return "unrecognized enumerator";
1568 }
1569
1570 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001571 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001572 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001573 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1574 }
1575 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1576 {
1577 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1578 }
1579 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1580 {
1581 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1582 }
1583 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1584 {
1585 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1586 }
1587 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1588 {
1589 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1590 }
1591 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1592 {
1593 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1594 }
1595 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1596 {
1597 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1598 }
1599 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1600 {
1601 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1602 }
1603 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1604 {
1605 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1606 }
1607 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1608 {
1609 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001610 }
1611
1612 std::string enumeratorString;
1613 for(auto const& string : strings)
1614 {
1615 enumeratorString += string;
1616
1617 if(string != strings.back())
1618 {
1619 enumeratorString += '|';
1620 }
1621 }
1622
1623 return enumeratorString;
1624}
1625
1626static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001627bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001628{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001629 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1630 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001631 if(enumerator & (~allFlags))
1632 {
1633 return false;
1634 }
1635
1636 return true;
1637}
1638
1639static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001640std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001641{
1642 if(!ValidateEnumerator(enumerator))
1643 {
1644 return "unrecognized enumerator";
1645 }
1646
1647 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001648 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001649 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001650 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001651 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001652 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001653 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001654 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001655 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001656
1657 std::string enumeratorString;
1658 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001659 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001660 enumeratorString += string;
1661
1662 if(string != strings.back())
1663 {
1664 enumeratorString += '|';
1665 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001666 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001667
1668 return enumeratorString;
1669}
1670
1671static
1672bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1673{
1674 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES);
1675 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001676 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001677 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001678 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001679
1680 return true;
1681}
1682
1683static
1684std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1685{
1686 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001687 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001688 return "unrecognized enumerator";
1689 }
1690
1691 std::vector<std::string> strings;
1692 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES)
1693 {
1694 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001695 }
1696
1697 std::string enumeratorString;
1698 for(auto const& string : strings)
1699 {
1700 enumeratorString += string;
1701
1702 if(string != strings.back())
1703 {
1704 enumeratorString += '|';
1705 }
1706 }
1707
1708 return enumeratorString;
1709}
1710
1711static
1712bool ValidateEnumerator(VkCmdBufferOptimizeFlagBits const& enumerator)
1713{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001714 VkCmdBufferOptimizeFlagBits allFlags = (VkCmdBufferOptimizeFlagBits)(VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT |
1715 VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001716 VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT |
1717 VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT |
1718 VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT);
1719 if(enumerator & (~allFlags))
1720 {
1721 return false;
1722 }
1723
1724 return true;
1725}
1726
1727static
1728std::string EnumeratorString(VkCmdBufferOptimizeFlagBits const& enumerator)
1729{
1730 if(!ValidateEnumerator(enumerator))
1731 {
1732 return "unrecognized enumerator";
1733 }
1734
1735 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001736 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT)
1737 {
1738 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_NO_SIMULTANEOUS_USE_BIT");
1739 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001740 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT)
1741 {
1742 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_DESCRIPTOR_SET_SWITCH_BIT");
1743 }
1744 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT)
1745 {
1746 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_ONE_TIME_SUBMIT_BIT");
1747 }
1748 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT)
1749 {
1750 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_PIPELINE_SWITCH_BIT");
1751 }
1752 if(enumerator & VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT)
1753 {
1754 strings.push_back("VK_CMD_BUFFER_OPTIMIZE_SMALL_BATCH_BIT");
1755 }
1756
1757 std::string enumeratorString;
1758 for(auto const& string : strings)
1759 {
1760 enumeratorString += string;
1761
1762 if(string != strings.back())
1763 {
1764 enumeratorString += '|';
1765 }
1766 }
1767
1768 return enumeratorString;
1769}
1770
1771static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001772bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001773{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001774 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775 if(enumerator & (~allFlags))
1776 {
1777 return false;
1778 }
1779
1780 return true;
1781}
1782
1783static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001784std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001785{
1786 if(!ValidateEnumerator(enumerator))
1787 {
1788 return "unrecognized enumerator";
1789 }
1790
1791 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001792 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001793 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001794 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001795 }
1796
1797 std::string enumeratorString;
1798 for(auto const& string : strings)
1799 {
1800 enumeratorString += string;
1801
1802 if(string != strings.back())
1803 {
1804 enumeratorString += '|';
1805 }
1806 }
1807
1808 return enumeratorString;
1809}
1810
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001811static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001812bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001813{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001814 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1815 VK_IMAGE_ASPECT_STENCIL_BIT |
1816 VK_IMAGE_ASPECT_DEPTH_BIT |
1817 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001818 if(enumerator & (~allFlags))
1819 {
1820 return false;
1821 }
1822
1823 return true;
1824}
1825
1826static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001827std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001828{
1829 if(!ValidateEnumerator(enumerator))
1830 {
1831 return "unrecognized enumerator";
1832 }
1833
1834 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001835 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001836 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001837 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1838 }
1839 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1840 {
1841 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1842 }
1843 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1844 {
1845 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1846 }
1847 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1848 {
1849 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1850 }
1851
1852 std::string enumeratorString;
1853 for(auto const& string : strings)
1854 {
1855 enumeratorString += string;
1856
1857 if(string != strings.back())
1858 {
1859 enumeratorString += '|';
1860 }
1861 }
1862
1863 return enumeratorString;
1864}
1865
1866static
1867bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1868{
1869 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1870 if(enumerator & (~allFlags))
1871 {
1872 return false;
1873 }
1874
1875 return true;
1876}
1877
1878static
1879std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1880{
1881 if(!ValidateEnumerator(enumerator))
1882 {
1883 return "unrecognized enumerator";
1884 }
1885
1886 std::vector<std::string> strings;
1887 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1888 {
1889 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001890 }
1891
1892 std::string enumeratorString;
1893 for(auto const& string : strings)
1894 {
1895 enumeratorString += string;
1896
1897 if(string != strings.back())
1898 {
1899 enumeratorString += '|';
1900 }
1901 }
1902
1903 return enumeratorString;
1904}
1905
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1907 const VkInstanceCreateInfo* pCreateInfo,
1908 VkInstance* pInstance)
1909{
1910 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1911 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1912
1913 if (result == VK_SUCCESS) {
1914 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1915 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001916 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001917
1918 InitParamChecker(data);
1919 }
1920
1921 return result;
1922}
1923
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001924VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001925 VkInstance instance)
1926{
1927 // Grab the key before the instance is destroyed.
1928 dispatch_key key = get_dispatch_key(instance);
1929 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001930 pTable->DestroyInstance(instance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001931
1932 // Clean up logging callback, if any
1933 layer_data *data = get_my_data_ptr(key, layer_data_map);
1934 if(data->logging_callback)
1935 {
1936 layer_destroy_msg_callback(data->report_data, data->logging_callback);
1937 }
1938
1939 layer_debug_report_destroy_instance(mid(instance));
1940 layer_data_map.erase(pTable);
1941
1942 pc_instance_table_map.erase(key);
1943 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001944}
1945
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001946bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001947 VkInstance instance,
1948 uint32_t* pPhysicalDeviceCount,
1949 VkPhysicalDevice* pPhysicalDevices,
1950 VkResult result)
1951{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001952
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001953 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001954 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001955 }
1956
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001957 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001958 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001959 }
1960
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001961 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001962 {
1963 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001964 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1965 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001966 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001967
1968 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001969}
1970
1971VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1972 VkInstance instance,
1973 uint32_t* pPhysicalDeviceCount,
1974 VkPhysicalDevice* pPhysicalDevices)
1975{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001976 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1977
1978 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1979
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001980 return result;
1981}
1982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001983bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001984 VkPhysicalDevice physicalDevice,
1985 VkPhysicalDeviceFeatures* pFeatures,
1986 VkResult result)
1987{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001988
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001989 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001990 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001991 }
1992
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001993 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001994 {
1995 std::string reason = "vkGetPhysicalDeviceFeatures parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001996 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1997 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001998 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001999
2000 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002001}
2002
2003VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFeatures(
2004 VkPhysicalDevice physicalDevice,
2005 VkPhysicalDeviceFeatures* pFeatures)
2006{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002007 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
2008
2009 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures, result);
2010
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002011 return result;
2012}
2013
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06002014bool PostGetPhysicalDeviceFormatProperties(
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 VkResult result)
2019{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002020
2021 if(format < VK_FORMAT_BEGIN_RANGE ||
2022 format > VK_FORMAT_END_RANGE)
2023 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002024 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002025 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002026 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002027 }
2028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002030 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002031 }
2032
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002034 {
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06002035 std::string reason = "vkGetPhysicalDeviceFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002036 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2037 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002038 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002039
2040 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002041}
2042
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06002043VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002044 VkPhysicalDevice physicalDevice,
2045 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002046 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002047{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002048 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002049
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002050 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties, result);
2051
2052 return result;
2053}
2054
2055bool PostGetPhysicalDeviceImageFormatProperties(
2056 VkPhysicalDevice physicalDevice,
2057 VkFormat format,
2058 VkImageType type,
2059 VkImageTiling tiling,
2060 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002061 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002062 VkImageFormatProperties* pImageFormatProperties,
2063 VkResult result)
2064{
2065
2066 if(format < VK_FORMAT_BEGIN_RANGE ||
2067 format > VK_FORMAT_END_RANGE)
2068 {
2069 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2070 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
2071 return false;
2072 }
2073
2074 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2075 type > VK_IMAGE_TYPE_END_RANGE)
2076 {
2077 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2078 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
2079 return false;
2080 }
2081
2082 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2083 tiling > VK_IMAGE_TILING_END_RANGE)
2084 {
2085 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2086 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
2087 return false;
2088 }
2089
2090
2091 if(pImageFormatProperties != nullptr)
2092 {
2093 }
2094
2095 if(result < VK_SUCCESS)
2096 {
2097 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2098 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2099 return false;
2100 }
2101
2102 return true;
2103}
2104
2105VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
2106 VkPhysicalDevice physicalDevice,
2107 VkFormat format,
2108 VkImageType type,
2109 VkImageTiling tiling,
2110 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002111 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002112 VkImageFormatProperties* pImageFormatProperties)
2113{
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002114 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 -06002115
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002116 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002118 return result;
2119}
2120
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002121bool PostGetPhysicalDeviceProperties(
2122 VkPhysicalDevice physicalDevice,
2123 VkPhysicalDeviceProperties* pProperties,
2124 VkResult result)
2125{
2126
2127 if(pProperties != nullptr)
2128 {
2129 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2130 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2131 {
2132 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2133 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2134 return false;
2135 }
2136 }
2137
2138 if(result < VK_SUCCESS)
2139 {
2140 std::string reason = "vkGetPhysicalDeviceProperties parameter, VkResult result, is " + EnumeratorString(result);
2141 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2142 return false;
2143 }
2144
2145 return true;
2146}
2147
2148VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceProperties(
2149 VkPhysicalDevice physicalDevice,
2150 VkPhysicalDeviceProperties* pProperties)
2151{
2152 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
2153
2154 PostGetPhysicalDeviceProperties(physicalDevice, pProperties, result);
2155
2156 return result;
2157}
2158
Cody Northropd0802882015-08-03 17:04:53 -06002159bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002160 VkPhysicalDevice physicalDevice,
2161 uint32_t* pCount,
Cody Northropd0802882015-08-03 17:04:53 -06002162 VkQueueFamilyProperties* pQueueProperties,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002163 VkResult result)
2164{
2165
Cody Northropd0802882015-08-03 17:04:53 -06002166 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002167 {
2168 }
2169
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002170 if(pQueueProperties != nullptr)
2171 {
2172 }
2173
2174 if(result < VK_SUCCESS)
2175 {
Cody Northropd0802882015-08-03 17:04:53 -06002176 std::string reason = "vkGetPhysicalDeviceQueueFamilyProperties parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002177 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2178 return false;
2179 }
2180
2181 return true;
2182}
2183
2184VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceQueueProperties(
2185 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002186 uint32_t* pCount,
2187 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002188{
Cody Northropd0802882015-08-03 17:04:53 -06002189 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002190
Cody Northropd0802882015-08-03 17:04:53 -06002191 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002192
2193 return result;
2194}
2195
2196bool PostGetPhysicalDeviceMemoryProperties(
2197 VkPhysicalDevice physicalDevice,
2198 VkPhysicalDeviceMemoryProperties* pMemoryProperties,
2199 VkResult result)
2200{
2201
2202 if(pMemoryProperties != nullptr)
2203 {
2204 }
2205
2206 if(result < VK_SUCCESS)
2207 {
2208 std::string reason = "vkGetPhysicalDeviceMemoryProperties parameter, VkResult result, is " + EnumeratorString(result);
2209 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2210 return false;
2211 }
2212
2213 return true;
2214}
2215
2216VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceMemoryProperties(
2217 VkPhysicalDevice physicalDevice,
2218 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2219{
2220 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
2221
2222 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties, result);
2223
2224 return result;
2225}
2226
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2228 VkPhysicalDevice physicalDevice,
2229 const VkDeviceCreateInfo* pCreateInfo,
2230 VkDevice* pDevice)
2231{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002232 /*
2233 * NOTE: The loader fills in the ICD's device object in *pDevice.
2234 * Use that object to get the dispatch table.
2235 *
2236 * NOTE: We do not validate physicalDevice or any dispatchable
2237 * object as the first parameter. We couldn't get here if it was wrong!
2238 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002239 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2241 if(result == VK_SUCCESS)
2242 {
2243 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2244 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2245 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2246 }
2247
2248 return result;
2249}
2250
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002251VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252 VkDevice device)
2253{
2254 layer_debug_report_destroy_device(device);
2255
2256 dispatch_key key = get_dispatch_key(device);
2257#if DISPATCH_MAP_DEBUG
2258 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2259#endif
2260
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002261 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002262 pc_device_table_map.erase(key);
2263 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264}
2265
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002266bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002267 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002268 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002269 uint32_t queueIndex,
2270 VkQueue* pQueue,
2271 VkResult result)
2272{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002273
2274
2275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002276 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002277 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 }
2279
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002280 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281 {
2282 std::string reason = "vkGetDeviceQueue parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2284 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002285 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002286
2287 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002288}
2289
2290VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(
2291 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002292 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002293 uint32_t queueIndex,
2294 VkQueue* pQueue)
2295{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002296 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002298 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299
2300 return result;
2301}
2302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002303bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 VkQueue queue,
2305 const VkCmdBuffer* pCmdBuffers)
2306{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002307 if(pCmdBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002310
2311 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312}
2313
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002314bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315 VkQueue queue,
2316 uint32_t cmdBufferCount,
2317 VkFence fence,
2318 VkResult result)
2319{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002320
2321
Jeremy Hayes99a96322015-06-26 12:48:09 -06002322
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002323 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002324 {
2325 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002326 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002329
2330 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331}
2332
2333VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2334 VkQueue queue,
2335 uint32_t cmdBufferCount,
2336 const VkCmdBuffer* pCmdBuffers,
2337 VkFence fence)
2338{
2339 PreQueueSubmit(queue, pCmdBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002340
Jeremy Hayes99a96322015-06-26 12:48:09 -06002341 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
2342
2343 PostQueueSubmit(queue, cmdBufferCount, fence, result);
2344
2345 return result;
2346}
2347
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002348bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002349 VkQueue queue,
2350 VkResult result)
2351{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002352
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002353 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354 {
2355 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2357 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002359
2360 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002361}
2362
2363VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2364 VkQueue queue)
2365{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2367
2368 PostQueueWaitIdle(queue, result);
2369
2370 return result;
2371}
2372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374 VkDevice device,
2375 VkResult result)
2376{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002377
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002378 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379 {
2380 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002381 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2382 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002383 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002384
2385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386}
2387
2388VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2389 VkDevice device)
2390{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2392
2393 PostDeviceWaitIdle(device, result);
2394
2395 return result;
2396}
2397
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002398bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002399 VkDevice device,
2400 const VkMemoryAllocInfo* pAllocInfo)
2401{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002402 if(pAllocInfo != nullptr)
2403 {
2404 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002407 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002408 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002410 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002411
2412 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002413}
2414
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002415bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416 VkDevice device,
2417 VkDeviceMemory* pMem,
2418 VkResult result)
2419{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002420
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002421 if(pMem != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002422 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 }
2424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002425 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426 {
2427 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431
2432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002433}
2434
2435VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2436 VkDevice device,
2437 const VkMemoryAllocInfo* pAllocInfo,
2438 VkDeviceMemory* pMem)
2439{
2440 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2443
2444 PostAllocMemory(device, pMem, result);
2445
2446 return result;
2447}
2448
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002449bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 VkDevice device,
2451 VkDeviceMemory mem,
2452 VkDeviceSize offset,
2453 VkDeviceSize size,
2454 VkMemoryMapFlags flags,
2455 void** ppData,
2456 VkResult result)
2457{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002458
Jeremy Hayes99a96322015-06-26 12:48:09 -06002459
2460
2461
2462
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002463 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002465 }
2466
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002467 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002468 {
2469 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2471 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002472 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002473
2474 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002475}
2476
2477VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2478 VkDevice device,
2479 VkDeviceMemory mem,
2480 VkDeviceSize offset,
2481 VkDeviceSize size,
2482 VkMemoryMapFlags flags,
2483 void** ppData)
2484{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002485 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2486
2487 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2488
2489 return result;
2490}
2491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002492bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493 VkDevice device,
2494 const VkMappedMemoryRange* pMemRanges)
2495{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002496 if(pMemRanges != nullptr)
2497 {
2498 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002499 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002501 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002503 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002504 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002505
2506 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002507}
2508
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002509bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002510 VkDevice device,
2511 uint32_t memRangeCount,
2512 VkResult result)
2513{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002514
2515
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002516 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002517 {
2518 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2520 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002521 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002522
2523 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002524}
2525
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002526VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002527 VkDevice device,
2528 uint32_t memRangeCount,
2529 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002530{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002531 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002532
Jeremy Hayes99a96322015-06-26 12:48:09 -06002533 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002534
Jeremy Hayes99a96322015-06-26 12:48:09 -06002535 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2536
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002537 return result;
2538}
2539
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002540bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002541 VkDevice device,
2542 const VkMappedMemoryRange* pMemRanges)
2543{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002544 if(pMemRanges != nullptr)
2545 {
2546 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002547 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002548 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002549 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002551 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002552 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553
2554 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002555}
2556
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002558 VkDevice device,
2559 uint32_t memRangeCount,
2560 VkResult result)
2561{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002562
2563
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002564 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002565 {
2566 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002569 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002570
2571 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002572}
2573
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002574VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002575 VkDevice device,
2576 uint32_t memRangeCount,
2577 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002578{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002579 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580
Jeremy Hayes99a96322015-06-26 12:48:09 -06002581 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002582
Jeremy Hayes99a96322015-06-26 12:48:09 -06002583 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2584
Tony Barbourb1250542015-04-16 19:23:13 -06002585 return result;
2586}
2587
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002588bool PostGetDeviceMemoryCommitment(
2589 VkDevice device,
2590 VkDeviceMemory memory,
2591 VkDeviceSize* pCommittedMemoryInBytes,
2592 VkResult result)
2593{
2594
2595
2596 if(pCommittedMemoryInBytes != nullptr)
2597 {
2598 }
2599
2600 if(result < VK_SUCCESS)
2601 {
2602 std::string reason = "vkGetDeviceMemoryCommitment parameter, VkResult result, is " + EnumeratorString(result);
2603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2604 return false;
2605 }
2606
2607 return true;
2608}
2609
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002610VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002611 VkDevice device,
2612 VkDeviceMemory memory,
2613 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002614{
2615 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
2616
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002617 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes, result);
2618
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002619 return result;
2620}
2621
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002622bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002623 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002625 VkDeviceMemory mem,
2626 VkDeviceSize memOffset,
2627 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002628{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002629
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002630
Jeremy Hayes99a96322015-06-26 12:48:09 -06002631
2632
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002633 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002634 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2637 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002638 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002639
2640 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002641}
2642
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002644 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002646 VkDeviceMemory mem,
2647 VkDeviceSize memOffset)
2648{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002649 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002650
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002651 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002652
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002653 return result;
2654}
2655
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002657 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002658 VkImage image,
2659 VkDeviceMemory mem,
2660 VkDeviceSize memOffset,
2661 VkResult result)
2662{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002663
2664
2665
2666
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002667 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002668 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002669 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2670 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2671 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002672 }
2673
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002674 return true;
2675}
2676
2677VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2678 VkDevice device,
2679 VkImage image,
2680 VkDeviceMemory mem,
2681 VkDeviceSize memOffset)
2682{
2683 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2684
2685 PostBindImageMemory(device, image, mem, memOffset, result);
2686
2687 return result;
2688}
2689
2690bool PostGetBufferMemoryRequirements(
2691 VkDevice device,
2692 VkBuffer buffer,
2693 VkMemoryRequirements* pMemoryRequirements,
2694 VkResult result)
2695{
2696
2697
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002698 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002699 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002700 }
2701
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002702 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002703 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002704 std::string reason = "vkGetBufferMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2705 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2706 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002707 }
2708
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002709 return true;
2710}
2711
2712VK_LAYER_EXPORT VkResult VKAPI vkGetBufferMemoryRequirements(
2713 VkDevice device,
2714 VkBuffer buffer,
2715 VkMemoryRequirements* pMemoryRequirements)
2716{
2717 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
2718
2719 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements, result);
2720
2721 return result;
2722}
2723
2724bool PostGetImageMemoryRequirements(
2725 VkDevice device,
2726 VkImage image,
2727 VkMemoryRequirements* pMemoryRequirements,
2728 VkResult result)
2729{
2730
2731
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002732 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002733 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002734 }
2735
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002736 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002737 {
2738 std::string reason = "vkGetImageMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2740 return false;
2741 }
2742
2743 return true;
2744}
2745
2746VK_LAYER_EXPORT VkResult VKAPI vkGetImageMemoryRequirements(
2747 VkDevice device,
2748 VkImage image,
2749 VkMemoryRequirements* pMemoryRequirements)
2750{
2751 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
2752
2753 PostGetImageMemoryRequirements(device, image, pMemoryRequirements, result);
2754
2755 return result;
2756}
2757
2758bool PostGetImageSparseMemoryRequirements(
2759 VkDevice device,
2760 VkImage image,
2761 uint32_t* pNumRequirements,
2762 VkSparseImageMemoryRequirements* pSparseMemoryRequirements,
2763 VkResult result)
2764{
2765
2766
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002767 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002768 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002769 }
2770
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002771 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002773 if(pSparseMemoryRequirements->formatProps.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2774 pSparseMemoryRequirements->formatProps.aspect > VK_IMAGE_ASPECT_END_RANGE)
2775 {
2776 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002777 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002778 return false;
2779 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002780 }
2781
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002782 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002783 {
2784 std::string reason = "vkGetImageSparseMemoryRequirements parameter, VkResult result, is " + EnumeratorString(result);
2785 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2786 return false;
2787 }
2788
2789 return true;
2790}
2791
2792VK_LAYER_EXPORT VkResult VKAPI vkGetImageSparseMemoryRequirements(
2793 VkDevice device,
2794 VkImage image,
2795 uint32_t* pNumRequirements,
2796 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2797{
2798 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
2799
2800 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements, result);
2801
2802 return result;
2803}
2804
2805bool PostGetPhysicalDeviceSparseImageFormatProperties(
2806 VkPhysicalDevice physicalDevice,
2807 VkFormat format,
2808 VkImageType type,
2809 uint32_t samples,
2810 VkImageUsageFlags usage,
2811 VkImageTiling tiling,
2812 uint32_t* pNumProperties,
2813 VkSparseImageFormatProperties* pProperties,
2814 VkResult result)
2815{
2816
2817 if(format < VK_FORMAT_BEGIN_RANGE ||
2818 format > VK_FORMAT_END_RANGE)
2819 {
2820 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002821 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002822 return false;
2823 }
2824
2825 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2826 type > VK_IMAGE_TYPE_END_RANGE)
2827 {
2828 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002829 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002830 return false;
2831 }
2832
2833
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002834
2835 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2836 tiling > VK_IMAGE_TILING_END_RANGE)
2837 {
2838 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002839 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002840 return false;
2841 }
2842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002843 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002844 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002845 }
2846
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002847 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002848 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002849 if(pProperties->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2850 pProperties->aspect > VK_IMAGE_ASPECT_END_RANGE)
2851 {
2852 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002853 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002854 return false;
2855 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002856 }
2857
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002858 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002859 {
2860 std::string reason = "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
2861 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2862 return false;
2863 }
2864
2865 return true;
2866}
2867
2868VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
2869 VkPhysicalDevice physicalDevice,
2870 VkFormat format,
2871 VkImageType type,
2872 uint32_t samples,
2873 VkImageUsageFlags usage,
2874 VkImageTiling tiling,
2875 uint32_t* pNumProperties,
2876 VkSparseImageFormatProperties* pProperties)
2877{
2878 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
2879
2880 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties, result);
2881
2882 return result;
2883}
2884
2885bool PreQueueBindSparseBufferMemory(
2886 VkQueue queue,
2887 const VkSparseMemoryBindInfo* pBindInfo)
2888{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002889 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002890 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002891 }
2892
2893 return true;
2894}
2895
2896bool PostQueueBindSparseBufferMemory(
2897 VkQueue queue,
2898 VkBuffer buffer,
2899 uint32_t numBindings,
2900 VkResult result)
2901{
2902
2903
2904
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002905 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002906 {
2907 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2908 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2909 return false;
2910 }
2911
2912 return true;
2913}
2914
2915VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2916 VkQueue queue,
2917 VkBuffer buffer,
2918 uint32_t numBindings,
2919 const VkSparseMemoryBindInfo* pBindInfo)
2920{
2921 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2922
2923 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2924
2925 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2926
2927 return result;
2928}
2929
2930bool PreQueueBindSparseImageOpaqueMemory(
2931 VkQueue queue,
2932 const VkSparseMemoryBindInfo* pBindInfo)
2933{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002934 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002935 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002936 }
2937
2938 return true;
2939}
2940
2941bool PostQueueBindSparseImageOpaqueMemory(
2942 VkQueue queue,
2943 VkImage image,
2944 uint32_t numBindings,
2945 VkResult result)
2946{
2947
2948
2949
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002950 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002951 {
2952 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2953 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2954 return false;
2955 }
2956
2957 return true;
2958}
2959
2960VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2961 VkQueue queue,
2962 VkImage image,
2963 uint32_t numBindings,
2964 const VkSparseMemoryBindInfo* pBindInfo)
2965{
2966 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2967
2968 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2969
2970 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2971
2972 return result;
2973}
2974
2975bool PreQueueBindSparseImageMemory(
2976 VkQueue queue,
2977 const VkSparseImageMemoryBindInfo* pBindInfo)
2978{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002979 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002980 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002981 if(pBindInfo->subresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
2982 pBindInfo->subresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
2983 {
2984 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002985 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002986 return false;
2987 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002988 }
2989
2990 return true;
2991}
2992
2993bool PostQueueBindSparseImageMemory(
2994 VkQueue queue,
2995 VkImage image,
2996 uint32_t numBindings,
2997 VkResult result)
2998{
2999
3000
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003002 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003003 {
3004 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003005 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3006 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003008
3009 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003010}
3011
3012VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003013 VkQueue queue,
3014 VkImage image,
3015 uint32_t numBindings,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06003016 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003017{
3018 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003019
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06003020 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003022 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003024 return result;
3025}
3026
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003027bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 VkDevice device,
3029 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003030{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003031 if(pCreateInfo != nullptr)
3032 {
3033 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003034 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003035 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003036 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003037 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003038 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003039 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003040
3041 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003042}
3043
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003044bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003045 VkDevice device,
3046 VkFence* pFence,
3047 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003048{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003050 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003051 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003052 }
3053
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003054 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003055 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003056 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3058 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003059 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003060
3061 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003062}
3063
3064VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
3065 VkDevice device,
3066 const VkFenceCreateInfo* pCreateInfo,
3067 VkFence* pFence)
3068{
3069 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
3072
3073 PostCreateFence(device, pFence, result);
3074
3075 return result;
3076}
3077
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003078bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079 VkDevice device,
3080 const VkFence* pFences)
3081{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003082 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003084 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003085
3086 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087}
3088
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003089bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003090 VkDevice device,
3091 uint32_t fenceCount,
3092 VkResult result)
3093{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094
3095
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003096 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003097 {
3098 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003099 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3100 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003101 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003102
3103 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003104}
3105
3106VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
3107 VkDevice device,
3108 uint32_t fenceCount,
3109 const VkFence* pFences)
3110{
3111 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003112
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
3114
3115 PostResetFences(device, fenceCount, result);
3116
3117 return result;
3118}
3119
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003120bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 VkDevice device,
3122 VkFence fence,
3123 VkResult result)
3124{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003125
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003127 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003128 {
3129 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3131 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003133
3134 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135}
3136
3137VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
3138 VkDevice device,
3139 VkFence fence)
3140{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
3142
3143 PostGetFenceStatus(device, fence, result);
3144
3145 return result;
3146}
3147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003148bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003149 VkDevice device,
3150 const VkFence* pFences)
3151{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003152 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003153 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003154 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003155
3156 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003157}
3158
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003159bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003160 VkDevice device,
3161 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003162 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163 uint64_t timeout,
3164 VkResult result)
3165{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166
3167
3168
3169
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003170 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171 {
3172 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003173 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003175 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003176
3177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178}
3179
3180VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
3181 VkDevice device,
3182 uint32_t fenceCount,
3183 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06003184 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 uint64_t timeout)
3186{
3187 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003188
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
3190
3191 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
3192
3193 return result;
3194}
3195
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003196bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 VkDevice device,
3198 const VkSemaphoreCreateInfo* pCreateInfo)
3199{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003200 if(pCreateInfo != nullptr)
3201 {
3202 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003203 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003204 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003205 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003209
3210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211}
3212
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003213bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214 VkDevice device,
3215 VkSemaphore* pSemaphore,
3216 VkResult result)
3217{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003218
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003219 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 }
3222
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003223 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224 {
3225 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3227 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003228 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003229
3230 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003231}
3232
3233VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3234 VkDevice device,
3235 const VkSemaphoreCreateInfo* pCreateInfo,
3236 VkSemaphore* pSemaphore)
3237{
3238 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239
Jeremy Hayes99a96322015-06-26 12:48:09 -06003240 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3241
3242 PostCreateSemaphore(device, pSemaphore, result);
3243
3244 return result;
3245}
3246
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003247bool PostQueueSignalSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003248 VkQueue queue,
3249 VkSemaphore semaphore,
3250 VkResult result)
3251{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003252
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003254 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003255 {
3256 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3258 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003259 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003260
3261 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003262}
3263
3264VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3265 VkQueue queue,
3266 VkSemaphore semaphore)
3267{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003268 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3269
3270 PostQueueSignalSemaphore(queue, semaphore, result);
3271
3272 return result;
3273}
3274
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003275bool PostQueueWaitSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003276 VkQueue queue,
3277 VkSemaphore semaphore,
3278 VkResult result)
3279{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003283 {
3284 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003285 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3286 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003288
3289 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003290}
3291
3292VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3293 VkQueue queue,
3294 VkSemaphore semaphore)
3295{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3297
3298 PostQueueWaitSemaphore(queue, semaphore, result);
3299
3300 return result;
3301}
3302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003304 VkDevice device,
3305 const VkEventCreateInfo* pCreateInfo)
3306{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003307 if(pCreateInfo != nullptr)
3308 {
3309 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003310 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003311 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003312 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003313 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003315 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003316
3317 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003318}
3319
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003320bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003321 VkDevice device,
3322 VkEvent* pEvent,
3323 VkResult result)
3324{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003326 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003328 }
3329
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003330 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003331 {
3332 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003333 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003335 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003336
3337 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338}
3339
3340VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3341 VkDevice device,
3342 const VkEventCreateInfo* pCreateInfo,
3343 VkEvent* pEvent)
3344{
3345 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003346
Jeremy Hayes99a96322015-06-26 12:48:09 -06003347 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3348
3349 PostCreateEvent(device, pEvent, result);
3350
3351 return result;
3352}
3353
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003354bool PostGetEventStatus(
3355 VkDevice device,
3356 VkEvent event,
3357 VkResult result)
3358{
3359
Jeremy Hayes99a96322015-06-26 12:48:09 -06003360
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003361 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 {
3363 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3365 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003366 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367
3368 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003369}
3370
3371VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3372 VkDevice device,
3373 VkEvent event)
3374{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3376
3377 PostGetEventStatus(device, event, result);
3378
3379 return result;
3380}
3381
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003382bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 VkDevice device,
3384 VkEvent event,
3385 VkResult result)
3386{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003389 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003390 {
3391 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003392 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3393 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003394 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395
3396 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397}
3398
3399VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3400 VkDevice device,
3401 VkEvent event)
3402{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003403 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3404
3405 PostSetEvent(device, event, result);
3406
3407 return result;
3408}
3409
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003410bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003411 VkDevice device,
3412 VkEvent event,
3413 VkResult result)
3414{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003415
Jeremy Hayes99a96322015-06-26 12:48:09 -06003416
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003417 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003418 {
3419 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423
3424 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003425}
3426
3427VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3428 VkDevice device,
3429 VkEvent event)
3430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3432
3433 PostResetEvent(device, event, result);
3434
3435 return result;
3436}
3437
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003438bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003439 VkDevice device,
3440 const VkQueryPoolCreateInfo* pCreateInfo)
3441{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003442 if(pCreateInfo != nullptr)
3443 {
3444 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003447 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003449 }
3450 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3451 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3452 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003454 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003455 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003456 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003457 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003458
3459 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003460}
3461
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003462bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003463 VkDevice device,
3464 VkQueryPool* pQueryPool,
3465 VkResult result)
3466{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003467
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003468 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003469 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003470 }
3471
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003472 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 {
3474 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003475 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003478
3479 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003480}
3481
3482VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3483 VkDevice device,
3484 const VkQueryPoolCreateInfo* pCreateInfo,
3485 VkQueryPool* pQueryPool)
3486{
3487 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003488
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3490
3491 PostCreateQueryPool(device, pQueryPool, result);
3492
3493 return result;
3494}
3495
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003496bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003497 VkDevice device,
3498 VkQueryPool queryPool,
3499 uint32_t startQuery,
3500 uint32_t queryCount,
3501 size_t* pDataSize,
3502 void* pData,
3503 VkQueryResultFlags flags,
3504 VkResult result)
3505{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003506
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507
3508
3509
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003510 if(pDataSize != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003511 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003512 }
3513
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003514 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003516 }
3517
Jeremy Hayes99a96322015-06-26 12:48:09 -06003518
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003519 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003520 {
3521 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003522 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3523 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003524 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003525
3526 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527}
3528
3529VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3530 VkDevice device,
3531 VkQueryPool queryPool,
3532 uint32_t startQuery,
3533 uint32_t queryCount,
3534 size_t* pDataSize,
3535 void* pData,
3536 VkQueryResultFlags flags)
3537{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003538 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
3539
3540 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags, result);
3541
3542 return result;
3543}
3544
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003545bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546 VkDevice device,
3547 const VkBufferCreateInfo* pCreateInfo)
3548{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549 if(pCreateInfo != nullptr)
3550 {
3551 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003552 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003553 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003554 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003557 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3558 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003559 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003560 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003561 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003562 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003563 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003564 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003565 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003566 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003567 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003568
3569 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570}
3571
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003572bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573 VkDevice device,
3574 VkBuffer* pBuffer,
3575 VkResult result)
3576{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003577
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003578 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003579 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003580 }
3581
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003582 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 {
3584 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003585 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3586 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003587 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003588
3589 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003590}
3591
3592VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3593 VkDevice device,
3594 const VkBufferCreateInfo* pCreateInfo,
3595 VkBuffer* pBuffer)
3596{
3597 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003598
Jeremy Hayes99a96322015-06-26 12:48:09 -06003599 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3600
3601 PostCreateBuffer(device, pBuffer, result);
3602
3603 return result;
3604}
3605
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003606bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003607 VkDevice device,
3608 const VkBufferViewCreateInfo* pCreateInfo)
3609{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003610 if(pCreateInfo != nullptr)
3611 {
3612 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003613 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003614 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003615 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003616 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003617 }
3618 if(pCreateInfo->viewType < VK_BUFFER_VIEW_TYPE_BEGIN_RANGE ||
3619 pCreateInfo->viewType > VK_BUFFER_VIEW_TYPE_END_RANGE)
3620 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003621 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003622 "vkCreateBufferView parameter, VkBufferViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003623 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003624 }
3625 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3626 pCreateInfo->format > VK_FORMAT_END_RANGE)
3627 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003628 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003629 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003630 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003631 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003632 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003633
3634 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003635}
3636
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003637bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003638 VkDevice device,
3639 VkBufferView* pView,
3640 VkResult result)
3641{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003642
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003643 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003644 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003645 }
3646
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003647 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003648 {
3649 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003650 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3651 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003652 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003653
3654 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003655}
3656
3657VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3658 VkDevice device,
3659 const VkBufferViewCreateInfo* pCreateInfo,
3660 VkBufferView* pView)
3661{
3662 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003663
Jeremy Hayes99a96322015-06-26 12:48:09 -06003664 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3665
3666 PostCreateBufferView(device, pView, result);
3667
3668 return result;
3669}
3670
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003671bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003672 VkDevice device,
3673 const VkImageCreateInfo* pCreateInfo)
3674{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003675 if(pCreateInfo != nullptr)
3676 {
3677 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003678 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003679 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003680 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003682 }
3683 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3684 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3685 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003687 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003688 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003689 }
3690 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3691 pCreateInfo->format > VK_FORMAT_END_RANGE)
3692 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003693 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003694 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003695 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003696 }
3697 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3698 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3699 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003701 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003702 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003703 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003704 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3705 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003706 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003707 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3708 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003709 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003710 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003711 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003712 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003713 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003714 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003715
3716 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003717}
3718
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003719bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003720 VkDevice device,
3721 VkImage* pImage,
3722 VkResult result)
3723{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003724
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003725 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003726 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003727 }
3728
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003729 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003730 {
3731 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003732 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3733 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003734 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003735
3736 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003737}
3738
Jeremy Hayes99a96322015-06-26 12:48:09 -06003739VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3740 VkDevice device,
3741 const VkImageCreateInfo* pCreateInfo,
3742 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003743{
3744 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003745
Jeremy Hayes99a96322015-06-26 12:48:09 -06003746 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3747
3748 PostCreateImage(device, pImage, result);
3749
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003750 return result;
3751}
3752
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003753bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003754 VkDevice device,
3755 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003756{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003757 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003758 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003759 if(pSubresource->aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
3760 pSubresource->aspect > VK_IMAGE_ASPECT_END_RANGE)
3761 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003763 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003764 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003765 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003766 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003767
3768 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003769}
3770
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003771bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003772 VkDevice device,
3773 VkImage image,
3774 VkSubresourceLayout* pLayout,
3775 VkResult result)
3776{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003777
Jeremy Hayes99a96322015-06-26 12:48:09 -06003778
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003780 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003781 }
3782
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003783 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003784 {
3785 std::string reason = "vkGetImageSubresourceLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3787 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003788 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003789
3790 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003791}
3792
3793VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceLayout(
3794 VkDevice device,
3795 VkImage image,
3796 const VkImageSubresource* pSubresource,
3797 VkSubresourceLayout* pLayout)
3798{
3799 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003800
Jeremy Hayes99a96322015-06-26 12:48:09 -06003801 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
3802
3803 PostGetImageSubresourceLayout(device, image, pLayout, result);
3804
3805 return result;
3806}
3807
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003808bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003809 VkDevice device,
3810 const VkImageViewCreateInfo* pCreateInfo)
3811{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003812 if(pCreateInfo != nullptr)
3813 {
3814 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003815 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003816 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003817 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003818 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003819 }
3820 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3821 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3822 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003823 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003824 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003825 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003826 }
3827 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3828 pCreateInfo->format > VK_FORMAT_END_RANGE)
3829 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003830 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003831 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003832 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003833 }
3834 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3835 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3836 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003837 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003839 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003840 }
3841 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3842 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3843 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003844 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003845 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003846 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003847 }
3848 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3849 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3850 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003851 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003852 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003853 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003854 }
3855 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3856 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3857 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003860 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003861 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003862 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003863
3864 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003865}
3866
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003867bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003868 VkDevice device,
3869 VkImageView* pView,
3870 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003871{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003872
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003874 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003875 }
3876
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003878 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003879 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003880 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3881 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003882 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003883
3884 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003885}
3886
3887VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3888 VkDevice device,
3889 const VkImageViewCreateInfo* pCreateInfo,
3890 VkImageView* pView)
3891{
3892 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003893
Jeremy Hayes99a96322015-06-26 12:48:09 -06003894 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3895
3896 PostCreateImageView(device, pView, result);
3897
3898 return result;
3899}
3900
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003901bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003902 VkDevice device,
3903 const VkShaderCreateInfo* pCreateInfo)
3904{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003905 if(pCreateInfo != nullptr)
3906 {
3907 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003908 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003909 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003911 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003912 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003913 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003914 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003915 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003916 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003917
3918 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003919}
3920
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003921bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003922 VkDevice device,
3923 VkShader* pShader,
3924 VkResult result)
3925{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003926
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003927 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003928 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003929 }
3930
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003931 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003932 {
3933 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3935 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003936 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003937
3938 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003939}
3940
3941VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3942 VkDevice device,
3943 const VkShaderCreateInfo* pCreateInfo,
3944 VkShader* pShader)
3945{
3946 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003947
Jeremy Hayes99a96322015-06-26 12:48:09 -06003948 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3949
3950 PostCreateShader(device, pShader, result);
3951
3952 return result;
3953}
3954
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003955bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003956 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003957 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003958{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003959 if(pCreateInfo != nullptr)
3960 {
3961 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003962 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003963 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003964 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003965 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003966 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003967 if(pCreateInfo->initialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003968 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003969 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003970 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003971
3972 return true;
3973}
3974
3975bool PostCreatePipelineCache(
3976 VkDevice device,
3977 VkPipelineCache* pPipelineCache,
3978 VkResult result)
3979{
3980
3981 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003982 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003983 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003984
3985 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003986 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003987 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3989 return false;
3990 }
3991
3992 return true;
3993}
3994
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003995VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003996 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003997 const VkPipelineCacheCreateInfo* pCreateInfo,
3998 VkPipelineCache* pPipelineCache)
3999{
4000 PreCreatePipelineCache(device, pCreateInfo);
4001
4002 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
4003
4004 PostCreatePipelineCache(device, pPipelineCache, result);
4005
4006 return result;
4007}
4008
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004009bool PostGetPipelineCacheSize(
4010 VkDevice device,
4011 VkPipelineCache pipelineCache)
4012{
4013
4014
4015 return true;
4016}
4017
4018VK_LAYER_EXPORT size_t VKAPI vkGetPipelineCacheSize(
4019 VkDevice device,
4020 VkPipelineCache pipelineCache)
4021{
Jeremy Hayesa663c702015-07-31 12:54:58 -06004022 size_t result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004023
4024 PostGetPipelineCacheSize(device, pipelineCache);
Jeremy Hayesa663c702015-07-31 12:54:58 -06004025
4026 return result;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004027}
4028
4029bool PostGetPipelineCacheData(
4030 VkDevice device,
4031 VkPipelineCache pipelineCache,
4032 void* pData,
4033 VkResult result)
4034{
4035
4036
4037 if(pData != nullptr)
4038 {
4039 }
4040
4041 if(result < VK_SUCCESS)
4042 {
4043 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
4044 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4045 return false;
4046 }
4047
4048 return true;
4049}
4050
4051VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
4052 VkDevice device,
4053 VkPipelineCache pipelineCache,
4054 void* pData)
4055{
4056 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pData);
4057
4058 PostGetPipelineCacheData(device, pipelineCache, pData, result);
4059
4060 return result;
4061}
4062
4063bool PreMergePipelineCaches(
4064 VkDevice device,
4065 const VkPipelineCache* pSrcCaches)
4066{
4067 if(pSrcCaches != nullptr)
4068 {
4069 }
4070
4071 return true;
4072}
4073
4074bool PostMergePipelineCaches(
4075 VkDevice device,
4076 VkPipelineCache destCache,
4077 uint32_t srcCacheCount,
4078 VkResult result)
4079{
4080
4081
4082
4083 if(result < VK_SUCCESS)
4084 {
4085 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
4086 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4087 return false;
4088 }
4089
4090 return true;
4091}
4092
4093VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
4094 VkDevice device,
4095 VkPipelineCache destCache,
4096 uint32_t srcCacheCount,
4097 const VkPipelineCache* pSrcCaches)
4098{
4099 PreMergePipelineCaches(device, pSrcCaches);
4100
4101 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
4102
4103 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
4104
4105 return result;
4106}
4107
4108bool PreCreateGraphicsPipelines(
4109 VkDevice device,
4110 const VkGraphicsPipelineCreateInfo* pCreateInfos)
4111{
4112 if(pCreateInfos != nullptr)
4113 {
4114 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
4115 {
4116 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4117 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4118 return false;
4119 }
4120 if(pCreateInfos->pStages != nullptr)
4121 {
4122 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
4123 {
4124 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4125 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
4126 return false;
4127 }
4128 if(pCreateInfos->pStages->stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4129 pCreateInfos->pStages->stage > VK_SHADER_STAGE_END_RANGE)
4130 {
4131 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4132 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
4133 return false;
4134 }
4135 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
4136 {
4137 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
4138 {
4139 }
4140 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
4141 {
4142 }
4143 }
4144 }
4145 if(pCreateInfos->pVertexInputState != nullptr)
4146 {
4147 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
4148 {
4149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4150 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
4151 return false;
4152 }
4153 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
4154 {
4155 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
4156 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
4157 {
4158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4159 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
4160 return false;
4161 }
4162 }
4163 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
4164 {
4165 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
4166 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
4167 {
4168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4169 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
4170 return false;
4171 }
4172 }
4173 }
4174 if(pCreateInfos->pInputAssemblyState != nullptr)
4175 {
4176 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
4177 {
4178 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4179 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4180 return false;
4181 }
4182 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4183 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4184 {
4185 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4186 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4187 return false;
4188 }
4189 }
4190 if(pCreateInfos->pTessellationState != nullptr)
4191 {
4192 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4193 {
4194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4195 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4196 return false;
4197 }
4198 }
4199 if(pCreateInfos->pViewportState != nullptr)
4200 {
4201 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4202 {
4203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4204 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4205 return false;
4206 }
4207 }
4208 if(pCreateInfos->pRasterState != nullptr)
4209 {
4210 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4211 {
4212 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4213 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4214 return false;
4215 }
4216 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4217 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4218 {
4219 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4220 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4221 return false;
4222 }
4223 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4224 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4225 {
4226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4227 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4228 return false;
4229 }
4230 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4231 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4232 {
4233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4234 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4235 return false;
4236 }
4237 }
4238 if(pCreateInfos->pMultisampleState != nullptr)
4239 {
4240 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4241 {
4242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4243 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4244 return false;
4245 }
4246 }
4247 if(pCreateInfos->pDepthStencilState != nullptr)
4248 {
4249 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4250 {
4251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4252 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4253 return false;
4254 }
4255 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4256 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4257 {
4258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4259 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4260 return false;
4261 }
4262 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4263 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4264 {
4265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4266 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4267 return false;
4268 }
4269 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4270 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4271 {
4272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4273 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4274 return false;
4275 }
4276 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4277 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4278 {
4279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4280 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4281 return false;
4282 }
4283 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4284 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4285 {
4286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4287 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4288 return false;
4289 }
4290 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4291 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4292 {
4293 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4294 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4295 return false;
4296 }
4297 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4298 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4299 {
4300 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4301 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4302 return false;
4303 }
4304 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4305 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4306 {
4307 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4308 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4309 return false;
4310 }
4311 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4312 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4313 {
4314 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4315 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4316 return false;
4317 }
4318 }
4319 if(pCreateInfos->pColorBlendState != nullptr)
4320 {
4321 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4322 {
4323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4324 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4325 return false;
4326 }
4327 if(pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
4328 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4329 {
4330 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4331 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4332 return false;
4333 }
4334 if(pCreateInfos->pColorBlendState->pAttachments != nullptr)
4335 {
4336 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4337 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4338 {
4339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4340 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4341 return false;
4342 }
4343 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4344 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4345 {
4346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4347 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4348 return false;
4349 }
4350 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4351 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4352 {
4353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4354 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4355 return false;
4356 }
4357 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4358 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4359 {
4360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4361 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4362 return false;
4363 }
4364 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4365 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4366 {
4367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4368 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4369 return false;
4370 }
4371 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4372 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4373 {
4374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4375 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4376 return false;
4377 }
4378 }
4379 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004380 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4381 {
4382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4383 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4384 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004385 }
4386
4387 return true;
4388}
4389
4390bool PostCreateGraphicsPipelines(
4391 VkDevice device,
4392 VkPipelineCache pipelineCache,
4393 uint32_t count,
4394 VkPipeline* pPipelines,
4395 VkResult result)
4396{
4397
4398
4399
4400 if(pPipelines != nullptr)
4401 {
4402 }
4403
4404 if(result < VK_SUCCESS)
4405 {
4406 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4407 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4408 return false;
4409 }
4410
4411 return true;
4412}
4413
4414VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4415 VkDevice device,
4416 VkPipelineCache pipelineCache,
4417 uint32_t count,
4418 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4419 VkPipeline* pPipelines)
4420{
4421 PreCreateGraphicsPipelines(device, pCreateInfos);
4422
4423 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4424
4425 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4426
4427 return result;
4428}
4429
4430bool PreCreateComputePipelines(
4431 VkDevice device,
4432 const VkComputePipelineCreateInfo* pCreateInfos)
4433{
4434 if(pCreateInfos != nullptr)
4435 {
4436 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4437 {
4438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4439 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4440 return false;
4441 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004442 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004443 {
4444 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4445 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4446 return false;
4447 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004448 if(pCreateInfos->stage.stage < VK_SHADER_STAGE_BEGIN_RANGE ||
4449 pCreateInfos->stage.stage > VK_SHADER_STAGE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004450 {
4451 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4452 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4453 return false;
4454 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004455 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004456 {
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004457 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004458 {
4459 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004460 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004461 {
4462 }
4463 }
4464 }
4465
4466 return true;
4467}
4468
4469bool PostCreateComputePipelines(
4470 VkDevice device,
4471 VkPipelineCache pipelineCache,
4472 uint32_t count,
4473 VkPipeline* pPipelines,
4474 VkResult result)
4475{
4476
4477
4478
4479 if(pPipelines != nullptr)
4480 {
4481 }
4482
4483 if(result < VK_SUCCESS)
4484 {
4485 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4486 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4487 return false;
4488 }
4489
4490 return true;
4491}
4492
4493VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4494 VkDevice device,
4495 VkPipelineCache pipelineCache,
4496 uint32_t count,
4497 const VkComputePipelineCreateInfo* pCreateInfos,
4498 VkPipeline* pPipelines)
4499{
4500 PreCreateComputePipelines(device, pCreateInfos);
4501
4502 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4503
4504 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4505
4506 return result;
4507}
4508
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004509bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004510 VkDevice device,
4511 const VkPipelineLayoutCreateInfo* pCreateInfo)
4512{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004513 if(pCreateInfo != nullptr)
4514 {
4515 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004516 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004518 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4519 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004520 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004521 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004522 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004524 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004527 }
4528
4529 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004530}
4531
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004532bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004533 VkDevice device,
4534 VkPipelineLayout* pPipelineLayout,
4535 VkResult result)
4536{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004538 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004540 }
4541
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004542 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 {
4544 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4546 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004548
4549 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004550}
4551
4552VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4553 VkDevice device,
4554 const VkPipelineLayoutCreateInfo* pCreateInfo,
4555 VkPipelineLayout* pPipelineLayout)
4556{
4557 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004558
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4560
4561 PostCreatePipelineLayout(device, pPipelineLayout, result);
4562
4563 return result;
4564}
4565
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004566bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004567 VkDevice device,
4568 const VkSamplerCreateInfo* pCreateInfo)
4569{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004570 if(pCreateInfo != nullptr)
4571 {
4572 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004573 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004574 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004575 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004576 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004577 }
4578 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4579 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4580 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004581 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004582 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004583 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004584 }
4585 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4586 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4587 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004589 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004590 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004591 }
4592 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4593 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4594 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004596 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004597 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004598 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004599 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_BEGIN_RANGE ||
4600 pCreateInfo->addressModeU > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004601 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004602 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004603 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004604 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004605 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004606 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_BEGIN_RANGE ||
4607 pCreateInfo->addressModeV > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004608 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004610 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004611 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004612 }
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004613 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_BEGIN_RANGE ||
4614 pCreateInfo->addressModeW > VK_TEX_ADDRESS_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004615 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004617 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004618 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004619 }
4620 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4621 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4622 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004623 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004624 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004625 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004626 }
4627 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4628 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4629 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004630 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004631 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004632 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004633 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004634 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004635
4636 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004637}
4638
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004639bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004640 VkDevice device,
4641 VkSampler* pSampler,
4642 VkResult result)
4643{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004644
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004645 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004646 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004647 }
4648
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004649 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004650 {
4651 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004654 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004655
4656 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004657}
4658
4659VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4660 VkDevice device,
4661 const VkSamplerCreateInfo* pCreateInfo,
4662 VkSampler* pSampler)
4663{
4664 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004665
Jeremy Hayes99a96322015-06-26 12:48:09 -06004666 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4667
4668 PostCreateSampler(device, pSampler, result);
4669
4670 return result;
4671}
4672
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004673bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004674 VkDevice device,
4675 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4676{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004677 if(pCreateInfo != nullptr)
4678 {
4679 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004680 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004681 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004682 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004683 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004684 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004685 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004686 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004687 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4688 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4689 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004690 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004691 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004692 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004693 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004694 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004695 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004696 }
4697 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004698 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004699
4700 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004701}
4702
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004703bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004704 VkDevice device,
4705 VkDescriptorSetLayout* pSetLayout,
4706 VkResult result)
4707{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004708
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004709 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004710 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004711 }
4712
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004714 {
4715 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4717 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004718 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004719
4720 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004721}
4722
4723VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4724 VkDevice device,
4725 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4726 VkDescriptorSetLayout* pSetLayout)
4727{
4728 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004729
Jeremy Hayes99a96322015-06-26 12:48:09 -06004730 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4731
4732 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4733
4734 return result;
4735}
4736
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004737bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004738 VkDevice device,
4739 const VkDescriptorPoolCreateInfo* pCreateInfo)
4740{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004741 if(pCreateInfo != nullptr)
4742 {
4743 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004744 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004745 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004746 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004747 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004748 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004749 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004750 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004751 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4752 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4753 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004754 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004756 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004757 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004758 }
4759 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004760
4761 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004762}
4763
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004764bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004765 VkDevice device,
4766 VkDescriptorPoolUsage poolUsage,
4767 uint32_t maxSets,
4768 VkDescriptorPool* pDescriptorPool,
4769 VkResult result)
4770{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004771
4772 if(poolUsage < VK_DESCRIPTOR_POOL_USAGE_BEGIN_RANGE ||
4773 poolUsage > VK_DESCRIPTOR_POOL_USAGE_END_RANGE)
4774 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004776 "vkCreateDescriptorPool parameter, VkDescriptorPoolUsage poolUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004777 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004778 }
4779
4780
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004781 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004782 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004783 }
4784
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004786 {
4787 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004788 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4789 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004790 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004791
4792 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004793}
4794
4795VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4796 VkDevice device,
4797 VkDescriptorPoolUsage poolUsage,
4798 uint32_t maxSets,
4799 const VkDescriptorPoolCreateInfo* pCreateInfo,
4800 VkDescriptorPool* pDescriptorPool)
4801{
4802 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004803
Jeremy Hayes99a96322015-06-26 12:48:09 -06004804 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
4805
4806 PostCreateDescriptorPool(device, poolUsage, maxSets, pDescriptorPool, result);
4807
4808 return result;
4809}
4810
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004811bool PostResetDescriptorPool(
4812 VkDevice device,
4813 VkDescriptorPool descriptorPool,
4814 VkResult result)
4815{
4816
Jeremy Hayes99a96322015-06-26 12:48:09 -06004817
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004818 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004819 {
4820 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4822 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004823 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004824
4825 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004826}
4827
4828VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4829 VkDevice device,
4830 VkDescriptorPool descriptorPool)
4831{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004832 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool);
4833
4834 PostResetDescriptorPool(device, descriptorPool, result);
4835
4836 return result;
4837}
4838
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004839bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004840 VkDevice device,
4841 const VkDescriptorSetLayout* pSetLayouts)
4842{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004843 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004844 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004845 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004846
4847 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004848}
4849
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004850bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004851 VkDevice device,
4852 VkDescriptorPool descriptorPool,
4853 VkDescriptorSetUsage setUsage,
4854 uint32_t count,
4855 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004856 VkResult result)
4857{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004858
Jeremy Hayes99a96322015-06-26 12:48:09 -06004859
4860 if(setUsage < VK_DESCRIPTOR_SET_USAGE_BEGIN_RANGE ||
4861 setUsage > VK_DESCRIPTOR_SET_USAGE_END_RANGE)
4862 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004863 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004864 "vkAllocDescriptorSets parameter, VkDescriptorSetUsage setUsage, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004865 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004866 }
4867
4868
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004869 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004870 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004871 }
4872
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004874 {
4875 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4877 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004878 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004879
4880 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004881}
4882
4883VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4884 VkDevice device,
4885 VkDescriptorPool descriptorPool,
4886 VkDescriptorSetUsage setUsage,
4887 uint32_t count,
4888 const VkDescriptorSetLayout* pSetLayouts,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004889 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004890{
4891 PreAllocDescriptorSets(device, pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004892
Cody Northrop1e4f8022015-08-03 12:47:29 -06004893 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004894
Cody Northrop1e4f8022015-08-03 12:47:29 -06004895 PostAllocDescriptorSets(device, descriptorPool, setUsage, count, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004896
4897 return result;
4898}
4899
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004900bool PreFreeDescriptorSets(
4901 VkDevice device,
4902 const VkDescriptorSet* pDescriptorSets)
4903{
4904 if(pDescriptorSets != nullptr)
4905 {
4906 }
4907
4908 return true;
4909}
4910
4911bool PostFreeDescriptorSets(
4912 VkDevice device,
4913 VkDescriptorPool descriptorPool,
4914 uint32_t count,
4915 VkResult result)
4916{
4917
4918
4919
4920 if(result < VK_SUCCESS)
4921 {
4922 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4923 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4924 return false;
4925 }
4926
4927 return true;
4928}
4929
4930VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4931 VkDevice device,
4932 VkDescriptorPool descriptorPool,
4933 uint32_t count,
4934 const VkDescriptorSet* pDescriptorSets)
4935{
4936 PreFreeDescriptorSets(device, pDescriptorSets);
4937
4938 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4939
4940 PostFreeDescriptorSets(device, descriptorPool, count, result);
4941
4942 return result;
4943}
4944
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004945bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004946 VkDevice device,
4947 const VkWriteDescriptorSet* pDescriptorWrites,
4948 const VkCopyDescriptorSet* pDescriptorCopies)
4949{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004950 if(pDescriptorWrites != nullptr)
4951 {
4952 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004955 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004956 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957 }
4958 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4959 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4960 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004962 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004963 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004964 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004965 if(pDescriptorWrites->pDescriptors != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004966 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004967 if(pDescriptorWrites->pDescriptors->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4968 pDescriptorWrites->pDescriptors->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
4969 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004970 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004971 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004972 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004974 }
4975 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004976
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004977 if(pDescriptorCopies != nullptr)
4978 {
4979 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004980 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004981 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004982 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004983 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004984 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004986
4987 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988}
4989
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004990VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991 VkDevice device,
4992 uint32_t writeCount,
4993 const VkWriteDescriptorSet* pDescriptorWrites,
4994 uint32_t copyCount,
4995 const VkCopyDescriptorSet* pDescriptorCopies)
4996{
4997 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004999 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000}
5001
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005002bool PreCreateDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005003 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005004 const VkDynamicViewportStateCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005005{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005006 if(pCreateInfo != nullptr)
5007 {
5008 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_VIEWPORT_STATE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005009 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005011 "vkCreateDynamicViewportState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005012 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005014 if(pCreateInfo->pViewports != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005015 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005017 if(pCreateInfo->pScissors != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005018 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005020 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005021
5022 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005023}
5024
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005025bool PostCreateDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005026 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005027 VkDynamicViewportState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028 VkResult result)
5029{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005031 if(pState != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005032 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005033 }
5034
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005035 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036 {
5037 std::string reason = "vkCreateDynamicViewportState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005038 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005040 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005041
5042 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005043}
5044
5045VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(
5046 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005047 const VkDynamicViewportStateCreateInfo* pCreateInfo,
5048 VkDynamicViewportState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005049{
5050 PreCreateDynamicViewportState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005051
Jeremy Hayes99a96322015-06-26 12:48:09 -06005052 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicViewportState(device, pCreateInfo, pState);
5053
5054 PostCreateDynamicViewportState(device, pState, result);
5055
5056 return result;
5057}
5058
Cody Northrop271ba752015-08-26 10:01:32 -06005059bool PreCreateDynamicLineWidthState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005060 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005061 const VkDynamicLineWidthStateCreateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005062{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005063 if(pCreateInfo != nullptr)
5064 {
Cody Northrop271ba752015-08-26 10:01:32 -06005065 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_LINE_WIDTH_STATE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005066 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005067 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop271ba752015-08-26 10:01:32 -06005068 "vkCreateDynamicLineWidthState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005069 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005070 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005072
5073 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005074}
5075
Cody Northrop271ba752015-08-26 10:01:32 -06005076bool PostCreateDynamicLineWidthState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005077 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005078 VkDynamicLineWidthState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005079 VkResult result)
5080{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005081
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005082 if(pState != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005084 }
5085
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005086 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005087 {
Cody Northrop271ba752015-08-26 10:01:32 -06005088 std::string reason = "vkCreateDynamicLineWidthState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005089 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5090 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005091 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005092
5093 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005094}
5095
Cody Northrop271ba752015-08-26 10:01:32 -06005096VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicLineWidthState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005097 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005098 const VkDynamicLineWidthStateCreateInfo* pCreateInfo,
5099 VkDynamicLineWidthState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005100{
Cody Northrop271ba752015-08-26 10:01:32 -06005101 PreCreateDynamicLineWidthState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005102
Cody Northrop271ba752015-08-26 10:01:32 -06005103 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicLineWidthState(device, pCreateInfo, pState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005104
Cody Northrop271ba752015-08-26 10:01:32 -06005105 PostCreateDynamicLineWidthState(device, pState, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005106
5107 return result;
5108}
5109
Cody Northrop271ba752015-08-26 10:01:32 -06005110bool PreCreateDynamicDepthBiasState(
Cody Northrop12365112015-08-17 11:10:49 -06005111 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005112 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo)
Cody Northrop12365112015-08-17 11:10:49 -06005113{
5114 if(pCreateInfo != nullptr)
5115 {
Cody Northrop271ba752015-08-26 10:01:32 -06005116 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BIAS_STATE_CREATE_INFO)
Cody Northrop12365112015-08-17 11:10:49 -06005117 {
5118 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop271ba752015-08-26 10:01:32 -06005119 "vkCreateDynamicDepthBiasState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Cody Northrop12365112015-08-17 11:10:49 -06005120 return false;
5121 }
5122 }
5123
5124 return true;
5125}
5126
Cody Northrop271ba752015-08-26 10:01:32 -06005127bool PostCreateDynamicDepthBiasState(
Cody Northrop12365112015-08-17 11:10:49 -06005128 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005129 VkDynamicDepthBiasState* pState,
Cody Northrop12365112015-08-17 11:10:49 -06005130 VkResult result)
5131{
5132
5133 if(pState != nullptr)
5134 {
5135 }
5136
5137 if(result < VK_SUCCESS)
5138 {
Cody Northrop271ba752015-08-26 10:01:32 -06005139 std::string reason = "vkCreateDynamicDepthBiasState parameter, VkResult result, is " + EnumeratorString(result);
Cody Northrop12365112015-08-17 11:10:49 -06005140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5141 return false;
5142 }
5143
5144 return true;
5145}
5146
Cody Northrop271ba752015-08-26 10:01:32 -06005147VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBiasState(
Cody Northrop12365112015-08-17 11:10:49 -06005148 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005149 const VkDynamicDepthBiasStateCreateInfo* pCreateInfo,
5150 VkDynamicDepthBiasState* pState)
Cody Northrop12365112015-08-17 11:10:49 -06005151{
Cody Northrop271ba752015-08-26 10:01:32 -06005152 PreCreateDynamicDepthBiasState(device, pCreateInfo);
Cody Northrop12365112015-08-17 11:10:49 -06005153
Cody Northrop271ba752015-08-26 10:01:32 -06005154 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBiasState(device, pCreateInfo, pState);
Cody Northrop12365112015-08-17 11:10:49 -06005155
Cody Northrop271ba752015-08-26 10:01:32 -06005156 PostCreateDynamicDepthBiasState(device, pState, result);
Cody Northrop12365112015-08-17 11:10:49 -06005157
5158 return result;
5159}
5160
Cody Northrop271ba752015-08-26 10:01:32 -06005161bool PreCreateDynamicBlendState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005162 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005163 const VkDynamicBlendStateCreateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005164{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005165 if(pCreateInfo != nullptr)
5166 {
Cody Northrop271ba752015-08-26 10:01:32 -06005167 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_BLEND_STATE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop271ba752015-08-26 10:01:32 -06005170 "vkCreateDynamicBlendState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005171 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005172 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005174
5175 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005176}
5177
Cody Northrop271ba752015-08-26 10:01:32 -06005178bool PostCreateDynamicBlendState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005180 VkDynamicBlendState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005181 VkResult result)
5182{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005184 if(pState != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005185 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005186 }
5187
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005188 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005189 {
Cody Northrop271ba752015-08-26 10:01:32 -06005190 std::string reason = "vkCreateDynamicBlendState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005194
5195 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196}
5197
Cody Northrop271ba752015-08-26 10:01:32 -06005198VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicBlendState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005199 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005200 const VkDynamicBlendStateCreateInfo* pCreateInfo,
5201 VkDynamicBlendState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005202{
Cody Northrop271ba752015-08-26 10:01:32 -06005203 PreCreateDynamicBlendState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005204
Cody Northrop271ba752015-08-26 10:01:32 -06005205 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicBlendState(device, pCreateInfo, pState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005206
Cody Northrop271ba752015-08-26 10:01:32 -06005207 PostCreateDynamicBlendState(device, pState, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005208
5209 return result;
5210}
5211
Cody Northrop271ba752015-08-26 10:01:32 -06005212bool PreCreateDynamicDepthBoundsState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005213 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005214 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005215{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005216 if(pCreateInfo != nullptr)
5217 {
Cody Northrop271ba752015-08-26 10:01:32 -06005218 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DYNAMIC_DEPTH_BOUNDS_STATE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005219 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop271ba752015-08-26 10:01:32 -06005221 "vkCreateDynamicDepthBoundsState parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005223 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005225
5226 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227}
5228
Cody Northrop271ba752015-08-26 10:01:32 -06005229bool PostCreateDynamicDepthBoundsState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005230 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005231 VkDynamicDepthBoundsState* pState,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005232 VkResult result)
5233{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005235 if(pState != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005236 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005237 }
5238
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005239 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005240 {
Cody Northrop271ba752015-08-26 10:01:32 -06005241 std::string reason = "vkCreateDynamicDepthBoundsState parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5243 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005244 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005245
5246 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005247}
5248
Cody Northrop271ba752015-08-26 10:01:32 -06005249VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthBoundsState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005250 VkDevice device,
Cody Northrop271ba752015-08-26 10:01:32 -06005251 const VkDynamicDepthBoundsStateCreateInfo* pCreateInfo,
5252 VkDynamicDepthBoundsState* pState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253{
Cody Northrop271ba752015-08-26 10:01:32 -06005254 PreCreateDynamicDepthBoundsState(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005255
Cody Northrop271ba752015-08-26 10:01:32 -06005256 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicDepthBoundsState(device, pCreateInfo, pState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005257
Cody Northrop271ba752015-08-26 10:01:32 -06005258 PostCreateDynamicDepthBoundsState(device, pState, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005259
5260 return result;
5261}
5262
Cody Northrop82485a82015-08-18 15:21:16 -06005263bool PreCreateDynamicStencilState(
5264 VkDevice device,
5265 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5266 const VkDynamicStencilStateCreateInfo* pCreateInfoBack)
5267{
5268 if(pCreateInfoFront != nullptr)
5269 {
5270 if(pCreateInfoFront->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5271 {
5272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5273 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoFront->sType, is an invalid enumerator");
5274 return false;
5275 }
5276 }
5277
5278 if(pCreateInfoBack != nullptr)
5279 {
5280 if(pCreateInfoBack->sType != VK_STRUCTURE_TYPE_DYNAMIC_STENCIL_STATE_CREATE_INFO)
5281 {
5282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5283 "vkCreateDynamicStencilState parameter, VkStructureType pCreateInfoBack->sType, is an invalid enumerator");
5284 return false;
5285 }
5286 }
5287
5288 return true;
5289}
5290
5291bool PostCreateDynamicStencilState(
5292 VkDevice device,
5293 VkDynamicStencilState* pState,
5294 VkResult result)
5295{
5296
5297 if(pState != nullptr)
5298 {
5299 }
5300
5301 if(result < VK_SUCCESS)
5302 {
5303 std::string reason = "vkCreateDynamicStencilState parameter, VkResult result, is " + EnumeratorString(result);
5304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5305 return false;
5306 }
5307
5308 return true;
5309}
5310
5311VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicStencilState(
5312 VkDevice device,
5313 const VkDynamicStencilStateCreateInfo* pCreateInfoFront,
5314 const VkDynamicStencilStateCreateInfo* pCreateInfoBack,
5315 VkDynamicStencilState* pState)
5316{
5317 PreCreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack);
5318
5319 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDynamicStencilState(device, pCreateInfoFront, pCreateInfoBack, pState);
5320
5321 PostCreateDynamicStencilState(device, pState, result);
5322
5323 return result;
5324}
5325
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005326bool PreCreateFramebuffer(
5327 VkDevice device,
5328 const VkFramebufferCreateInfo* pCreateInfo)
5329{
5330 if(pCreateInfo != nullptr)
5331 {
5332 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
5333 {
5334 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5335 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5336 return false;
5337 }
5338 if(pCreateInfo->pAttachments != nullptr)
5339 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005340 }
5341 }
5342
5343 return true;
5344}
5345
5346bool PostCreateFramebuffer(
5347 VkDevice device,
5348 VkFramebuffer* pFramebuffer,
5349 VkResult result)
5350{
5351
5352 if(pFramebuffer != nullptr)
5353 {
5354 }
5355
5356 if(result < VK_SUCCESS)
5357 {
5358 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
5359 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5360 return false;
5361 }
5362
5363 return true;
5364}
5365
5366VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
5367 VkDevice device,
5368 const VkFramebufferCreateInfo* pCreateInfo,
5369 VkFramebuffer* pFramebuffer)
5370{
5371 PreCreateFramebuffer(device, pCreateInfo);
5372
5373 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
5374
5375 PostCreateFramebuffer(device, pFramebuffer, result);
5376
5377 return result;
5378}
5379
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005380bool PreCreateRenderPass(
5381 VkDevice device,
5382 const VkRenderPassCreateInfo* pCreateInfo)
5383{
5384 if(pCreateInfo != nullptr)
5385 {
5386 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
5387 {
5388 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5389 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5390 return false;
5391 }
5392 if(pCreateInfo->pAttachments != nullptr)
5393 {
5394 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
5395 {
5396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5397 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
5398 return false;
5399 }
5400 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
5401 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
5402 {
5403 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5404 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
5405 return false;
5406 }
5407 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5408 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5409 {
5410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5411 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
5412 return false;
5413 }
5414 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5415 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5416 {
5417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5418 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
5419 return false;
5420 }
5421 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
5422 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
5423 {
5424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5425 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
5426 return false;
5427 }
5428 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
5429 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
5430 {
5431 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5432 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
5433 return false;
5434 }
5435 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5436 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
5437 {
5438 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5439 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
5440 return false;
5441 }
5442 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5443 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
5444 {
5445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5446 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
5447 return false;
5448 }
5449 }
5450 if(pCreateInfo->pSubpasses != nullptr)
5451 {
5452 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
5453 {
5454 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5455 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
5456 return false;
5457 }
5458 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5459 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5460 {
5461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5462 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
5463 return false;
5464 }
Cody Northropa505dda2015-08-04 11:16:41 -06005465 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005466 {
Cody Northropa505dda2015-08-04 11:16:41 -06005467 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5468 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005469 {
5470 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005471 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005472 return false;
5473 }
5474 }
Cody Northropa505dda2015-08-04 11:16:41 -06005475 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005476 {
Cody Northropa505dda2015-08-04 11:16:41 -06005477 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5478 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005479 {
5480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005481 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005482 return false;
5483 }
5484 }
Cody Northropa505dda2015-08-04 11:16:41 -06005485 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005486 {
Cody Northropa505dda2015-08-04 11:16:41 -06005487 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5488 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005489 {
5490 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005491 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005492 return false;
5493 }
5494 }
5495 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5496 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
5497 {
5498 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5499 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
5500 return false;
5501 }
Cody Northropa505dda2015-08-04 11:16:41 -06005502 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005503 {
Cody Northropa505dda2015-08-04 11:16:41 -06005504 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5505 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005506 {
5507 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06005508 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005509 return false;
5510 }
5511 }
5512 }
5513 if(pCreateInfo->pDependencies != nullptr)
5514 {
5515 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
5516 {
5517 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5518 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5519 return false;
5520 }
5521 }
5522 }
5523
5524 return true;
5525}
5526
5527bool PostCreateRenderPass(
5528 VkDevice device,
5529 VkRenderPass* pRenderPass,
5530 VkResult result)
5531{
5532
5533 if(pRenderPass != nullptr)
5534 {
5535 }
5536
5537 if(result < VK_SUCCESS)
5538 {
5539 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5540 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5541 return false;
5542 }
5543
5544 return true;
5545}
5546
5547VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5548 VkDevice device,
5549 const VkRenderPassCreateInfo* pCreateInfo,
5550 VkRenderPass* pRenderPass)
5551{
5552 PreCreateRenderPass(device, pCreateInfo);
5553
5554 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5555
5556 PostCreateRenderPass(device, pRenderPass, result);
5557
5558 return result;
5559}
5560
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005561bool PostGetRenderAreaGranularity(
5562 VkDevice device,
5563 VkRenderPass renderPass,
5564 VkExtent2D* pGranularity,
5565 VkResult result)
5566{
5567
5568
5569 if(pGranularity != nullptr)
5570 {
5571 }
5572
5573 if(result < VK_SUCCESS)
5574 {
5575 std::string reason = "vkGetRenderAreaGranularity parameter, VkResult result, is " + EnumeratorString(result);
5576 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5577 return false;
5578 }
5579
5580 return true;
5581}
5582
5583VK_LAYER_EXPORT VkResult VKAPI vkGetRenderAreaGranularity(
5584 VkDevice device,
5585 VkRenderPass renderPass,
5586 VkExtent2D* pGranularity)
5587{
5588 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
5589
5590 PostGetRenderAreaGranularity(device, renderPass, pGranularity, result);
5591
5592 return result;
5593}
5594
5595bool PreCreateCommandPool(
5596 VkDevice device,
5597 const VkCmdPoolCreateInfo* pCreateInfo)
5598{
5599 if(pCreateInfo != nullptr)
5600 {
5601 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5602 {
5603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5604 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5605 return false;
5606 }
5607 }
5608
5609 return true;
5610}
5611
5612bool PostCreateCommandPool(
5613 VkDevice device,
5614 VkCmdPool* pCmdPool,
5615 VkResult result)
5616{
5617
5618 if(pCmdPool != nullptr)
5619 {
5620 }
5621
5622 if(result < VK_SUCCESS)
5623 {
5624 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5625 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5626 return false;
5627 }
5628
5629 return true;
5630}
5631
5632VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5633 VkDevice device,
5634 const VkCmdPoolCreateInfo* pCreateInfo,
5635 VkCmdPool* pCmdPool)
5636{
5637 PreCreateCommandPool(device, pCreateInfo);
5638
5639 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5640
5641 PostCreateCommandPool(device, pCmdPool, result);
5642
5643 return result;
5644}
5645
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005646bool PostResetCommandPool(
5647 VkDevice device,
5648 VkCmdPool cmdPool,
5649 VkCmdPoolResetFlags flags,
5650 VkResult result)
5651{
5652
5653
5654
5655 if(result < VK_SUCCESS)
5656 {
5657 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5658 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5659 return false;
5660 }
5661
5662 return true;
5663}
5664
5665VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5666 VkDevice device,
5667 VkCmdPool cmdPool,
5668 VkCmdPoolResetFlags flags)
5669{
5670 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5671
5672 PostResetCommandPool(device, cmdPool, flags, result);
5673
5674 return result;
5675}
5676
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005677bool PreCreateCommandBuffer(
5678 VkDevice device,
5679 const VkCmdBufferCreateInfo* pCreateInfo)
5680{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005681 if(pCreateInfo != nullptr)
5682 {
5683 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005685 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005686 "vkCreateCommandBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005687 return false;
5688 }
5689 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5690 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5691 {
5692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005693 "vkCreateCommandBuffer parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005694 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005695 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005696 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005697
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005698 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005699}
5700
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005701bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 VkDevice device,
5703 VkCmdBuffer* pCmdBuffer,
5704 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005705{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005707 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005708 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709 }
5710
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005711 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005712 {
5713 std::string reason = "vkCreateCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5715 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005716 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005717
5718 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005719}
5720
5721VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(
5722 VkDevice device,
5723 const VkCmdBufferCreateInfo* pCreateInfo,
5724 VkCmdBuffer* pCmdBuffer)
5725{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005726 PreCreateCommandBuffer(device, pCreateInfo);
5727
Jeremy Hayes99a96322015-06-26 12:48:09 -06005728 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
5729
5730 PostCreateCommandBuffer(device, pCmdBuffer, result);
5731
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005732 return result;
5733}
5734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005735bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005736 VkCmdBuffer cmdBuffer,
5737 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005738{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005739 if(pBeginInfo != nullptr)
5740 {
5741 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005743 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005744 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005745 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005746 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005748
5749 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005750}
5751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005752bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 VkCmdBuffer cmdBuffer,
5754 VkResult result)
5755{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005756
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005757 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758 {
5759 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005760 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5761 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763
5764 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765}
5766
5767VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5768 VkCmdBuffer cmdBuffer,
5769 const VkCmdBufferBeginInfo* pBeginInfo)
5770{
5771 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005772
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5774
5775 PostBeginCommandBuffer(cmdBuffer, result);
5776
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005777 return result;
5778}
5779
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005780bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005781 VkCmdBuffer cmdBuffer,
5782 VkResult result)
5783{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005785 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786 {
5787 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005788 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5789 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791
5792 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793}
5794
5795VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5796 VkCmdBuffer cmdBuffer)
5797{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5799
5800 PostEndCommandBuffer(cmdBuffer, result);
5801
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005802 return result;
5803}
5804
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005805bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005807 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005808 VkResult result)
5809{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005811
5812 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005813 {
5814 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005815 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5816 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005818
5819 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005820}
5821
5822VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005823 VkCmdBuffer cmdBuffer,
5824 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005826 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005828 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005829
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005830 return result;
5831}
5832
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005833bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 VkCmdBuffer cmdBuffer,
5835 VkPipelineBindPoint pipelineBindPoint,
5836 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005837{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005838
5839 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5840 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5841 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005842 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005843 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005844 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005845 }
5846
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005847
5848 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005849}
5850
Jeremy Hayes99a96322015-06-26 12:48:09 -06005851VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5852 VkCmdBuffer cmdBuffer,
5853 VkPipelineBindPoint pipelineBindPoint,
5854 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005855{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005856 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5857
5858 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5859}
5860
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005861bool PostCmdBindDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005862 VkCmdBuffer cmdBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863 VkDynamicViewportState dynamicViewportState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005864{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865
Jeremy Hayes99a96322015-06-26 12:48:09 -06005866
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005867 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868}
5869
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005870VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicViewportState(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005871 VkCmdBuffer cmdBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872 VkDynamicViewportState dynamicViewportState)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005874 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005875
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005876 PostCmdBindDynamicViewportState(cmdBuffer, dynamicViewportState);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005877}
5878
Cody Northrop271ba752015-08-26 10:01:32 -06005879bool PostCmdBindDynamicLineWidthState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005880 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005881 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005882{
5883
5884
5885 return true;
5886}
5887
Cody Northrop271ba752015-08-26 10:01:32 -06005888VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicLineWidthState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005889 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005890 VkDynamicLineWidthState dynamicLineWidthState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005891{
Cody Northrop271ba752015-08-26 10:01:32 -06005892 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005893
Cody Northrop271ba752015-08-26 10:01:32 -06005894 PostCmdBindDynamicLineWidthState(cmdBuffer, dynamicLineWidthState);
Cody Northrop12365112015-08-17 11:10:49 -06005895}
5896
Cody Northrop271ba752015-08-26 10:01:32 -06005897bool PostCmdBindDynamicDepthBiasState(
Cody Northrop12365112015-08-17 11:10:49 -06005898 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005899 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northrop12365112015-08-17 11:10:49 -06005900{
5901
5902
5903 return true;
5904}
5905
Cody Northrop271ba752015-08-26 10:01:32 -06005906VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBiasState(
Cody Northrop12365112015-08-17 11:10:49 -06005907 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005908 VkDynamicDepthBiasState dynamicDepthBiasState)
Cody Northrop12365112015-08-17 11:10:49 -06005909{
Cody Northrop271ba752015-08-26 10:01:32 -06005910 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Cody Northrop12365112015-08-17 11:10:49 -06005911
Cody Northrop271ba752015-08-26 10:01:32 -06005912 PostCmdBindDynamicDepthBiasState(cmdBuffer, dynamicDepthBiasState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005913}
5914
Cody Northrop271ba752015-08-26 10:01:32 -06005915bool PostCmdBindDynamicBlendState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005916 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005917 VkDynamicBlendState dynamicBlendState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918{
5919
5920
5921 return true;
5922}
5923
Cody Northrop271ba752015-08-26 10:01:32 -06005924VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicBlendState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005925 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005926 VkDynamicBlendState dynamicBlendState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005927{
Cody Northrop271ba752015-08-26 10:01:32 -06005928 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005929
Cody Northrop271ba752015-08-26 10:01:32 -06005930 PostCmdBindDynamicBlendState(cmdBuffer, dynamicBlendState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005931}
5932
Cody Northrop271ba752015-08-26 10:01:32 -06005933bool PostCmdBindDynamicDepthBoundsState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005934 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005935 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005936{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005937 return true;
5938}
5939
Cody Northrop271ba752015-08-26 10:01:32 -06005940VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicDepthBoundsState(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005941 VkCmdBuffer cmdBuffer,
Cody Northrop271ba752015-08-26 10:01:32 -06005942 VkDynamicDepthBoundsState dynamicDepthBoundsState)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005943{
Cody Northrop271ba752015-08-26 10:01:32 -06005944 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005945
Cody Northrop271ba752015-08-26 10:01:32 -06005946 PostCmdBindDynamicDepthBoundsState(cmdBuffer, dynamicDepthBoundsState);
Cody Northrop82485a82015-08-18 15:21:16 -06005947}
5948
5949bool PostCmdBindDynamicStencilState(
5950 VkCmdBuffer cmdBuffer,
5951 VkDynamicStencilState dynamicStencilState)
5952{
5953 return true;
5954}
5955
5956VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStencilState(
5957 VkCmdBuffer cmdBuffer,
5958 VkDynamicStencilState dynamicStencilState)
5959{
5960 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
5961
5962 PostCmdBindDynamicStencilState(cmdBuffer, dynamicStencilState);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005963}
5964
5965bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 VkCmdBuffer cmdBuffer,
5967 const VkDescriptorSet* pDescriptorSets,
5968 const uint32_t* pDynamicOffsets)
5969{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005970 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005972 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005973
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005974 if(pDynamicOffsets != nullptr)
5975 {
5976 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005977
5978 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979}
5980
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005981bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982 VkCmdBuffer cmdBuffer,
5983 VkPipelineBindPoint pipelineBindPoint,
5984 VkPipelineLayout layout,
5985 uint32_t firstSet,
5986 uint32_t setCount,
5987 uint32_t dynamicOffsetCount)
5988{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005989
5990 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5991 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5992 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005993 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005994 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005995 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996 }
5997
5998
5999
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006000
6001
6002 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003}
6004
6005VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
6006 VkCmdBuffer cmdBuffer,
6007 VkPipelineBindPoint pipelineBindPoint,
6008 VkPipelineLayout layout,
6009 uint32_t firstSet,
6010 uint32_t setCount,
6011 const VkDescriptorSet* pDescriptorSets,
6012 uint32_t dynamicOffsetCount,
6013 const uint32_t* pDynamicOffsets)
6014{
6015 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006016
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
6018
6019 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
6020}
6021
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006022bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023 VkCmdBuffer cmdBuffer,
6024 VkBuffer buffer,
6025 VkDeviceSize offset,
6026 VkIndexType indexType)
6027{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029
6030
6031 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
6032 indexType > VK_INDEX_TYPE_END_RANGE)
6033 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006034 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006035 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006036 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006038
6039 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006040}
6041
6042VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
6043 VkCmdBuffer cmdBuffer,
6044 VkBuffer buffer,
6045 VkDeviceSize offset,
6046 VkIndexType indexType)
6047{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6049
6050 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
6051}
6052
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006053bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054 VkCmdBuffer cmdBuffer,
6055 const VkBuffer* pBuffers,
6056 const VkDeviceSize* pOffsets)
6057{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006058 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060 }
6061
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006062 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006065
6066 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067}
6068
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006069bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070 VkCmdBuffer cmdBuffer,
6071 uint32_t startBinding,
6072 uint32_t bindingCount)
6073{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006074
6075
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006076
6077 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006078}
6079
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06006080VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081 VkCmdBuffer cmdBuffer,
6082 uint32_t startBinding,
6083 uint32_t bindingCount,
6084 const VkBuffer* pBuffers,
6085 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006086{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006087 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088
Jeremy Hayes99a96322015-06-26 12:48:09 -06006089 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
6090
6091 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006092}
6093
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006094bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095 VkCmdBuffer cmdBuffer,
6096 uint32_t firstVertex,
6097 uint32_t vertexCount,
6098 uint32_t firstInstance,
6099 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006100{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101
6102
6103
6104
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006105
6106 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006107}
6108
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109VK_LAYER_EXPORT void VKAPI vkCmdDraw(
6110 VkCmdBuffer cmdBuffer,
6111 uint32_t firstVertex,
6112 uint32_t vertexCount,
6113 uint32_t firstInstance,
6114 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006115{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006116 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
6117
6118 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006119}
6120
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006121bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006122 VkCmdBuffer cmdBuffer,
6123 uint32_t firstIndex,
6124 uint32_t indexCount,
6125 int32_t vertexOffset,
6126 uint32_t firstInstance,
6127 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006128{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129
6130
6131
6132
6133
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006134
6135 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006136}
6137
Jeremy Hayes99a96322015-06-26 12:48:09 -06006138VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
6139 VkCmdBuffer cmdBuffer,
6140 uint32_t firstIndex,
6141 uint32_t indexCount,
6142 int32_t vertexOffset,
6143 uint32_t firstInstance,
6144 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006145{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006146 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6147
6148 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
6149}
6150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006151bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006152 VkCmdBuffer cmdBuffer,
6153 VkBuffer buffer,
6154 VkDeviceSize offset,
6155 uint32_t count,
6156 uint32_t stride)
6157{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
6159
6160
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006161
6162
6163 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164}
6165
6166VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
6167 VkCmdBuffer cmdBuffer,
6168 VkBuffer buffer,
6169 VkDeviceSize offset,
6170 uint32_t count,
6171 uint32_t stride)
6172{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6174
6175 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
6176}
6177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006178bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006179 VkCmdBuffer cmdBuffer,
6180 VkBuffer buffer,
6181 VkDeviceSize offset,
6182 uint32_t count,
6183 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006184{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006185
6186
6187
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006188
6189
6190 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006191}
6192
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
6194 VkCmdBuffer cmdBuffer,
6195 VkBuffer buffer,
6196 VkDeviceSize offset,
6197 uint32_t count,
6198 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006199{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006200 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
6201
6202 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
6203}
6204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006206 VkCmdBuffer cmdBuffer,
6207 uint32_t x,
6208 uint32_t y,
6209 uint32_t z)
6210{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211
6212
6213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006214
6215 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216}
6217
6218VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
6219 VkCmdBuffer cmdBuffer,
6220 uint32_t x,
6221 uint32_t y,
6222 uint32_t z)
6223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006224 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
6225
6226 PostCmdDispatch(cmdBuffer, x, y, z);
6227}
6228
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006229bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230 VkCmdBuffer cmdBuffer,
6231 VkBuffer buffer,
6232 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006233{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006234
Jeremy Hayes99a96322015-06-26 12:48:09 -06006235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006236
6237 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006238}
6239
Jeremy Hayes99a96322015-06-26 12:48:09 -06006240VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
6241 VkCmdBuffer cmdBuffer,
6242 VkBuffer buffer,
6243 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006244{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
6246
6247 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006248}
6249
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006250bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251 VkCmdBuffer cmdBuffer,
6252 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006253{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006254 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006257
6258 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006259}
6260
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006261bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006262 VkCmdBuffer cmdBuffer,
6263 VkBuffer srcBuffer,
6264 VkBuffer destBuffer,
6265 uint32_t regionCount)
6266{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268
Jeremy Hayes99a96322015-06-26 12:48:09 -06006269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006270
6271 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272}
6273
6274VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
6275 VkCmdBuffer cmdBuffer,
6276 VkBuffer srcBuffer,
6277 VkBuffer destBuffer,
6278 uint32_t regionCount,
6279 const VkBufferCopy* pRegions)
6280{
6281 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006282
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
6284
6285 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
6286}
6287
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006288bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289 VkCmdBuffer cmdBuffer,
6290 const VkImageCopy* pRegions)
6291{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006292 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6295 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6296 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006297 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006298 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006299 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300 }
6301 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6302 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6303 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006304 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006305 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006306 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006307 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006308 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006309
6310 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006311}
6312
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006313bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314 VkCmdBuffer cmdBuffer,
6315 VkImage srcImage,
6316 VkImageLayout srcImageLayout,
6317 VkImage destImage,
6318 VkImageLayout destImageLayout,
6319 uint32_t regionCount)
6320{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006321
Jeremy Hayes99a96322015-06-26 12:48:09 -06006322
6323 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6324 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6325 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006326 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006327 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006329 }
6330
Jeremy Hayes99a96322015-06-26 12:48:09 -06006331
6332 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6333 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6334 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006335 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006336 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006337 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338 }
6339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006340
6341 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342}
6343
6344VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
6345 VkCmdBuffer cmdBuffer,
6346 VkImage srcImage,
6347 VkImageLayout srcImageLayout,
6348 VkImage destImage,
6349 VkImageLayout destImageLayout,
6350 uint32_t regionCount,
6351 const VkImageCopy* pRegions)
6352{
6353 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006354
Jeremy Hayes99a96322015-06-26 12:48:09 -06006355 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6356
6357 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6358}
6359
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006360bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006361 VkCmdBuffer cmdBuffer,
6362 const VkImageBlit* pRegions)
6363{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006364 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006365 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006366 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6367 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6368 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006369 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006370 "vkCmdBlitImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006371 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006372 }
6373 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6374 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6375 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006376 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006377 "vkCmdBlitImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006378 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006379 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006380 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006381
6382 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383}
6384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006386 VkCmdBuffer cmdBuffer,
6387 VkImage srcImage,
6388 VkImageLayout srcImageLayout,
6389 VkImage destImage,
6390 VkImageLayout destImageLayout,
6391 uint32_t regionCount,
6392 VkTexFilter filter)
6393{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006394
Jeremy Hayes99a96322015-06-26 12:48:09 -06006395
6396 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6397 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6398 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006399 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006400 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006401 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006402 }
6403
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404
6405 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6406 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6407 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006408 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006409 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006410 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006411 }
6412
6413
6414 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
6415 filter > VK_TEX_FILTER_END_RANGE)
6416 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006417 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006418 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006420 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006421
6422 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006423}
6424
6425VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
6426 VkCmdBuffer cmdBuffer,
6427 VkImage srcImage,
6428 VkImageLayout srcImageLayout,
6429 VkImage destImage,
6430 VkImageLayout destImageLayout,
6431 uint32_t regionCount,
6432 const VkImageBlit* pRegions,
6433 VkTexFilter filter)
6434{
6435 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006436
Jeremy Hayes99a96322015-06-26 12:48:09 -06006437 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
6438
6439 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
6440}
6441
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006442bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006443 VkCmdBuffer cmdBuffer,
6444 const VkBufferImageCopy* pRegions)
6445{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006446 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006447 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6449 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6450 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006451 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006452 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006453 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006455 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006456
6457 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458}
6459
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006460bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006461 VkCmdBuffer cmdBuffer,
6462 VkBuffer srcBuffer,
6463 VkImage destImage,
6464 VkImageLayout destImageLayout,
6465 uint32_t regionCount)
6466{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469
6470 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6471 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6472 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006473 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006474 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006475 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 }
6477
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006478
6479 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480}
6481
6482VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
6483 VkCmdBuffer cmdBuffer,
6484 VkBuffer srcBuffer,
6485 VkImage destImage,
6486 VkImageLayout destImageLayout,
6487 uint32_t regionCount,
6488 const VkBufferImageCopy* pRegions)
6489{
6490 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006491
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
6493
6494 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
6495}
6496
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006497bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 VkCmdBuffer cmdBuffer,
6499 const VkBufferImageCopy* pRegions)
6500{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006501 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 if(pRegions->imageSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6504 pRegions->imageSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6505 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006506 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006507 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006508 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006510 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006511
6512 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513}
6514
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006515bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 VkCmdBuffer cmdBuffer,
6517 VkImage srcImage,
6518 VkImageLayout srcImageLayout,
6519 VkBuffer destBuffer,
6520 uint32_t regionCount)
6521{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523
6524 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6525 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6526 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006527 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006528 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006529 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 }
6531
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006533
6534 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535}
6536
6537VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
6538 VkCmdBuffer cmdBuffer,
6539 VkImage srcImage,
6540 VkImageLayout srcImageLayout,
6541 VkBuffer destBuffer,
6542 uint32_t regionCount,
6543 const VkBufferImageCopy* pRegions)
6544{
6545 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006546
Jeremy Hayes99a96322015-06-26 12:48:09 -06006547 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
6548
6549 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
6550}
6551
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006552bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006553 VkCmdBuffer cmdBuffer,
6554 const uint32_t* pData)
6555{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006556 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006559
6560 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561}
6562
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006563bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 VkCmdBuffer cmdBuffer,
6565 VkBuffer destBuffer,
6566 VkDeviceSize destOffset,
6567 VkDeviceSize dataSize)
6568{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569
6570
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006571
6572
6573 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574}
6575
6576VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
6577 VkCmdBuffer cmdBuffer,
6578 VkBuffer destBuffer,
6579 VkDeviceSize destOffset,
6580 VkDeviceSize dataSize,
6581 const uint32_t* pData)
6582{
6583 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006584
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
6586
6587 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6588}
6589
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006590bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 VkCmdBuffer cmdBuffer,
6592 VkBuffer destBuffer,
6593 VkDeviceSize destOffset,
6594 VkDeviceSize fillSize,
6595 uint32_t data)
6596{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597
6598
6599
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006600
6601
6602 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603}
6604
6605VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6606 VkCmdBuffer cmdBuffer,
6607 VkBuffer destBuffer,
6608 VkDeviceSize destOffset,
6609 VkDeviceSize fillSize,
6610 uint32_t data)
6611{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6613
6614 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6615}
6616
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006617bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006618 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12006619 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006620 const VkImageSubresourceRange* pRanges)
6621{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006622 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006623 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006624 }
6625
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006626 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006627 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006628 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006629 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006630
6631 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632}
6633
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006634bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635 VkCmdBuffer cmdBuffer,
6636 VkImage image,
6637 VkImageLayout imageLayout,
6638 uint32_t rangeCount)
6639{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641
6642 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6643 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6644 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006645 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006646 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006647 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006648 }
6649
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006650
6651 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006652}
6653
6654VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6655 VkCmdBuffer cmdBuffer,
6656 VkImage image,
6657 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12006658 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006659 uint32_t rangeCount,
6660 const VkImageSubresourceRange* pRanges)
6661{
6662 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006663
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6665
6666 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6667}
6668
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006669bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006670 VkCmdBuffer cmdBuffer,
6671 const VkImageSubresourceRange* pRanges)
6672{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006673 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006674 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006675 /*
6676 * TODO: How do we validation pRanges->aspectMask?
6677 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6678 * VK_IMAGE_ASPECT_STENCIL_BIT.
6679 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006680 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006681
6682 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006683}
6684
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006685bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686 VkCmdBuffer cmdBuffer,
6687 VkImage image,
6688 VkImageLayout imageLayout,
6689 float depth,
6690 uint32_t stencil,
6691 uint32_t rangeCount)
6692{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006693
Jeremy Hayes99a96322015-06-26 12:48:09 -06006694
6695 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6696 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6697 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006698 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006699 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006700 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006701 }
6702
6703
6704
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006705
6706 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006707}
6708
Chris Forbesd9be82b2015-06-22 17:21:59 +12006709VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006710 VkCmdBuffer cmdBuffer,
6711 VkImage image,
6712 VkImageLayout imageLayout,
6713 float depth,
6714 uint32_t stencil,
6715 uint32_t rangeCount,
6716 const VkImageSubresourceRange* pRanges)
6717{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006718 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006719
Chris Forbesd9be82b2015-06-22 17:21:59 +12006720 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006721
Chris Forbesd9be82b2015-06-22 17:21:59 +12006722 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, depth, stencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006723}
6724
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006725bool PreCmdClearColorAttachment(
6726 VkCmdBuffer cmdBuffer,
6727 const VkClearColorValue* pColor,
6728 const VkRect3D* pRects)
6729{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006730 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006731 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006732 }
6733
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006734 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006735 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006736 }
6737
6738 return true;
6739}
6740
6741bool PostCmdClearColorAttachment(
6742 VkCmdBuffer cmdBuffer,
6743 uint32_t colorAttachment,
6744 VkImageLayout imageLayout,
6745 uint32_t rectCount)
6746{
6747
6748
6749 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6750 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6751 {
6752 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006753 "vkCmdClearColorAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006754 return false;
6755 }
6756
6757
6758 return true;
6759}
6760
6761VK_LAYER_EXPORT void VKAPI vkCmdClearColorAttachment(
6762 VkCmdBuffer cmdBuffer,
6763 uint32_t colorAttachment,
6764 VkImageLayout imageLayout,
6765 const VkClearColorValue* pColor,
6766 uint32_t rectCount,
6767 const VkRect3D* pRects)
6768{
6769 PreCmdClearColorAttachment(cmdBuffer, pColor, pRects);
6770
6771 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, pColor, rectCount, pRects);
6772
6773 PostCmdClearColorAttachment(cmdBuffer, colorAttachment, imageLayout, rectCount);
6774}
6775
6776bool PreCmdClearDepthStencilAttachment(
6777 VkCmdBuffer cmdBuffer,
6778 const VkRect3D* pRects)
6779{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006780 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006781 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006782 }
6783
6784 return true;
6785}
6786
6787bool PostCmdClearDepthStencilAttachment(
6788 VkCmdBuffer cmdBuffer,
6789 VkImageAspectFlags imageAspectMask,
6790 VkImageLayout imageLayout,
6791 float depth,
6792 uint32_t stencil,
6793 uint32_t rectCount)
6794{
6795
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006796
6797 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6798 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6799 {
6800 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006801 "vkCmdClearDepthStencilAttachment parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006802 return false;
6803 }
6804
6805
6806
6807
6808 return true;
6809}
6810
6811VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilAttachment(
6812 VkCmdBuffer cmdBuffer,
6813 VkImageAspectFlags imageAspectMask,
6814 VkImageLayout imageLayout,
6815 float depth,
6816 uint32_t stencil,
6817 uint32_t rectCount,
6818 const VkRect3D* pRects)
6819{
6820 PreCmdClearDepthStencilAttachment(cmdBuffer, pRects);
6821
6822 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount, pRects);
6823
6824 PostCmdClearDepthStencilAttachment(cmdBuffer, imageAspectMask, imageLayout, depth, stencil, rectCount);
6825}
6826
6827bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006828 VkCmdBuffer cmdBuffer,
6829 const VkImageResolve* pRegions)
6830{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006831 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006832 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006833 if(pRegions->srcSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6834 pRegions->srcSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6835 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006836 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006837 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006838 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006839 }
6840 if(pRegions->destSubresource.aspect < VK_IMAGE_ASPECT_BEGIN_RANGE ||
6841 pRegions->destSubresource.aspect > VK_IMAGE_ASPECT_END_RANGE)
6842 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006843 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006844 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006845 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006846 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006847 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006848
6849 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006850}
6851
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006852bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006853 VkCmdBuffer cmdBuffer,
6854 VkImage srcImage,
6855 VkImageLayout srcImageLayout,
6856 VkImage destImage,
6857 VkImageLayout destImageLayout,
6858 uint32_t regionCount)
6859{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006860
Jeremy Hayes99a96322015-06-26 12:48:09 -06006861
6862 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6863 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6864 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006865 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006866 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006867 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006868 }
6869
Jeremy Hayes99a96322015-06-26 12:48:09 -06006870
6871 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6872 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6873 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006874 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006875 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006876 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006877 }
6878
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006879
6880 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006881}
6882
6883VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6884 VkCmdBuffer cmdBuffer,
6885 VkImage srcImage,
6886 VkImageLayout srcImageLayout,
6887 VkImage destImage,
6888 VkImageLayout destImageLayout,
6889 uint32_t regionCount,
6890 const VkImageResolve* pRegions)
6891{
6892 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006893
Jeremy Hayes99a96322015-06-26 12:48:09 -06006894 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6895
6896 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6897}
6898
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006899bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006900 VkCmdBuffer cmdBuffer,
6901 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006902 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006903{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006904
Jeremy Hayes99a96322015-06-26 12:48:09 -06006905
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006906
6907 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006908}
6909
6910VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6911 VkCmdBuffer cmdBuffer,
6912 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006913 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006914{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006915 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006916
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006917 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006918}
6919
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006920bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006921 VkCmdBuffer cmdBuffer,
6922 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006923 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006924{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006925
Jeremy Hayes99a96322015-06-26 12:48:09 -06006926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006927
6928 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006929}
6930
6931VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6932 VkCmdBuffer cmdBuffer,
6933 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006934 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006935{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006936 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006937
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006938 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006939}
6940
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006941bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006942 VkCmdBuffer cmdBuffer,
6943 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006944 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006945{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006946 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006947 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006948 }
6949
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006950 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006951 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006952 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006953
6954 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006955}
6956
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006957bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006958 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006959 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006960 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006961 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006962 uint32_t memBarrierCount)
6963{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006964
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006965
Jeremy Hayes99a96322015-06-26 12:48:09 -06006966
6967
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006968
6969 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006970}
6971
6972VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6973 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006974 uint32_t eventCount,
6975 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006976 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006977 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006978 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006979 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006980{
6981 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006982
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006983 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006984
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006985 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006986}
6987
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006988bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006989 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006990 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006991{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006992 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006993 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006994 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006995
6996 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006997}
6998
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006999bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007000 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007001 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007002 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06007003 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007004 uint32_t memBarrierCount)
7005{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007006
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007007
Jeremy Hayes99a96322015-06-26 12:48:09 -06007008
7009
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007010
7011 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007012}
7013
7014VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
7015 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007016 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007017 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06007018 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06007019 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007020 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007021{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06007022 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007023
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007024 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007025
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06007026 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007027}
7028
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007029bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007030 VkCmdBuffer cmdBuffer,
7031 VkQueryPool queryPool,
7032 uint32_t slot,
7033 VkQueryControlFlags flags)
7034{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007035
Jeremy Hayes99a96322015-06-26 12:48:09 -06007036
7037
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007038
7039 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007040}
7041
7042VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
7043 VkCmdBuffer cmdBuffer,
7044 VkQueryPool queryPool,
7045 uint32_t slot,
7046 VkQueryControlFlags flags)
7047{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007048 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7049
7050 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
7051}
7052
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007053bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007054 VkCmdBuffer cmdBuffer,
7055 VkQueryPool queryPool,
7056 uint32_t slot)
7057{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007058
Jeremy Hayes99a96322015-06-26 12:48:09 -06007059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007060
7061 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007062}
7063
7064VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
7065 VkCmdBuffer cmdBuffer,
7066 VkQueryPool queryPool,
7067 uint32_t slot)
7068{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007069 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
7070
7071 PostCmdEndQuery(cmdBuffer, queryPool, slot);
7072}
7073
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007074bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007075 VkCmdBuffer cmdBuffer,
7076 VkQueryPool queryPool,
7077 uint32_t startQuery,
7078 uint32_t queryCount)
7079{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007080
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007081
7082
7083
7084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007085}
7086
7087VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
7088 VkCmdBuffer cmdBuffer,
7089 VkQueryPool queryPool,
7090 uint32_t startQuery,
7091 uint32_t queryCount)
7092{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007093 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7094
7095 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
7096}
7097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007098bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007099 VkCmdBuffer cmdBuffer,
7100 VkTimestampType timestampType,
7101 VkBuffer destBuffer,
7102 VkDeviceSize destOffset)
7103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007104
7105 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
7106 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
7107 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007108 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007109 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007110 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007111 }
7112
Jeremy Hayes99a96322015-06-26 12:48:09 -06007113
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007114
7115 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007116}
7117
7118VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
7119 VkCmdBuffer cmdBuffer,
7120 VkTimestampType timestampType,
7121 VkBuffer destBuffer,
7122 VkDeviceSize destOffset)
7123{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007124 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7125
7126 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
7127}
7128
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007129bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007130 VkCmdBuffer cmdBuffer,
7131 VkQueryPool queryPool,
7132 uint32_t startQuery,
7133 uint32_t queryCount,
7134 VkBuffer destBuffer,
7135 VkDeviceSize destOffset,
7136 VkDeviceSize destStride,
7137 VkQueryResultFlags flags)
7138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007139
7140
7141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007142
Jeremy Hayes99a96322015-06-26 12:48:09 -06007143
7144
7145
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007146
7147 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007148}
7149
Jeremy Hayesad367152015-04-17 10:36:53 -06007150VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007151 VkCmdBuffer cmdBuffer,
7152 VkQueryPool queryPool,
7153 uint32_t startQuery,
7154 uint32_t queryCount,
7155 VkBuffer destBuffer,
7156 VkDeviceSize destOffset,
7157 VkDeviceSize destStride,
7158 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06007159{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007160 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
7161
7162 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06007163}
7164
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007165bool PreCmdPushConstants(
7166 VkCmdBuffer cmdBuffer,
7167 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007168{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007169 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007170 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007171 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007172
7173 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007174}
7175
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007176bool PostCmdPushConstants(
7177 VkCmdBuffer cmdBuffer,
7178 VkPipelineLayout layout,
7179 VkShaderStageFlags stageFlags,
7180 uint32_t start,
7181 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007182{
Jeremy Hayes99a96322015-06-26 12:48:09 -06007183
Jeremy Hayes99a96322015-06-26 12:48:09 -06007184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007185
7186
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007187
7188 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007189}
7190
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007191VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
7192 VkCmdBuffer cmdBuffer,
7193 VkPipelineLayout layout,
7194 VkShaderStageFlags stageFlags,
7195 uint32_t start,
7196 uint32_t length,
7197 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007198{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007199 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007200
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007201 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007202
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007203 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007204}
7205
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007206bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06007207 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007208 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007209{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007210 if(pRenderPassBegin != nullptr)
7211 {
7212 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007213 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007214 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007215 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007216 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06007217 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06007218 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06007219 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007220 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06007221 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007222
7223 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007224}
7225
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007226bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007227 VkCmdBuffer cmdBuffer,
7228 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007229{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007230
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007231 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
7232 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
7233 {
7234 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
7235 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
7236 return false;
7237 }
7238
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007239 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007240}
7241
Jeremy Hayes99a96322015-06-26 12:48:09 -06007242VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
7243 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08007244 const VkRenderPassBeginInfo* pRenderPassBegin,
7245 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007246{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007247 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
7248
Chia-I Wu08accc62015-07-07 11:50:03 +08007249 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007250
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007251 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007252}
7253
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007254bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08007255 VkCmdBuffer cmdBuffer,
7256 VkRenderPassContents contents)
7257{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007258
7259 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007260 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08007261 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007262 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007263 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
7264 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08007265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007266
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007267 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08007268}
7269
7270VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
7271 VkCmdBuffer cmdBuffer,
7272 VkRenderPassContents contents)
7273{
Chia-I Wu08accc62015-07-07 11:50:03 +08007274 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
7275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007276 PostCmdNextSubpass(cmdBuffer, contents);
7277}
7278
7279bool PostCmdEndRenderPass(
7280 VkCmdBuffer cmdBuffer)
7281{
7282
7283 return true;
7284}
7285
7286VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
7287 VkCmdBuffer cmdBuffer)
7288{
7289 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
7290
7291 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08007292}
7293
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007294bool PreCmdExecuteCommands(
7295 VkCmdBuffer cmdBuffer,
7296 const VkCmdBuffer* pCmdBuffers)
7297{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06007298 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007299 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007300 }
7301
7302 return true;
7303}
7304
7305bool PostCmdExecuteCommands(
7306 VkCmdBuffer cmdBuffer,
7307 uint32_t cmdBuffersCount)
7308{
7309
7310
7311 return true;
7312}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007313
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08007314VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007315 VkCmdBuffer cmdBuffer,
7316 uint32_t cmdBuffersCount,
7317 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08007318{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007319 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
7320
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08007321 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
7322
Jeremy Hayes359eeb92015-07-09 17:11:25 -06007323 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007324}
7325
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007326VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007327{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007328 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007329 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007330 }
7331
Jon Ashburn8fd08252015-05-28 16:25:02 -06007332 /* loader uses this to force layer initialization; device object is wrapped */
7333 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007334 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007335 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06007336 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007337
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06007338 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007339 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007340 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007341 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007342 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007343 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007344 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007345 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007346 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007347 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007348 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007349 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007350 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007351 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007352 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007353 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007354 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007355 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007356 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007357 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007358 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007359 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007360 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007361 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007362 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007363 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007364 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007365 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007366 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007367 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007368 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007369 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007370 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007371 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007372 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007373 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007374 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007375 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007376 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007377 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007378 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007379 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007380 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007381 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007382 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007383 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007384 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007385 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007386 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007387 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007388 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007389 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007390 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007391 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007392 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007393 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007394 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007395 return (PFN_vkVoidFunction) vkCreateShader;
Jon Ashburnc669cc62015-07-09 15:02:25 -06007396 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007397 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06007398 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007399 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007400 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007401 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007402 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007403 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007404 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007405 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007406 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007407 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007408 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007409 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007410 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007411 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007412 if (!strcmp(funcName, "vkCreateDynamicViewportState"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007413 return (PFN_vkVoidFunction) vkCreateDynamicViewportState;
Cody Northrop271ba752015-08-26 10:01:32 -06007414 if (!strcmp(funcName, "vkCreateDynamicLineWidthState"))
7415 return (PFN_vkVoidFunction) vkCreateDynamicLineWidthState;
7416 if (!strcmp(funcName, "vkCreateDynamicDepthBiasState"))
7417 return (PFN_vkVoidFunction) vkCreateDynamicDepthBiasState;
7418 if (!strcmp(funcName, "vkCreateDynamicBlendState"))
7419 return (PFN_vkVoidFunction) vkCreateDynamicBlendState;
7420 if (!strcmp(funcName, "vkCreateDynamicDepthBoundsState"))
7421 return (PFN_vkVoidFunction) vkCreateDynamicDepthBoundsState;
Cody Northrop82485a82015-08-18 15:21:16 -06007422 if (!strcmp(funcName, "vkCreateDynamicStencilState"))
7423 return (PFN_vkVoidFunction) vkCreateDynamicStencilState;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007424 if (!strcmp(funcName, "vkCreateCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007425 return (PFN_vkVoidFunction) vkCreateCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007426 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007427 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007428 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007429 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007430 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007431 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007432 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007433 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007434 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007435 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007436 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007437 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007438 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007439 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007440 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007441 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007442 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007443 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007444 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007445 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007446 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007447 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007448 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007449 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007450 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007451 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007452 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007453 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007454 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007455 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007456 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007457 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007458 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007459 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007460 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007461 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007462 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007463 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007464 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007465 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007466 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007467 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007468 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007469 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007470 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007471 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007472 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007473 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007474 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007475 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007476 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007477 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007478 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007479 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007480 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007481 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007482 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007483 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007484 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007485 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007486 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007487 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007488 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007489 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007490 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007491 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007492 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007493 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08007494 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007495 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06007496
Jon Ashburneab34492015-06-01 09:37:38 -06007497 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007498 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007499 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007500 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06007501 }
7502}
7503
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007504VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007505{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007506 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007507 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05007508 }
7509
Jon Ashburn8fd08252015-05-28 16:25:02 -06007510 /* loader uses this to force layer initialization; instance object is wrapped */
7511 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06007512 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007513 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06007514 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007515
Jeremy Hayes99a96322015-06-26 12:48:09 -06007516 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007517 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007518 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007519 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007520 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007521 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007522 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007523 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06007524 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007525 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06007526 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007527 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06007528 if (!strcmp(funcName, "vkGetGlobalLayerProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007529 return (PFN_vkVoidFunction) vkGetGlobalLayerProperties;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06007530 if (!strcmp(funcName, "vkGetGlobalExtensionProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007531 return (PFN_vkVoidFunction) vkGetGlobalExtensionProperties;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06007532 if (!strcmp(funcName, "vkGetPhysicalDeviceLayerProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007533 return (PFN_vkVoidFunction) vkGetPhysicalDeviceLayerProperties;
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06007534 if (!strcmp(funcName, "vkGetPhysicalDeviceExtensionProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007535 return (PFN_vkVoidFunction) vkGetPhysicalDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007536
Jeremy Hayes99a96322015-06-26 12:48:09 -06007537 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06007538 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06007539 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06007540 return fptr;
7541
Jeremy Hayes99a96322015-06-26 12:48:09 -06007542 {
7543 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
7544 return NULL;
7545 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
7546 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06007547}