blob: d7c13d40c75ba241ab02987bdc83a13f6def17d4 [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.
Michael Lentine03d8e572015-09-15 14:59:14 -05005 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006 *
7 * Permission is hereby granted, free of charge, to any person obtaining a
8 * copy of this software and associated documentation files (the "Software"),
9 * to deal in the Software without restriction, including without limitation
10 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11 * and/or sell copies of the Software, and to permit persons to whom the
12 * Software is furnished to do so, subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be included
15 * in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
20 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23 * DEALINGS IN THE SOFTWARE.
24 */
25
26#include <stdio.h>
27#include <stdlib.h>
28#include <string.h>
29
30#include <iostream>
31#include <string>
32#include <sstream>
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050033#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060034#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060035
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060036#include "vk_loader_platform.h"
Tobin Ehlis0c6f9ee2015-07-03 09:42:57 -060037#include "vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060038#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060039#include "vk_enum_validate_helper.h"
40#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060041
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060042#include "vk_layer_table.h"
43#include "vk_layer_data.h"
44#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060045#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060046
Cody Northrop55443ef2015-09-28 15:09:32 -060047struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060048 debug_report_data *report_data;
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060049 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060050
51 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060052 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060053 {};
54};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050055
Jeremy Hayes99a96322015-06-26 12:48:09 -060056static std::unordered_map<void*, layer_data*> layer_data_map;
57static device_table_map pc_device_table_map;
58static instance_table_map pc_instance_table_map;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060059
Jeremy Hayes99a96322015-06-26 12:48:09 -060060// "my instance data"
61debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060062{
Jeremy Hayes99a96322015-06-26 12:48:09 -060063 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060064 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-06-26 12:48:09 -060065#if DISPATCH_MAP_DEBUG
66 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
67#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060068 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060069
70 return data->report_data;
71}
72
73// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060074debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-06-26 12:48:09 -060075{
76 dispatch_key key = get_dispatch_key(object);
77 layer_data *data = get_my_data_ptr(key, layer_data_map);
78#if DISPATCH_MAP_DEBUG
79 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
80#endif
Courtney Goeltzenleuchter876a4f52015-07-17 10:20:11 -060081 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060082 return data->report_data;
83}
84
85static void InitParamChecker(layer_data *data)
86{
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060087 VkDbgMsgCallback callback;
Jeremy Hayes99a96322015-06-26 12:48:09 -060088 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
89
90 uint32_t debug_action = 0;
91 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
92 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
93 {
94 FILE *log_output = NULL;
95 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb1df55e2015-09-15 09:55:54 -060096 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060097 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
98 data->logging_callback.push_back(callback);
99 }
100
101 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
102 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
103 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600104 }
105}
106
107VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
108 VkInstance instance,
109 VkFlags msgFlags,
110 const PFN_vkDbgMsgCallback pfnMsgCallback,
111 void* pUserData,
112 VkDbgMsgCallback* pMsgCallback)
113{
114 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
115 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
116
117 if (result == VK_SUCCESS)
118 {
119 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
120 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
121 }
122
123 return result;
124}
125
126VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
127 VkInstance instance,
128 VkDbgMsgCallback msgCallback)
129{
130 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
131 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
132
133 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
134 layer_destroy_msg_callback(data->report_data, msgCallback);
135
136 return result;
137}
138
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600139static const VkLayerProperties pc_global_layers[] = {
140 {
141 "ParamChecker",
142 VK_API_VERSION,
143 VK_MAKE_VERSION(0, 1, 0),
144 "Validation layer: ParamChecker",
145 }
146};
Tony Barbour59a47322015-06-24 16:06:58 -0600147
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600148VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600149 const char *pLayerName,
150 uint32_t *pCount,
151 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600152{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600153 /* ParamChecker does not have any global extensions */
154 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600155}
156
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600157VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600158 uint32_t *pCount,
159 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600160{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600161 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
162 pc_global_layers,
163 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600164}
165
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600166VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600167 VkPhysicalDevice physicalDevice,
168 const char* pLayerName,
169 uint32_t* pCount,
170 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600171{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600172 /* ParamChecker does not have any physical device extensions */
173 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jeremy Hayesad367152015-04-17 10:36:53 -0600174}
175
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -0600176VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600177 VkPhysicalDevice physicalDevice,
178 uint32_t* pCount,
179 VkLayerProperties* pProperties)
180{
181 /* ParamChecker's physical device layers are the same as global */
182 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
183 pCount, pProperties);
184}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600185
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600186// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600187
Jeremy Hayes99a96322015-06-26 12:48:09 -0600188static
189std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600190{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600191 switch(enumerator)
192 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600193 case VK_RESULT_MAX_ENUM:
194 {
195 return "VK_RESULT_MAX_ENUM";
196 break;
197 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600198 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600199 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600200 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600201 break;
202 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600203 case VK_ERROR_INCOMPATIBLE_DRIVER:
204 {
205 return "VK_ERROR_INCOMPATIBLE_DRIVER";
206 break;
207 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600208 case VK_ERROR_MEMORY_MAP_FAILED:
209 {
210 return "VK_ERROR_MEMORY_MAP_FAILED";
211 break;
212 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600213 case VK_INCOMPLETE:
214 {
215 return "VK_INCOMPLETE";
216 break;
217 }
218 case VK_ERROR_OUT_OF_HOST_MEMORY:
219 {
220 return "VK_ERROR_OUT_OF_HOST_MEMORY";
221 break;
222 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600223 case VK_ERROR_INITIALIZATION_FAILED:
224 {
225 return "VK_ERROR_INITIALIZATION_FAILED";
226 break;
227 }
228 case VK_NOT_READY:
229 {
230 return "VK_NOT_READY";
231 break;
232 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
234 {
235 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
236 break;
237 }
238 case VK_EVENT_SET:
239 {
240 return "VK_EVENT_SET";
241 break;
242 }
243 case VK_TIMEOUT:
244 {
245 return "VK_TIMEOUT";
246 break;
247 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600248 case VK_EVENT_RESET:
249 {
250 return "VK_EVENT_RESET";
251 break;
252 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600253 case VK_SUCCESS:
254 {
255 return "VK_SUCCESS";
256 break;
257 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600258 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600259 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600260 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600261 break;
262 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600263 case VK_ERROR_DEVICE_LOST:
264 {
265 return "VK_ERROR_DEVICE_LOST";
266 break;
267 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600268 default:
269 {
270 return "unrecognized enumerator";
271 break;
272 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600273 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600274}
275
276static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600277bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
278{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600279 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600280 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
281 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
282 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
283 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
284 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
285 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
286 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
287 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
288 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600289 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
290 VK_FORMAT_FEATURE_BLIT_SOURCE_BIT |
291 VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600292 if(enumerator & (~allFlags))
293 {
294 return false;
295 }
296
297 return true;
298}
299
300static
301std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
302{
303 if(!ValidateEnumerator(enumerator))
304 {
305 return "unrecognized enumerator";
306 }
307
308 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600309 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
310 {
311 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
312 }
313 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
314 {
315 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
316 }
317 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
318 {
319 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
320 }
321 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
322 {
323 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
324 }
325 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
326 {
327 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
328 }
329 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
330 {
331 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
332 }
333 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
334 {
335 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
336 }
337 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
338 {
339 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
340 }
341 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
342 {
343 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
344 }
345 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
346 {
347 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
348 }
Cody Northrop61d6dd62015-08-18 14:58:29 -0600349 if(enumerator & VK_FORMAT_FEATURE_BLIT_SOURCE_BIT)
350 {
351 strings.push_back("VK_FORMAT_FEATURE_BLIT_SOURCE_BIT");
352 }
353 if(enumerator & VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT)
354 {
355 strings.push_back("VK_FORMAT_FEATURE_BLIT_DESTINATION_BIT");
356 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600357
358 std::string enumeratorString;
359 for(auto const& string : strings)
360 {
361 enumeratorString += string;
362
363 if(string != strings.back())
364 {
365 enumeratorString += '|';
366 }
367 }
368
369 return enumeratorString;
370}
371
372static
373bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
374{
375 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600376 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600377 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
378 VK_IMAGE_USAGE_STORAGE_BIT |
379 VK_IMAGE_USAGE_SAMPLED_BIT |
380 VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT |
381 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600382 VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600383 if(enumerator & (~allFlags))
384 {
385 return false;
386 }
387
388 return true;
389}
390
391static
392std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
393{
394 if(!ValidateEnumerator(enumerator))
395 {
396 return "unrecognized enumerator";
397 }
398
399 std::vector<std::string> strings;
400 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
401 {
402 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
403 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600404 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600405 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600406 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600407 }
408 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
409 {
410 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
411 }
412 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
413 {
414 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
415 }
416 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
417 {
418 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
419 }
420 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT)
421 {
422 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DESTINATION_BIT");
423 }
424 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
427 }
428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT)
429 {
430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SOURCE_BIT");
431 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600432
433 std::string enumeratorString;
434 for(auto const& string : strings)
435 {
436 enumeratorString += string;
437
438 if(string != strings.back())
439 {
440 enumeratorString += '|';
441 }
442 }
443
444 return enumeratorString;
445}
446
447static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600448bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
449{
450 VkQueueFlagBits allFlags = (VkQueueFlagBits)(VK_QUEUE_EXTENDED_BIT |
451 VK_QUEUE_DMA_BIT |
452 VK_QUEUE_COMPUTE_BIT |
453 VK_QUEUE_SPARSE_MEMMGR_BIT |
454 VK_QUEUE_GRAPHICS_BIT);
455 if(enumerator & (~allFlags))
456 {
457 return false;
458 }
459
460 return true;
461}
462
463static
464std::string EnumeratorString(VkQueueFlagBits const& enumerator)
465{
466 if(!ValidateEnumerator(enumerator))
467 {
468 return "unrecognized enumerator";
469 }
470
471 std::vector<std::string> strings;
472 if(enumerator & VK_QUEUE_EXTENDED_BIT)
473 {
474 strings.push_back("VK_QUEUE_EXTENDED_BIT");
475 }
476 if(enumerator & VK_QUEUE_DMA_BIT)
477 {
478 strings.push_back("VK_QUEUE_DMA_BIT");
479 }
480 if(enumerator & VK_QUEUE_COMPUTE_BIT)
481 {
482 strings.push_back("VK_QUEUE_COMPUTE_BIT");
483 }
484 if(enumerator & VK_QUEUE_SPARSE_MEMMGR_BIT)
485 {
486 strings.push_back("VK_QUEUE_SPARSE_MEMMGR_BIT");
487 }
488 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
489 {
490 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
491 }
492
493 std::string enumeratorString;
494 for(auto const& string : strings)
495 {
496 enumeratorString += string;
497
498 if(string != strings.back())
499 {
500 enumeratorString += '|';
501 }
502 }
503
504 return enumeratorString;
505}
506
507static
508bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
509{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600510 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600511 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
512 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
513 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
514 VK_MEMORY_PROPERTY_DEVICE_ONLY);
515 if(enumerator & (~allFlags))
516 {
517 return false;
518 }
519
520 return true;
521}
522
523static
524std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
525{
526 if(!ValidateEnumerator(enumerator))
527 {
528 return "unrecognized enumerator";
529 }
530
531 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600532 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
535 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600536 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
547 }
548 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
549 {
550 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
551 }
552
553 std::string enumeratorString;
554 for(auto const& string : strings)
555 {
556 enumeratorString += string;
557
558 if(string != strings.back())
559 {
560 enumeratorString += '|';
561 }
562 }
563
564 return enumeratorString;
565}
566
567static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600568bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600569{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600570 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600571 if(enumerator & (~allFlags))
572 {
573 return false;
574 }
575
576 return true;
577}
578
579static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600580std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600581{
582 if(!ValidateEnumerator(enumerator))
583 {
584 return "unrecognized enumerator";
585 }
586
587 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600588 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600590 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600591 }
592
593 std::string enumeratorString;
594 for(auto const& string : strings)
595 {
596 enumeratorString += string;
597
598 if(string != strings.back())
599 {
600 enumeratorString += '|';
601 }
602 }
603
604 return enumeratorString;
605}
606
607static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600608bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
609{
610 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT |
611 VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT |
612 VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT);
613 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600614 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600615 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600616 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600617
618 return true;
619}
620
621static
622std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
623{
624 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600625 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600626 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600628
629 std::vector<std::string> strings;
630 if(enumerator & VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600631 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600632 strings.push_back("VK_SPARSE_IMAGE_FMT_NONSTD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600633 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600634 if(enumerator & VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600636 strings.push_back("VK_SPARSE_IMAGE_FMT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600637 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600638 if(enumerator & VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600639 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600640 strings.push_back("VK_SPARSE_IMAGE_FMT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600641 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600642
643 std::string enumeratorString;
644 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600645 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646 enumeratorString += string;
647
648 if(string != strings.back())
649 {
650 enumeratorString += '|';
651 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600652 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600653
654 return enumeratorString;
655}
656
657static
658bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
659{
Chia-I Wu85f34a72015-10-26 19:26:04 +0800660 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600661 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600662 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600663 return false;
664 }
665
666 return true;
667}
668
669static
670std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
671{
672 if(!ValidateEnumerator(enumerator))
673 {
674 return "unrecognized enumerator";
675 }
676
677 std::vector<std::string> strings;
Chia-I Wu85f34a72015-10-26 19:26:04 +0800678 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600679 {
Chia-I Wu85f34a72015-10-26 19:26:04 +0800680 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600681 }
682
683 std::string enumeratorString;
684 for(auto const& string : strings)
685 {
686 enumeratorString += string;
687
688 if(string != strings.back())
689 {
690 enumeratorString += '|';
691 }
692 }
693
694 return enumeratorString;
695}
696
697static
698bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
699{
700 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
701 if(enumerator & (~allFlags))
702 {
703 return false;
704 }
705
706 return true;
707}
708
709static
710std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
711{
712 if(!ValidateEnumerator(enumerator))
713 {
714 return "unrecognized enumerator";
715 }
716
717 std::vector<std::string> strings;
718 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
719 {
720 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
721 }
722
723 std::string enumeratorString;
724 for(auto const& string : strings)
725 {
726 enumeratorString += string;
727
728 if(string != strings.back())
729 {
730 enumeratorString += '|';
731 }
732 }
733
734 return enumeratorString;
735}
736
737static
738bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
739{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600740 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
749 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
750 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600751 if(enumerator & (~allFlags))
752 {
753 return false;
754 }
755
756 return true;
757}
758
759static
760std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
761{
762 if(!ValidateEnumerator(enumerator))
763 {
764 return "unrecognized enumerator";
765 }
766
767 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600781 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600810 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600811 }
812
813 std::string enumeratorString;
814 for(auto const& string : strings)
815 {
816 enumeratorString += string;
817
818 if(string != strings.back())
819 {
820 enumeratorString += '|';
821 }
822 }
823
824 return enumeratorString;
825}
826
827static
828bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
829{
830 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
831 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
832 VK_QUERY_RESULT_WAIT_BIT |
833 VK_QUERY_RESULT_64_BIT |
834 VK_QUERY_RESULT_DEFAULT);
835 if(enumerator & (~allFlags))
836 {
837 return false;
838 }
839
840 return true;
841}
842
843static
844std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
845{
846 if(!ValidateEnumerator(enumerator))
847 {
848 return "unrecognized enumerator";
849 }
850
851 std::vector<std::string> strings;
852 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_64_BIT)
865 {
866 strings.push_back("VK_QUERY_RESULT_64_BIT");
867 }
868 if(enumerator & VK_QUERY_RESULT_DEFAULT)
869 {
870 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600871 }
872
873 std::string enumeratorString;
874 for(auto const& string : strings)
875 {
876 enumeratorString += string;
877
878 if(string != strings.back())
879 {
880 enumeratorString += '|';
881 }
882 }
883
884 return enumeratorString;
885}
886
887static
888bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
889{
890 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
891 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
892 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
893 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
894 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
895 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
896 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
897 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600898 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600899 if(enumerator & (~allFlags))
900 {
901 return false;
902 }
903
904 return true;
905}
906
907static
908std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
909{
910 if(!ValidateEnumerator(enumerator))
911 {
912 return "unrecognized enumerator";
913 }
914
915 std::vector<std::string> strings;
916 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
947 }
948 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
949 {
950 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
951 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600952
953 std::string enumeratorString;
954 for(auto const& string : strings)
955 {
956 enumeratorString += string;
957
958 if(string != strings.back())
959 {
960 enumeratorString += '|';
961 }
962 }
963
964 return enumeratorString;
965}
966
967static
968bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
969{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600970 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
971 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600972 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600973 if(enumerator & (~allFlags))
974 {
975 return false;
976 }
977
978 return true;
979}
980
981static
982std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
983{
984 if(!ValidateEnumerator(enumerator))
985 {
986 return "unrecognized enumerator";
987 }
988
989 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600990 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
993 }
994 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
995 {
996 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
997 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600998 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600999 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001000 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001001 }
1002
1003 std::string enumeratorString;
1004 for(auto const& string : strings)
1005 {
1006 enumeratorString += string;
1007
1008 if(string != strings.back())
1009 {
1010 enumeratorString += '|';
1011 }
1012 }
1013
1014 return enumeratorString;
1015}
1016
1017static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1019{
1020 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001021 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1022 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001024 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001025 if(enumerator & (~allFlags))
1026 {
1027 return false;
1028 }
1029
1030 return true;
1031}
1032
1033static
1034std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1035{
1036 if(!ValidateEnumerator(enumerator))
1037 {
1038 return "unrecognized enumerator";
1039 }
1040
1041 std::vector<std::string> strings;
1042 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1045 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001046 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1049 }
1050 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1053 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001054 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1055 {
1056 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1057 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001058 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001059 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001060 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001061 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001062
1063 std::string enumeratorString;
1064 for(auto const& string : strings)
1065 {
1066 enumeratorString += string;
1067
1068 if(string != strings.back())
1069 {
1070 enumeratorString += '|';
1071 }
1072 }
1073
1074 return enumeratorString;
1075}
1076
1077static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001078bool ValidateEnumerator(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001079{
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001080 VkImageViewCreateFlagBits allFlags = (VkImageViewCreateFlagBits)(VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT |
1081 VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001091std::string EnumeratorString(VkImageViewCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001099 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001100 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001101 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_DEPTH_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 }
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001103 if(enumerator & VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001104 {
Courtney Goeltzenleuchter5861a1b2015-09-01 17:30:39 -06001105 strings.push_back("VK_IMAGE_VIEW_CREATE_READ_ONLY_STENCIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 }
1107
1108 std::string enumeratorString;
1109 for(auto const& string : strings)
1110 {
1111 enumeratorString += string;
1112
1113 if(string != strings.back())
1114 {
1115 enumeratorString += '|';
1116 }
1117 }
1118
1119 return enumeratorString;
1120}
1121
1122static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001123bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1124{
1125 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1126 VK_CHANNEL_B_BIT |
1127 VK_CHANNEL_G_BIT |
1128 VK_CHANNEL_R_BIT);
1129 if(enumerator & (~allFlags))
1130 {
1131 return false;
1132 }
1133
1134 return true;
1135}
1136
1137static
1138std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1139{
1140 if(!ValidateEnumerator(enumerator))
1141 {
1142 return "unrecognized enumerator";
1143 }
1144
1145 std::vector<std::string> strings;
1146 if(enumerator & VK_CHANNEL_A_BIT)
1147 {
1148 strings.push_back("VK_CHANNEL_A_BIT");
1149 }
1150 if(enumerator & VK_CHANNEL_B_BIT)
1151 {
1152 strings.push_back("VK_CHANNEL_B_BIT");
1153 }
1154 if(enumerator & VK_CHANNEL_G_BIT)
1155 {
1156 strings.push_back("VK_CHANNEL_G_BIT");
1157 }
1158 if(enumerator & VK_CHANNEL_R_BIT)
1159 {
1160 strings.push_back("VK_CHANNEL_R_BIT");
1161 }
1162
1163 std::string enumeratorString;
1164 for(auto const& string : strings)
1165 {
1166 enumeratorString += string;
1167
1168 if(string != strings.back())
1169 {
1170 enumeratorString += '|';
1171 }
1172 }
1173
1174 return enumeratorString;
1175}
1176
1177static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001178bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001179{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001180 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1181 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1182 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001183 if(enumerator & (~allFlags))
1184 {
1185 return false;
1186 }
1187
1188 return true;
1189}
1190
1191static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001192std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001193{
1194 if(!ValidateEnumerator(enumerator))
1195 {
1196 return "unrecognized enumerator";
1197 }
1198
1199 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001200 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001201 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1203 }
1204 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1205 {
1206 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1207 }
1208 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1209 {
1210 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001211 }
1212
1213 std::string enumeratorString;
1214 for(auto const& string : strings)
1215 {
1216 enumeratorString += string;
1217
1218 if(string != strings.back())
1219 {
1220 enumeratorString += '|';
1221 }
1222 }
1223
1224 return enumeratorString;
1225}
1226
1227static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001229{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001230 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1231 VK_SHADER_STAGE_FRAGMENT_BIT |
1232 VK_SHADER_STAGE_GEOMETRY_BIT |
1233 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001234 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1235 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001236 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001237 if(enumerator & (~allFlags))
1238 {
1239 return false;
1240 }
1241
1242 return true;
1243}
1244
1245static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001247{
1248 if(!ValidateEnumerator(enumerator))
1249 {
1250 return "unrecognized enumerator";
1251 }
1252
1253 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001255 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001257 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001258 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001259 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001261 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001263 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001264 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1265 }
1266 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1267 {
1268 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1269 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001270 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001271 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001272 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001273 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001274 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001275 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001276 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001277 }
1278 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1279 {
1280 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001281 }
1282
1283 std::string enumeratorString;
1284 for(auto const& string : strings)
1285 {
1286 enumeratorString += string;
1287
1288 if(string != strings.back())
1289 {
1290 enumeratorString += '|';
1291 }
1292 }
1293
1294 return enumeratorString;
1295}
1296
1297static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001298bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001299{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001300 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1301 VK_PIPELINE_STAGE_HOST_BIT |
1302 VK_PIPELINE_STAGE_TRANSFER_BIT |
1303 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1304 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1305 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001306 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001307 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001308 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1309 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1310 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001311 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001312 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1313 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1314 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1315 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 if(enumerator & (~allFlags))
1317 {
1318 return false;
1319 }
1320
1321 return true;
1322}
1323
1324static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001326{
1327 if(!ValidateEnumerator(enumerator))
1328 {
1329 return "unrecognized enumerator";
1330 }
1331
1332 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001333 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001334 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001335 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001336 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001337 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001338 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001339 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001340 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001341 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001342 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001343 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001344 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001345 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001346 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001347 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001348 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001349 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001350 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001351 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001352 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001353 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001354 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001355 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001356 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001357 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001358 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001359 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001360 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001361 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001362 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001363 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001364 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001365 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001366 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001367 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001368 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001369 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001370 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001371 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1372 }
1373 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1374 {
1375 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1376 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001377 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001378 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001379 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001380 }
1381 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1382 {
1383 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1384 }
1385 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1386 {
1387 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1388 }
1389 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1390 {
1391 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1392 }
1393 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1394 {
1395 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001396 }
1397
1398 std::string enumeratorString;
1399 for(auto const& string : strings)
1400 {
1401 enumeratorString += string;
1402
1403 if(string != strings.back())
1404 {
1405 enumeratorString += '|';
1406 }
1407 }
1408
1409 return enumeratorString;
1410}
1411
1412static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001413bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001415 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1416 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1417 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1418 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1419 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001420 if(enumerator & (~allFlags))
1421 {
1422 return false;
1423 }
1424
1425 return true;
1426}
1427
1428static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001429std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001430{
1431 if(!ValidateEnumerator(enumerator))
1432 {
1433 return "unrecognized enumerator";
1434 }
1435
1436 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001437 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001438 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001439 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001440 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001441 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001442 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001443 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001444 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001445 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001446 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001447 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1448 }
1449 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1450 {
1451 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1452 }
1453 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1454 {
1455 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001456 }
1457
1458 std::string enumeratorString;
1459 for(auto const& string : strings)
1460 {
1461 enumeratorString += string;
1462
1463 if(string != strings.back())
1464 {
1465 enumeratorString += '|';
1466 }
1467 }
1468
1469 return enumeratorString;
1470}
1471
1472static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001473bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001474{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001475 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1476 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1477 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1478 VK_MEMORY_INPUT_SHADER_READ_BIT |
1479 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1480 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1481 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1482 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1483 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1484 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001485 if(enumerator & (~allFlags))
1486 {
1487 return false;
1488 }
1489
1490 return true;
1491}
1492
1493static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001494std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001495{
1496 if(!ValidateEnumerator(enumerator))
1497 {
1498 return "unrecognized enumerator";
1499 }
1500
1501 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001502 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001504 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1505 }
1506 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1507 {
1508 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1509 }
1510 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1511 {
1512 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1513 }
1514 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1515 {
1516 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1517 }
1518 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1519 {
1520 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1521 }
1522 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1523 {
1524 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1525 }
1526 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1527 {
1528 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1529 }
1530 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1531 {
1532 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1533 }
1534 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1535 {
1536 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1537 }
1538 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1539 {
1540 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001541 }
1542
1543 std::string enumeratorString;
1544 for(auto const& string : strings)
1545 {
1546 enumeratorString += string;
1547
1548 if(string != strings.back())
1549 {
1550 enumeratorString += '|';
1551 }
1552 }
1553
1554 return enumeratorString;
1555}
1556
1557static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001558bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001559{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001560 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1561 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001562 if(enumerator & (~allFlags))
1563 {
1564 return false;
1565 }
1566
1567 return true;
1568}
1569
1570static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001571std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001572{
1573 if(!ValidateEnumerator(enumerator))
1574 {
1575 return "unrecognized enumerator";
1576 }
1577
1578 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001579 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001580 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001581 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001582 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001583 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001584 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001585 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001586 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001587
1588 std::string enumeratorString;
1589 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001590 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001591 enumeratorString += string;
1592
1593 if(string != strings.back())
1594 {
1595 enumeratorString += '|';
1596 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001597 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001598
1599 return enumeratorString;
1600}
1601
1602static
1603bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1604{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001605 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001606 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001608 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001609 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001610
1611 return true;
1612}
1613
1614static
1615std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1616{
1617 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001618 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001619 return "unrecognized enumerator";
1620 }
1621
1622 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001623 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001624 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001625 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001626 }
1627
1628 std::string enumeratorString;
1629 for(auto const& string : strings)
1630 {
1631 enumeratorString += string;
1632
1633 if(string != strings.back())
1634 {
1635 enumeratorString += '|';
1636 }
1637 }
1638
1639 return enumeratorString;
1640}
1641
1642static
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001643bool ValidateEnumerator(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001644{
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001645 VkCmdBufferUsageFlags allFlags = (VkCmdBufferUsageFlags)(VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1646 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1647 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001648 if(enumerator & (~allFlags))
1649 {
1650 return false;
1651 }
1652
1653 return true;
1654}
1655
1656static
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001657std::string EnumeratorString(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001658{
1659 if(!ValidateEnumerator(enumerator))
1660 {
1661 return "unrecognized enumerator";
1662 }
1663
1664 std::vector<std::string> strings;
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001665 if(enumerator & VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001666 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001667 strings.push_back("VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001668 }
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001669 if(enumerator & VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001670 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001671 strings.push_back("VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001672 }
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001673 if(enumerator & VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001674 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001675 strings.push_back("VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001676 }
1677
1678 std::string enumeratorString;
1679 for(auto const& string : strings)
1680 {
1681 enumeratorString += string;
1682
1683 if(string != strings.back())
1684 {
1685 enumeratorString += '|';
1686 }
1687 }
1688
1689 return enumeratorString;
1690}
1691
1692static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001693bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001694{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001695 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001696 if(enumerator & (~allFlags))
1697 {
1698 return false;
1699 }
1700
1701 return true;
1702}
1703
1704static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001705std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001706{
1707 if(!ValidateEnumerator(enumerator))
1708 {
1709 return "unrecognized enumerator";
1710 }
1711
1712 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001713 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001714 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001715 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001716 }
1717
1718 std::string enumeratorString;
1719 for(auto const& string : strings)
1720 {
1721 enumeratorString += string;
1722
1723 if(string != strings.back())
1724 {
1725 enumeratorString += '|';
1726 }
1727 }
1728
1729 return enumeratorString;
1730}
1731
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001732static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001733bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001734{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001735 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1736 VK_IMAGE_ASPECT_STENCIL_BIT |
1737 VK_IMAGE_ASPECT_DEPTH_BIT |
1738 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001739 if(enumerator & (~allFlags))
1740 {
1741 return false;
1742 }
1743
1744 return true;
1745}
1746
1747static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001748std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001749{
1750 if(!ValidateEnumerator(enumerator))
1751 {
1752 return "unrecognized enumerator";
1753 }
1754
1755 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001756 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001757 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001758 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1759 }
1760 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1761 {
1762 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1763 }
1764 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1765 {
1766 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1767 }
1768 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1769 {
1770 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1771 }
1772
1773 std::string enumeratorString;
1774 for(auto const& string : strings)
1775 {
1776 enumeratorString += string;
1777
1778 if(string != strings.back())
1779 {
1780 enumeratorString += '|';
1781 }
1782 }
1783
1784 return enumeratorString;
1785}
1786
1787static
1788bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1789{
1790 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1791 if(enumerator & (~allFlags))
1792 {
1793 return false;
1794 }
1795
1796 return true;
1797}
1798
1799static
1800std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1801{
1802 if(!ValidateEnumerator(enumerator))
1803 {
1804 return "unrecognized enumerator";
1805 }
1806
1807 std::vector<std::string> strings;
1808 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1809 {
1810 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001811 }
1812
1813 std::string enumeratorString;
1814 for(auto const& string : strings)
1815 {
1816 enumeratorString += string;
1817
1818 if(string != strings.back())
1819 {
1820 enumeratorString += '|';
1821 }
1822 }
1823
1824 return enumeratorString;
1825}
1826
Jeremy Hayes99a96322015-06-26 12:48:09 -06001827VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1828 const VkInstanceCreateInfo* pCreateInfo,
1829 VkInstance* pInstance)
1830{
1831 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
1832 VkResult result = pTable->CreateInstance(pCreateInfo, pInstance);
1833
1834 if (result == VK_SUCCESS) {
1835 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
1836 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->extensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001837 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838
1839 InitParamChecker(data);
1840 }
1841
1842 return result;
1843}
1844
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001845VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001846 VkInstance instance)
1847{
1848 // Grab the key before the instance is destroyed.
1849 dispatch_key key = get_dispatch_key(instance);
1850 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001851 pTable->DestroyInstance(instance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001852
1853 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001854 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1855 while (my_data->logging_callback.size() > 0) {
1856 VkDbgMsgCallback callback = my_data->logging_callback.back();
1857 layer_destroy_msg_callback(my_data->report_data, callback);
1858 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001859 }
1860
1861 layer_debug_report_destroy_instance(mid(instance));
1862 layer_data_map.erase(pTable);
1863
1864 pc_instance_table_map.erase(key);
1865 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001866}
1867
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001868bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001869 VkInstance instance,
1870 uint32_t* pPhysicalDeviceCount,
1871 VkPhysicalDevice* pPhysicalDevices,
1872 VkResult result)
1873{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001875 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001876 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001877 }
1878
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001879 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001881 }
1882
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001883 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884 {
1885 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001886 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1887 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001888 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001889
1890 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891}
1892
1893VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1894 VkInstance instance,
1895 uint32_t* pPhysicalDeviceCount,
1896 VkPhysicalDevice* pPhysicalDevices)
1897{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001898 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1899
1900 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1901
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001902 return result;
1903}
1904
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001905bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001907 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001908{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001909
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001910 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001911 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001912 }
1913
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001914 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001915}
1916
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001917VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001918 VkPhysicalDevice physicalDevice,
1919 VkPhysicalDeviceFeatures* pFeatures)
1920{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001921 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001922
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001923 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001924}
1925
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001926bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001927 VkPhysicalDevice physicalDevice,
1928 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001929 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001930{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001931
1932 if(format < VK_FORMAT_BEGIN_RANGE ||
1933 format > VK_FORMAT_END_RANGE)
1934 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001935 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001936 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001937 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001938 }
1939
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001940 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001941 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001942 }
1943
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001944 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001945}
1946
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001947VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001948 VkPhysicalDevice physicalDevice,
1949 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001950 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001951{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001952 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001953
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001954 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001955}
1956
1957bool PostGetPhysicalDeviceImageFormatProperties(
1958 VkPhysicalDevice physicalDevice,
1959 VkFormat format,
1960 VkImageType type,
1961 VkImageTiling tiling,
1962 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001963 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001964 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001965{
1966
1967 if(format < VK_FORMAT_BEGIN_RANGE ||
1968 format > VK_FORMAT_END_RANGE)
1969 {
1970 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1971 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1972 return false;
1973 }
1974
1975 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1976 type > VK_IMAGE_TYPE_END_RANGE)
1977 {
1978 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1979 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1980 return false;
1981 }
1982
1983 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1984 tiling > VK_IMAGE_TILING_END_RANGE)
1985 {
1986 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1987 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1988 return false;
1989 }
1990
1991
1992 if(pImageFormatProperties != nullptr)
1993 {
1994 }
1995
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001996 return true;
1997}
1998
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001999VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002000 VkPhysicalDevice physicalDevice,
2001 VkFormat format,
2002 VkImageType type,
2003 VkImageTiling tiling,
2004 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06002005 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002006 VkImageFormatProperties* pImageFormatProperties)
2007{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002008 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002009
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002010 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002011}
2012
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002013bool PostGetPhysicalDeviceProperties(
2014 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002015 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002016{
2017
2018 if(pProperties != nullptr)
2019 {
2020 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
2021 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
2022 {
2023 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
2024 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
2025 return false;
2026 }
2027 }
2028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 return true;
2030}
2031
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002032VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033 VkPhysicalDevice physicalDevice,
2034 VkPhysicalDeviceProperties* pProperties)
2035{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002036 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002037
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002038 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002039}
2040
Cody Northropd0802882015-08-03 17:04:53 -06002041bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002042 VkPhysicalDevice physicalDevice,
2043 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002045{
2046
Cody Northropd0802882015-08-03 17:04:53 -06002047 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002048 {
2049 }
2050
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002051 if(pQueueProperties != nullptr)
2052 {
2053 }
2054
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002055 return true;
2056}
2057
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06002058VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002059 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002060 uint32_t* pCount,
2061 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002062{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002063 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002064
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002065 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002066}
2067
2068bool PostGetPhysicalDeviceMemoryProperties(
2069 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002070 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002071{
2072
2073 if(pMemoryProperties != nullptr)
2074 {
2075 }
2076
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002077 return true;
2078}
2079
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002080VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002081 VkPhysicalDevice physicalDevice,
2082 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2083{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002084 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002085
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002086 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002087}
2088
Jeremy Hayes99a96322015-06-26 12:48:09 -06002089VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2090 VkPhysicalDevice physicalDevice,
2091 const VkDeviceCreateInfo* pCreateInfo,
2092 VkDevice* pDevice)
2093{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002094 /*
2095 * NOTE: The loader fills in the ICD's device object in *pDevice.
2096 * Use that object to get the dispatch table.
2097 *
2098 * NOTE: We do not validate physicalDevice or any dispatchable
2099 * object as the first parameter. We couldn't get here if it was wrong!
2100 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002101 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002102 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pDevice);
2103 if(result == VK_SUCCESS)
2104 {
2105 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2106 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2107 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2108 }
2109
2110 return result;
2111}
2112
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002113VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002114 VkDevice device)
2115{
2116 layer_debug_report_destroy_device(device);
2117
2118 dispatch_key key = get_dispatch_key(device);
2119#if DISPATCH_MAP_DEBUG
2120 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2121#endif
2122
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002123 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002124 pc_device_table_map.erase(key);
2125 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126}
2127
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002128bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002130 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002131 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002132 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002133{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002134
2135
2136
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002137 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002138 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002139 }
2140
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002141 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002142}
2143
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002144VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002146 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002147 uint32_t queueIndex,
2148 VkQueue* pQueue)
2149{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002150 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002152 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002153}
2154
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002155bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002156 VkQueue queue,
2157 const VkCmdBuffer* pCmdBuffers)
2158{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002159 if(pCmdBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002160 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002164}
2165
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002166bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002167 VkQueue queue,
2168 uint32_t cmdBufferCount,
2169 VkFence fence,
2170 VkResult result)
2171{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002172
2173
Jeremy Hayes99a96322015-06-26 12:48:09 -06002174
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002175 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 {
2177 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002178 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002181
2182 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002183}
2184
2185VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2186 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002187 uint32_t submitCount,
2188 const VkSubmitInfo* pSubmitInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189 VkFence fence)
2190{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002191 for (uint32_t i = 0; i < submitCount; i++) {
2192 PreQueueSubmit(queue, pSubmitInfo[i].pCommandBuffers);
2193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002194
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002195 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmitInfo, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002197 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198
2199 return result;
2200}
2201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002202bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002203 VkQueue queue,
2204 VkResult result)
2205{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002207 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002208 {
2209 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002210 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2211 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002212 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002213
2214 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215}
2216
2217VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2218 VkQueue queue)
2219{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2221
2222 PostQueueWaitIdle(queue, result);
2223
2224 return result;
2225}
2226
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002227bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228 VkDevice device,
2229 VkResult result)
2230{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002231
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002232 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 {
2234 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2236 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002237 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002238
2239 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240}
2241
2242VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2243 VkDevice device)
2244{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2246
2247 PostDeviceWaitIdle(device, result);
2248
2249 return result;
2250}
2251
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002252bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002253 VkDevice device,
2254 const VkMemoryAllocInfo* pAllocInfo)
2255{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002256 if(pAllocInfo != nullptr)
2257 {
2258 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002259 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002260 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002261 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002262 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002263 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002265
2266 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002267}
2268
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002269bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270 VkDevice device,
2271 VkDeviceMemory* pMem,
2272 VkResult result)
2273{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002275 if(pMem != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002276 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002277 }
2278
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002279 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 {
2281 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2283 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002284 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002285
2286 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002287}
2288
2289VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2290 VkDevice device,
2291 const VkMemoryAllocInfo* pAllocInfo,
2292 VkDeviceMemory* pMem)
2293{
2294 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002295
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pMem);
2297
2298 PostAllocMemory(device, pMem, result);
2299
2300 return result;
2301}
2302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002303bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 VkDevice device,
2305 VkDeviceMemory mem,
2306 VkDeviceSize offset,
2307 VkDeviceSize size,
2308 VkMemoryMapFlags flags,
2309 void** ppData,
2310 VkResult result)
2311{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313
2314
2315
2316
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002317 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 }
2320
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002321 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002322 {
2323 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2325 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002327
2328 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002329}
2330
2331VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2332 VkDevice device,
2333 VkDeviceMemory mem,
2334 VkDeviceSize offset,
2335 VkDeviceSize size,
2336 VkMemoryMapFlags flags,
2337 void** ppData)
2338{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002339 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2340
2341 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2342
2343 return result;
2344}
2345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002346bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347 VkDevice device,
2348 const VkMappedMemoryRange* pMemRanges)
2349{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002350 if(pMemRanges != nullptr)
2351 {
2352 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002353 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002354 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002355 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357 }
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
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002363bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002364 VkDevice device,
2365 uint32_t memRangeCount,
2366 VkResult result)
2367{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368
2369
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002370 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002371 {
2372 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002376
2377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378}
2379
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002380VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 VkDevice device,
2382 uint32_t memRangeCount,
2383 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002384{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002385 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002388
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2390
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002391 return result;
2392}
2393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002394bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395 VkDevice device,
2396 const VkMappedMemoryRange* pMemRanges)
2397{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002398 if(pMemRanges != nullptr)
2399 {
2400 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002403 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002404 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002405 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002406 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002407
2408 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002409}
2410
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002411bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002412 VkDevice device,
2413 uint32_t memRangeCount,
2414 VkResult result)
2415{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416
2417
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002418 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 {
2420 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2422 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002424
2425 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426}
2427
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002428VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002429 VkDevice device,
2430 uint32_t memRangeCount,
2431 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002432{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002433 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002434
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002436
Jeremy Hayes99a96322015-06-26 12:48:09 -06002437 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2438
Tony Barbourb1250542015-04-16 19:23:13 -06002439 return result;
2440}
2441
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002442bool PostGetDeviceMemoryCommitment(
2443 VkDevice device,
2444 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002445 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002446{
2447
2448
2449 if(pCommittedMemoryInBytes != nullptr)
2450 {
2451 }
2452
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002453 return true;
2454}
2455
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002456VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002457 VkDevice device,
2458 VkDeviceMemory memory,
2459 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002460{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002461 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002462
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002463 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002464}
2465
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002466bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002467 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002468 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469 VkDeviceMemory mem,
2470 VkDeviceSize memOffset,
2471 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002472{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002473
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002474
Jeremy Hayes99a96322015-06-26 12:48:09 -06002475
2476
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002477 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002479 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2480 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2481 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002482 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002483
2484 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002485}
2486
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002487VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002488 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002489 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002490 VkDeviceMemory mem,
2491 VkDeviceSize memOffset)
2492{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002493 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002496
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002497 return result;
2498}
2499
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002501 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002502 VkImage image,
2503 VkDeviceMemory mem,
2504 VkDeviceSize memOffset,
2505 VkResult result)
2506{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002507
2508
2509
2510
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002511 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002512 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002513 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2514 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2515 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002516 }
2517
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002518 return true;
2519}
2520
2521VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2522 VkDevice device,
2523 VkImage image,
2524 VkDeviceMemory mem,
2525 VkDeviceSize memOffset)
2526{
2527 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2528
2529 PostBindImageMemory(device, image, mem, memOffset, result);
2530
2531 return result;
2532}
2533
2534bool PostGetBufferMemoryRequirements(
2535 VkDevice device,
2536 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002537 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002538{
2539
2540
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002541 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002542 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002543 }
2544
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002545 return true;
2546}
2547
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002548VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002549 VkDevice device,
2550 VkBuffer buffer,
2551 VkMemoryRequirements* pMemoryRequirements)
2552{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002553 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002554
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002555 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002556}
2557
2558bool PostGetImageMemoryRequirements(
2559 VkDevice device,
2560 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002561 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002562{
2563
2564
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002565 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002566 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567 }
2568
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569 return true;
2570}
2571
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002572VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002573 VkDevice device,
2574 VkImage image,
2575 VkMemoryRequirements* pMemoryRequirements)
2576{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002577 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002579 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580}
2581
2582bool PostGetImageSparseMemoryRequirements(
2583 VkDevice device,
2584 VkImage image,
2585 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002586 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002587{
2588
2589
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002590 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002591 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592 }
2593
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002594 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002596 if ((pSparseMemoryRequirements->formatProps.aspect &
2597 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002598 {
2599 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002600 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProps.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002601 return false;
2602 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002603 }
2604
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return true;
2606}
2607
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002608VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 VkDevice device,
2610 VkImage image,
2611 uint32_t* pNumRequirements,
2612 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2613{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002614 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002615
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002616 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002617}
2618
2619bool PostGetPhysicalDeviceSparseImageFormatProperties(
2620 VkPhysicalDevice physicalDevice,
2621 VkFormat format,
2622 VkImageType type,
2623 uint32_t samples,
2624 VkImageUsageFlags usage,
2625 VkImageTiling tiling,
2626 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002627 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002628{
2629
2630 if(format < VK_FORMAT_BEGIN_RANGE ||
2631 format > VK_FORMAT_END_RANGE)
2632 {
2633 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002634 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635 return false;
2636 }
2637
2638 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2639 type > VK_IMAGE_TYPE_END_RANGE)
2640 {
2641 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002642 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643 return false;
2644 }
2645
2646
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647
2648 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2649 tiling > VK_IMAGE_TILING_END_RANGE)
2650 {
2651 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002652 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002653 return false;
2654 }
2655
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002656 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002657 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 }
2659
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002660 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002661 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002662 if ((pProperties->aspect &
2663 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 {
2665 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002666 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002667 return false;
2668 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002669 }
2670
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002671 return true;
2672}
2673
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002674VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675 VkPhysicalDevice physicalDevice,
2676 VkFormat format,
2677 VkImageType type,
2678 uint32_t samples,
2679 VkImageUsageFlags usage,
2680 VkImageTiling tiling,
2681 uint32_t* pNumProperties,
2682 VkSparseImageFormatProperties* pProperties)
2683{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002684 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002685
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002686 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687}
2688
2689bool PreQueueBindSparseBufferMemory(
2690 VkQueue queue,
2691 const VkSparseMemoryBindInfo* pBindInfo)
2692{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002693 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002694 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002695 }
2696
2697 return true;
2698}
2699
2700bool PostQueueBindSparseBufferMemory(
2701 VkQueue queue,
2702 VkBuffer buffer,
2703 uint32_t numBindings,
2704 VkResult result)
2705{
2706
2707
2708
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002709 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002710 {
2711 std::string reason = "vkQueueBindSparseBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2712 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2713 return false;
2714 }
2715
2716 return true;
2717}
2718
2719VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseBufferMemory(
2720 VkQueue queue,
2721 VkBuffer buffer,
2722 uint32_t numBindings,
2723 const VkSparseMemoryBindInfo* pBindInfo)
2724{
2725 PreQueueBindSparseBufferMemory(queue, pBindInfo);
2726
2727 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseBufferMemory(queue, buffer, numBindings, pBindInfo);
2728
2729 PostQueueBindSparseBufferMemory(queue, buffer, numBindings, result);
2730
2731 return result;
2732}
2733
2734bool PreQueueBindSparseImageOpaqueMemory(
2735 VkQueue queue,
2736 const VkSparseMemoryBindInfo* pBindInfo)
2737{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002738 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002739 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002740 }
2741
2742 return true;
2743}
2744
2745bool PostQueueBindSparseImageOpaqueMemory(
2746 VkQueue queue,
2747 VkImage image,
2748 uint32_t numBindings,
2749 VkResult result)
2750{
2751
2752
2753
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002754 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002755 {
2756 std::string reason = "vkQueueBindSparseImageOpaqueMemory parameter, VkResult result, is " + EnumeratorString(result);
2757 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2758 return false;
2759 }
2760
2761 return true;
2762}
2763
2764VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageOpaqueMemory(
2765 VkQueue queue,
2766 VkImage image,
2767 uint32_t numBindings,
2768 const VkSparseMemoryBindInfo* pBindInfo)
2769{
2770 PreQueueBindSparseImageOpaqueMemory(queue, pBindInfo);
2771
2772 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageOpaqueMemory(queue, image, numBindings, pBindInfo);
2773
2774 PostQueueBindSparseImageOpaqueMemory(queue, image, numBindings, result);
2775
2776 return result;
2777}
2778
2779bool PreQueueBindSparseImageMemory(
2780 VkQueue queue,
2781 const VkSparseImageMemoryBindInfo* pBindInfo)
2782{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002783 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002784 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002785 if ((pBindInfo->subresource.aspect &
2786 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002787 {
2788 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002789 "vkQueueBindSparseImageMemory parameter, VkImageAspect pBindInfo->subresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002790 return false;
2791 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002792 }
2793
2794 return true;
2795}
2796
2797bool PostQueueBindSparseImageMemory(
2798 VkQueue queue,
2799 VkImage image,
2800 uint32_t numBindings,
2801 VkResult result)
2802{
2803
2804
Jeremy Hayes99a96322015-06-26 12:48:09 -06002805
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002806 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002807 {
2808 std::string reason = "vkQueueBindSparseImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002809 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2810 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002811 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002812
2813 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814}
2815
2816VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparseImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002817 VkQueue queue,
2818 VkImage image,
2819 uint32_t numBindings,
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002820 const VkSparseImageMemoryBindInfo* pBindInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821{
2822 PreQueueBindSparseImageMemory(queue, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002823
Mark Lobodzinski16e8bef2015-07-03 15:58:09 -06002824 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparseImageMemory(queue, image, numBindings, pBindInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002826 PostQueueBindSparseImageMemory(queue, image, numBindings, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002827
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002828 return result;
2829}
2830
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002831bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002832 VkDevice device,
2833 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002834{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002835 if(pCreateInfo != nullptr)
2836 {
2837 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002838 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002840 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002841 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002842 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002843 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002844
2845 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002846}
2847
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002848bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002849 VkDevice device,
2850 VkFence* pFence,
2851 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002852{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002853
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002854 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002855 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002856 }
2857
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002858 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002859 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002860 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2862 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002863 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002864
2865 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002866}
2867
2868VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2869 VkDevice device,
2870 const VkFenceCreateInfo* pCreateInfo,
2871 VkFence* pFence)
2872{
2873 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002874
Jeremy Hayes99a96322015-06-26 12:48:09 -06002875 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pFence);
2876
2877 PostCreateFence(device, pFence, result);
2878
2879 return result;
2880}
2881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002882bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 VkDevice device,
2884 const VkFence* pFences)
2885{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002886 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002887 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002888 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002889
2890 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891}
2892
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002893bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002894 VkDevice device,
2895 uint32_t fenceCount,
2896 VkResult result)
2897{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898
2899
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002900 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002901 {
2902 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2904 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002905 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002906
2907 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002908}
2909
2910VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2911 VkDevice device,
2912 uint32_t fenceCount,
2913 const VkFence* pFences)
2914{
2915 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002916
Jeremy Hayes99a96322015-06-26 12:48:09 -06002917 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2918
2919 PostResetFences(device, fenceCount, result);
2920
2921 return result;
2922}
2923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002924bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925 VkDevice device,
2926 VkFence fence,
2927 VkResult result)
2928{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002929
Jeremy Hayes99a96322015-06-26 12:48:09 -06002930
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002931 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932 {
2933 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2935 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002937
2938 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002939}
2940
2941VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2942 VkDevice device,
2943 VkFence fence)
2944{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2946
2947 PostGetFenceStatus(device, fence, result);
2948
2949 return result;
2950}
2951
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002952bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 VkDevice device,
2954 const VkFence* pFences)
2955{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002956 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002957 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002958 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002959
2960 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002961}
2962
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002963bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002964 VkDevice device,
2965 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002966 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002967 uint64_t timeout,
2968 VkResult result)
2969{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970
2971
2972
2973
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002974 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002975 {
2976 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2978 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002980
2981 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002982}
2983
2984VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2985 VkDevice device,
2986 uint32_t fenceCount,
2987 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002988 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002989 uint64_t timeout)
2990{
2991 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002992
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2994
2995 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2996
2997 return result;
2998}
2999
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003000bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001 VkDevice device,
3002 const VkSemaphoreCreateInfo* pCreateInfo)
3003{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003004 if(pCreateInfo != nullptr)
3005 {
3006 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003009 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003010 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003011 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003013
3014 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003015}
3016
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003017bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003018 VkDevice device,
3019 VkSemaphore* pSemaphore,
3020 VkResult result)
3021{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003023 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 }
3026
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003027 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 {
3029 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3031 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003032 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003033
3034 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035}
3036
3037VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
3038 VkDevice device,
3039 const VkSemaphoreCreateInfo* pCreateInfo,
3040 VkSemaphore* pSemaphore)
3041{
3042 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003043
Jeremy Hayes99a96322015-06-26 12:48:09 -06003044 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pSemaphore);
3045
3046 PostCreateSemaphore(device, pSemaphore, result);
3047
3048 return result;
3049}
3050
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003051bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003052 VkDevice device,
3053 const VkEventCreateInfo* pCreateInfo)
3054{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003055 if(pCreateInfo != nullptr)
3056 {
3057 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003059 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003060 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003061 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003062 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003063 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003064
3065 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003066}
3067
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003068bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069 VkDevice device,
3070 VkEvent* pEvent,
3071 VkResult result)
3072{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003074 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 }
3077
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003078 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079 {
3080 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003081 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3082 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003084
3085 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003086}
3087
3088VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3089 VkDevice device,
3090 const VkEventCreateInfo* pCreateInfo,
3091 VkEvent* pEvent)
3092{
3093 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003094
Jeremy Hayes99a96322015-06-26 12:48:09 -06003095 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3096
3097 PostCreateEvent(device, pEvent, result);
3098
3099 return result;
3100}
3101
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003102bool PostGetEventStatus(
3103 VkDevice device,
3104 VkEvent event,
3105 VkResult result)
3106{
3107
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003109 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 {
3111 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3113 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115
3116 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003117}
3118
3119VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
3120 VkDevice device,
3121 VkEvent event)
3122{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003123 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
3124
3125 PostGetEventStatus(device, event, result);
3126
3127 return result;
3128}
3129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 VkDevice device,
3132 VkEvent event,
3133 VkResult result)
3134{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003137 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138 {
3139 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3141 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003143
3144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003145}
3146
3147VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3148 VkDevice device,
3149 VkEvent event)
3150{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3152
3153 PostSetEvent(device, event, result);
3154
3155 return result;
3156}
3157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003158bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003159 VkDevice device,
3160 VkEvent event,
3161 VkResult result)
3162{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163
Jeremy Hayes99a96322015-06-26 12:48:09 -06003164
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003165 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 {
3167 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003168 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3169 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003171
3172 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173}
3174
3175VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3176 VkDevice device,
3177 VkEvent event)
3178{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3180
3181 PostResetEvent(device, event, result);
3182
3183 return result;
3184}
3185
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003186bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 VkDevice device,
3188 const VkQueryPoolCreateInfo* pCreateInfo)
3189{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003190 if(pCreateInfo != nullptr)
3191 {
3192 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003195 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003196 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 }
3198 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3199 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3200 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003201 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003202 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003203 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003205 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206
3207 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208}
3209
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003210bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003211 VkDevice device,
3212 VkQueryPool* pQueryPool,
3213 VkResult result)
3214{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003216 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003217 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003218 }
3219
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003220 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 {
3222 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3224 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003226
3227 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003228}
3229
3230VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3231 VkDevice device,
3232 const VkQueryPoolCreateInfo* pCreateInfo,
3233 VkQueryPool* pQueryPool)
3234{
3235 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236
Jeremy Hayes99a96322015-06-26 12:48:09 -06003237 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3238
3239 PostCreateQueryPool(device, pQueryPool, result);
3240
3241 return result;
3242}
3243
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003244bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 VkDevice device,
3246 VkQueryPool queryPool,
3247 uint32_t startQuery,
3248 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003249 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003251 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003252 VkQueryResultFlags flags,
3253 VkResult result)
3254{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003255
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256
3257
3258
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003259 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261 }
3262
Jeremy Hayes99a96322015-06-26 12:48:09 -06003263
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003264 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003265 {
3266 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3268 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003270
3271 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003272}
3273
3274VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3275 VkDevice device,
3276 VkQueryPool queryPool,
3277 uint32_t startQuery,
3278 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003279 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003281 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 VkQueryResultFlags flags)
3283{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003284 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003285
Chia-I Wuccc93a72015-10-26 18:36:20 +08003286 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003287
3288 return result;
3289}
3290
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003291bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 VkDevice device,
3293 const VkBufferCreateInfo* pCreateInfo)
3294{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003295 if(pCreateInfo != nullptr)
3296 {
3297 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003299 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003300 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003301 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003302 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003303 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3304 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003306 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003307 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003308 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003309 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003310 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003311 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003313 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003314
3315 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316}
3317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003318bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319 VkDevice device,
3320 VkBuffer* pBuffer,
3321 VkResult result)
3322{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003323
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003324 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003326 }
3327
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003328 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 {
3330 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003331 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3332 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003334
3335 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003336}
3337
3338VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3339 VkDevice device,
3340 const VkBufferCreateInfo* pCreateInfo,
3341 VkBuffer* pBuffer)
3342{
3343 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003344
Jeremy Hayes99a96322015-06-26 12:48:09 -06003345 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3346
3347 PostCreateBuffer(device, pBuffer, result);
3348
3349 return result;
3350}
3351
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003352bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003353 VkDevice device,
3354 const VkBufferViewCreateInfo* pCreateInfo)
3355{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003356 if(pCreateInfo != nullptr)
3357 {
3358 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003361 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003362 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003363 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003364 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3365 pCreateInfo->format > VK_FORMAT_END_RANGE)
3366 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003368 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003369 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003370 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003371 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003372
3373 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003374}
3375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003376bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003377 VkDevice device,
3378 VkBufferView* pView,
3379 VkResult result)
3380{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003382 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384 }
3385
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003386 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 {
3388 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3390 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003391 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003392
3393 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003394}
3395
3396VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3397 VkDevice device,
3398 const VkBufferViewCreateInfo* pCreateInfo,
3399 VkBufferView* pView)
3400{
3401 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003402
Jeremy Hayes99a96322015-06-26 12:48:09 -06003403 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3404
3405 PostCreateBufferView(device, pView, result);
3406
3407 return result;
3408}
3409
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003410bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003411 VkDevice device,
3412 const VkImageCreateInfo* pCreateInfo)
3413{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003414 if(pCreateInfo != nullptr)
3415 {
3416 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003418 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003419 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003420 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003421 }
3422 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3423 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3424 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003426 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003427 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003428 }
3429 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3430 pCreateInfo->format > VK_FORMAT_END_RANGE)
3431 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003433 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003435 }
3436 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3437 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3438 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003440 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003441 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003442 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003443 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3444 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3447 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003449 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003450 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003451 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003452 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003453 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003454
3455 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003456}
3457
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003458bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459 VkDevice device,
3460 VkImage* pImage,
3461 VkResult result)
3462{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003463
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003464 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003465 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003466 }
3467
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003468 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003469 {
3470 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3472 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003473 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003474
3475 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003476}
3477
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3479 VkDevice device,
3480 const VkImageCreateInfo* pCreateInfo,
3481 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003482{
3483 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003484
Jeremy Hayes99a96322015-06-26 12:48:09 -06003485 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3486
3487 PostCreateImage(device, pImage, result);
3488
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003489 return result;
3490}
3491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003492bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003493 VkDevice device,
3494 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003495{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003496 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003497 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003498 if ((pSubresource->aspect &
3499 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003500 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003501 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003502 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003503 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003504 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003505 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003506
3507 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003508}
3509
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003510bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003511 VkDevice device,
3512 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003513 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003514{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515
Jeremy Hayes99a96322015-06-26 12:48:09 -06003516
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003517 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003518 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003519 }
3520
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003521 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003522}
3523
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003524VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003525 VkDevice device,
3526 VkImage image,
3527 const VkImageSubresource* pSubresource,
3528 VkSubresourceLayout* pLayout)
3529{
3530 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003531
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003532 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003533
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003534 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003535}
3536
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003537bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003538 VkDevice device,
3539 const VkImageViewCreateInfo* pCreateInfo)
3540{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003541 if(pCreateInfo != nullptr)
3542 {
3543 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003544 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003545 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003546 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003547 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548 }
3549 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3550 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3551 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003552 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003553 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003554 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003555 }
3556 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3557 pCreateInfo->format > VK_FORMAT_END_RANGE)
3558 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003559 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003560 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003561 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003562 }
3563 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3564 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3565 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003567 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003569 }
3570 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3571 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3572 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 }
3577 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3578 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3579 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003581 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003582 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
3584 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3585 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3586 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003588 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003589 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003590 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003591 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003592
3593 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003594}
3595
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003596bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597 VkDevice device,
3598 VkImageView* pView,
3599 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003600{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003601
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003603 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003604 }
3605
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003606 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003607 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003608 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3610 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003611 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003612
3613 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003614}
3615
3616VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3617 VkDevice device,
3618 const VkImageViewCreateInfo* pCreateInfo,
3619 VkImageView* pView)
3620{
3621 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003622
Jeremy Hayes99a96322015-06-26 12:48:09 -06003623 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3624
3625 PostCreateImageView(device, pView, result);
3626
3627 return result;
3628}
3629
Michael Lentine03d8e572015-09-15 14:59:14 -05003630bool PreCreateShaderModule(
3631 VkDevice device,
3632 const VkShaderModuleCreateInfo* pCreateInfo)
3633{
3634 if(pCreateInfo) {
3635 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3637 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3638 return false;
3639 }
3640 if(!pCreateInfo->pCode) {
3641 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3642 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3643 return false;
3644 }
3645 } else {
3646 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3647 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3648 return false;
3649 }
3650
3651 return true;
3652}
3653
3654bool PostCreateShaderModule(
3655 VkDevice device,
3656 VkShaderModule* pShaderModule,
3657 VkResult result)
3658{
3659 if(result < VK_SUCCESS) {
3660 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3661 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3662 return false;
3663 }
3664
3665 return true;
3666}
3667
3668VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3669 VkDevice device,
3670 const VkShaderModuleCreateInfo* pCreateInfo,
3671 VkShaderModule* pShaderModule)
3672{
3673 PreCreateShaderModule(device, pCreateInfo);
3674 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3675 PostCreateShaderModule(device, pShaderModule, result);
3676 return result;
3677}
3678
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003679bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003680 VkDevice device,
3681 const VkShaderCreateInfo* pCreateInfo)
3682{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003683 if(pCreateInfo != nullptr)
3684 {
3685 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003686 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003687 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003688 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003689 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003690 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003691 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003692 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003693 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003694 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003695
3696 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003697}
3698
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003699bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003700 VkDevice device,
3701 VkShader* pShader,
3702 VkResult result)
3703{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003704
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003705 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003706 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003707 }
3708
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003709 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003710 {
3711 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3713 return false;
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
3719VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3720 VkDevice device,
3721 const VkShaderCreateInfo* pCreateInfo,
3722 VkShader* pShader)
3723{
3724 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003725
Jeremy Hayes99a96322015-06-26 12:48:09 -06003726 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3727
3728 PostCreateShader(device, pShader, result);
3729
3730 return result;
3731}
3732
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003733bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003734 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003735 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003736{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003737 if(pCreateInfo != nullptr)
3738 {
3739 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003740 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003741 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003742 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003743 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003744 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003745 if(pCreateInfo->initialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003746 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003747 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003748 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003749
3750 return true;
3751}
3752
3753bool PostCreatePipelineCache(
3754 VkDevice device,
3755 VkPipelineCache* pPipelineCache,
3756 VkResult result)
3757{
3758
3759 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003760 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003761 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003762
3763 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003764 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3767 return false;
3768 }
3769
3770 return true;
3771}
3772
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003773VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003774 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003775 const VkPipelineCacheCreateInfo* pCreateInfo,
3776 VkPipelineCache* pPipelineCache)
3777{
3778 PreCreatePipelineCache(device, pCreateInfo);
3779
3780 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3781
3782 PostCreatePipelineCache(device, pPipelineCache, result);
3783
3784 return result;
3785}
3786
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003787bool PostGetPipelineCacheData(
3788 VkDevice device,
3789 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003790 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 void* pData,
3792 VkResult result)
3793{
3794
3795
Chia-I Wub16facd2015-10-26 19:17:06 +08003796 if(pDataSize != nullptr)
3797 {
3798 }
3799
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003800 if(pData != nullptr)
3801 {
3802 }
3803
3804 if(result < VK_SUCCESS)
3805 {
3806 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3808 return false;
3809 }
3810
3811 return true;
3812}
3813
3814VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3815 VkDevice device,
3816 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003817 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003818 void* pData)
3819{
Chia-I Wub16facd2015-10-26 19:17:06 +08003820 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003821
Chia-I Wub16facd2015-10-26 19:17:06 +08003822 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003823
3824 return result;
3825}
3826
3827bool PreMergePipelineCaches(
3828 VkDevice device,
3829 const VkPipelineCache* pSrcCaches)
3830{
3831 if(pSrcCaches != nullptr)
3832 {
3833 }
3834
3835 return true;
3836}
3837
3838bool PostMergePipelineCaches(
3839 VkDevice device,
3840 VkPipelineCache destCache,
3841 uint32_t srcCacheCount,
3842 VkResult result)
3843{
3844
3845
3846
3847 if(result < VK_SUCCESS)
3848 {
3849 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3850 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3851 return false;
3852 }
3853
3854 return true;
3855}
3856
3857VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3858 VkDevice device,
3859 VkPipelineCache destCache,
3860 uint32_t srcCacheCount,
3861 const VkPipelineCache* pSrcCaches)
3862{
3863 PreMergePipelineCaches(device, pSrcCaches);
3864
3865 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3866
3867 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3868
3869 return result;
3870}
3871
3872bool PreCreateGraphicsPipelines(
3873 VkDevice device,
3874 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3875{
3876 if(pCreateInfos != nullptr)
3877 {
3878 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3879 {
3880 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3881 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3882 return false;
3883 }
3884 if(pCreateInfos->pStages != nullptr)
3885 {
3886 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3887 {
3888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3889 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3890 return false;
3891 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003892 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3893 {
3894 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3895 {
3896 }
3897 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3898 {
3899 }
3900 }
3901 }
3902 if(pCreateInfos->pVertexInputState != nullptr)
3903 {
3904 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3905 {
3906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3907 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3908 return false;
3909 }
3910 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3911 {
3912 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3913 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3914 {
3915 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3916 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3917 return false;
3918 }
3919 }
3920 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3921 {
3922 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3923 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3924 {
3925 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3926 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3927 return false;
3928 }
3929 }
3930 }
3931 if(pCreateInfos->pInputAssemblyState != nullptr)
3932 {
3933 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3934 {
3935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3936 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3937 return false;
3938 }
3939 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3940 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3941 {
3942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3943 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3944 return false;
3945 }
3946 }
3947 if(pCreateInfos->pTessellationState != nullptr)
3948 {
3949 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3950 {
3951 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3952 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3953 return false;
3954 }
3955 }
3956 if(pCreateInfos->pViewportState != nullptr)
3957 {
3958 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3959 {
3960 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3961 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3962 return false;
3963 }
3964 }
3965 if(pCreateInfos->pRasterState != nullptr)
3966 {
3967 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
3968 {
3969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3970 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
3971 return false;
3972 }
3973 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
3974 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
3975 {
3976 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3977 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
3978 return false;
3979 }
3980 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
3981 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
3982 {
3983 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3984 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
3985 return false;
3986 }
3987 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3988 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
3989 {
3990 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3991 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
3992 return false;
3993 }
3994 }
3995 if(pCreateInfos->pMultisampleState != nullptr)
3996 {
3997 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3998 {
3999 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4000 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4001 return false;
4002 }
4003 }
4004 if(pCreateInfos->pDepthStencilState != nullptr)
4005 {
4006 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4007 {
4008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4009 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4010 return false;
4011 }
4012 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4013 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4014 {
4015 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4016 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4017 return false;
4018 }
4019 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4020 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4021 {
4022 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4023 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4024 return false;
4025 }
4026 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4027 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4028 {
4029 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4030 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4031 return false;
4032 }
4033 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4034 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4035 {
4036 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4037 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4038 return false;
4039 }
4040 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4041 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4042 {
4043 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4044 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4045 return false;
4046 }
4047 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4048 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4049 {
4050 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4051 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4052 return false;
4053 }
4054 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4055 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4056 {
4057 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4058 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4059 return false;
4060 }
4061 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4062 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4063 {
4064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4065 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4066 return false;
4067 }
4068 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4069 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4070 {
4071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4072 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4073 return false;
4074 }
4075 }
4076 if(pCreateInfos->pColorBlendState != nullptr)
4077 {
4078 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4079 {
4080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4082 return false;
4083 }
Michael Lentine304b01f2015-10-06 14:55:54 -07004084 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4085 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004086 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4087 {
4088 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4089 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4090 return false;
4091 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05004092 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093 {
4094 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4095 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4096 {
4097 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4098 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4099 return false;
4100 }
4101 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4102 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4103 {
4104 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4105 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4106 return false;
4107 }
4108 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4109 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4110 {
4111 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4112 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4113 return false;
4114 }
4115 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4116 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4117 {
4118 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4119 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4120 return false;
4121 }
4122 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4123 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4124 {
4125 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4126 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4127 return false;
4128 }
4129 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4130 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4131 {
4132 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4133 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4134 return false;
4135 }
4136 }
4137 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004138 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4139 {
4140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4141 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4142 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004143 }
4144
4145 return true;
4146}
4147
4148bool PostCreateGraphicsPipelines(
4149 VkDevice device,
4150 VkPipelineCache pipelineCache,
4151 uint32_t count,
4152 VkPipeline* pPipelines,
4153 VkResult result)
4154{
4155
4156
4157
4158 if(pPipelines != nullptr)
4159 {
4160 }
4161
4162 if(result < VK_SUCCESS)
4163 {
4164 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4165 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4166 return false;
4167 }
4168
4169 return true;
4170}
4171
4172VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4173 VkDevice device,
4174 VkPipelineCache pipelineCache,
4175 uint32_t count,
4176 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4177 VkPipeline* pPipelines)
4178{
4179 PreCreateGraphicsPipelines(device, pCreateInfos);
4180
4181 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4182
4183 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4184
4185 return result;
4186}
4187
4188bool PreCreateComputePipelines(
4189 VkDevice device,
4190 const VkComputePipelineCreateInfo* pCreateInfos)
4191{
4192 if(pCreateInfos != nullptr)
4193 {
4194 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4195 {
4196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4197 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4198 return false;
4199 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004200 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004201 {
4202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4203 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4204 return false;
4205 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004206 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004207 {
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004208 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004209 {
4210 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004211 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004212 {
4213 }
4214 }
4215 }
4216
4217 return true;
4218}
4219
4220bool PostCreateComputePipelines(
4221 VkDevice device,
4222 VkPipelineCache pipelineCache,
4223 uint32_t count,
4224 VkPipeline* pPipelines,
4225 VkResult result)
4226{
4227
4228
4229
4230 if(pPipelines != nullptr)
4231 {
4232 }
4233
4234 if(result < VK_SUCCESS)
4235 {
4236 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4237 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4238 return false;
4239 }
4240
4241 return true;
4242}
4243
4244VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4245 VkDevice device,
4246 VkPipelineCache pipelineCache,
4247 uint32_t count,
4248 const VkComputePipelineCreateInfo* pCreateInfos,
4249 VkPipeline* pPipelines)
4250{
4251 PreCreateComputePipelines(device, pCreateInfos);
4252
4253 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4254
4255 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4256
4257 return result;
4258}
4259
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004260bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 VkDevice device,
4262 const VkPipelineLayoutCreateInfo* pCreateInfo)
4263{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004264 if(pCreateInfo != nullptr)
4265 {
4266 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004267 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004269 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4270 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004272 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004273 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004275 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004276 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004278 }
4279
4280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281}
4282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004283bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004284 VkDevice device,
4285 VkPipelineLayout* pPipelineLayout,
4286 VkResult result)
4287{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004289 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004290 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004291 }
4292
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004293 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004294 {
4295 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004296 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4297 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004298 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004299
4300 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004301}
4302
4303VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4304 VkDevice device,
4305 const VkPipelineLayoutCreateInfo* pCreateInfo,
4306 VkPipelineLayout* pPipelineLayout)
4307{
4308 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004309
Jeremy Hayes99a96322015-06-26 12:48:09 -06004310 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4311
4312 PostCreatePipelineLayout(device, pPipelineLayout, result);
4313
4314 return result;
4315}
4316
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004317bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 VkDevice device,
4319 const VkSamplerCreateInfo* pCreateInfo)
4320{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004321 if(pCreateInfo != nullptr)
4322 {
4323 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004325 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004326 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004328 }
4329 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4330 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4331 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004333 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004334 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 }
4336 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4337 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4338 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004339 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004340 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004341 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 }
4343 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4344 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4345 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004347 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004348 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004349 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004350 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4351 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004352 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004354 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004355 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004356 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004357 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4358 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004360 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004361 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004362 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004363 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004364 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4365 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004367 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004368 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004369 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004370 }
4371 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4372 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4373 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004374 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004375 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004376 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004377 }
4378 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4379 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4380 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004381 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004382 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004383 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004385 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004386
4387 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388}
4389
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004390bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 VkDevice device,
4392 VkSampler* pSampler,
4393 VkResult result)
4394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004395
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004396 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004397 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398 }
4399
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004400 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401 {
4402 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004403 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4404 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004406
4407 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408}
4409
4410VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4411 VkDevice device,
4412 const VkSamplerCreateInfo* pCreateInfo,
4413 VkSampler* pSampler)
4414{
4415 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416
Jeremy Hayes99a96322015-06-26 12:48:09 -06004417 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4418
4419 PostCreateSampler(device, pSampler, result);
4420
4421 return result;
4422}
4423
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004424bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425 VkDevice device,
4426 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4427{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004428 if(pCreateInfo != nullptr)
4429 {
4430 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004432 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004433 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004435 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004436 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004437 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004438 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4439 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4440 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004441 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004442 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004445 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004447 }
4448 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004450
4451 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004452}
4453
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004454bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004455 VkDevice device,
4456 VkDescriptorSetLayout* pSetLayout,
4457 VkResult result)
4458{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004460 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004461 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004462 }
4463
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004464 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465 {
4466 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004467 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4468 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004469 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004470
4471 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004472}
4473
4474VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4475 VkDevice device,
4476 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4477 VkDescriptorSetLayout* pSetLayout)
4478{
4479 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004480
Jeremy Hayes99a96322015-06-26 12:48:09 -06004481 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4482
4483 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4484
4485 return result;
4486}
4487
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004488bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489 VkDevice device,
4490 const VkDescriptorPoolCreateInfo* pCreateInfo)
4491{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004492 if(pCreateInfo != nullptr)
4493 {
4494 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004495 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004497 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004498 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004500 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004501 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004502 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4503 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4504 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004505 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004506 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004507 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004508 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004509 }
4510 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004511
4512 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004513}
4514
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004515bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004516 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004517 uint32_t maxSets,
4518 VkDescriptorPool* pDescriptorPool,
4519 VkResult result)
4520{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004522 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004524 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 }
4527
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004528 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004529 {
4530 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004531 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4532 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004533 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004534
4535 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536}
4537
4538VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4539 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004540 const VkDescriptorPoolCreateInfo* pCreateInfo,
4541 VkDescriptorPool* pDescriptorPool)
4542{
4543 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004544
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004545 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004546
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004547 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548
4549 return result;
4550}
4551
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004552bool PostResetDescriptorPool(
4553 VkDevice device,
4554 VkDescriptorPool descriptorPool,
4555 VkResult result)
4556{
4557
Jeremy Hayes99a96322015-06-26 12:48:09 -06004558
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004559 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004560 {
4561 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004562 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4563 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004564 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004565
4566 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004567}
4568
4569VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4570 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004571 VkDescriptorPool descriptorPool,
4572 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004573{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004574 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004575
4576 PostResetDescriptorPool(device, descriptorPool, result);
4577
4578 return result;
4579}
4580
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004581bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004582 VkDevice device,
4583 const VkDescriptorSetLayout* pSetLayouts)
4584{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004585 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004586 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004587 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004588
4589 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004590}
4591
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004592bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004593 VkDevice device,
4594 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004595 uint32_t count,
4596 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004597 VkResult result)
4598{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004599
Jeremy Hayes99a96322015-06-26 12:48:09 -06004600
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004601 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004602 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004603 }
4604
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004605 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004606 {
4607 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4609 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004610 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004611
4612 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004613}
4614
4615VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4616 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004617 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004618 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004619{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004620 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004621
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004622 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004623
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004624 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->count, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004625
4626 return result;
4627}
4628
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004629bool PreFreeDescriptorSets(
4630 VkDevice device,
4631 const VkDescriptorSet* pDescriptorSets)
4632{
4633 if(pDescriptorSets != nullptr)
4634 {
4635 }
4636
4637 return true;
4638}
4639
4640bool PostFreeDescriptorSets(
4641 VkDevice device,
4642 VkDescriptorPool descriptorPool,
4643 uint32_t count,
4644 VkResult result)
4645{
4646
4647
4648
4649 if(result < VK_SUCCESS)
4650 {
4651 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4652 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4653 return false;
4654 }
4655
4656 return true;
4657}
4658
4659VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4660 VkDevice device,
4661 VkDescriptorPool descriptorPool,
4662 uint32_t count,
4663 const VkDescriptorSet* pDescriptorSets)
4664{
4665 PreFreeDescriptorSets(device, pDescriptorSets);
4666
4667 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4668
4669 PostFreeDescriptorSets(device, descriptorPool, count, result);
4670
4671 return result;
4672}
4673
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004674bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004675 VkDevice device,
4676 const VkWriteDescriptorSet* pDescriptorWrites,
4677 const VkCopyDescriptorSet* pDescriptorCopies)
4678{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004679 if(pDescriptorWrites != nullptr)
4680 {
4681 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004682 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004684 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004685 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004686 }
4687 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4688 pDescriptorWrites->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 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004692 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004693 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004694 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4695 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4696 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004697 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004698 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4699 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004700 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004702 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004703 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004704 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004705 }
4706 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004707
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 if(pDescriptorCopies != nullptr)
4709 {
4710 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004711 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004712 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004714 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004715 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004716 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004717
4718 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004719}
4720
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004721VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004722 VkDevice device,
4723 uint32_t writeCount,
4724 const VkWriteDescriptorSet* pDescriptorWrites,
4725 uint32_t copyCount,
4726 const VkCopyDescriptorSet* pDescriptorCopies)
4727{
4728 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004729
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004730 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004731}
4732
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004733bool PreCreateFramebuffer(
4734 VkDevice device,
4735 const VkFramebufferCreateInfo* pCreateInfo)
4736{
4737 if(pCreateInfo != nullptr)
4738 {
4739 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4740 {
4741 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4742 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4743 return false;
4744 }
4745 if(pCreateInfo->pAttachments != nullptr)
4746 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004747 }
4748 }
4749
4750 return true;
4751}
4752
4753bool PostCreateFramebuffer(
4754 VkDevice device,
4755 VkFramebuffer* pFramebuffer,
4756 VkResult result)
4757{
4758
4759 if(pFramebuffer != nullptr)
4760 {
4761 }
4762
4763 if(result < VK_SUCCESS)
4764 {
4765 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4767 return false;
4768 }
4769
4770 return true;
4771}
4772
4773VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4774 VkDevice device,
4775 const VkFramebufferCreateInfo* pCreateInfo,
4776 VkFramebuffer* pFramebuffer)
4777{
4778 PreCreateFramebuffer(device, pCreateInfo);
4779
4780 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4781
4782 PostCreateFramebuffer(device, pFramebuffer, result);
4783
4784 return result;
4785}
4786
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004787bool PreCreateRenderPass(
4788 VkDevice device,
4789 const VkRenderPassCreateInfo* pCreateInfo)
4790{
4791 if(pCreateInfo != nullptr)
4792 {
4793 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4794 {
4795 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4796 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4797 return false;
4798 }
4799 if(pCreateInfo->pAttachments != nullptr)
4800 {
4801 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4802 {
4803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4804 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4805 return false;
4806 }
4807 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4808 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4809 {
4810 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4811 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4812 return false;
4813 }
4814 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4815 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4816 {
4817 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4818 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4819 return false;
4820 }
4821 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4822 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4823 {
4824 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4825 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4826 return false;
4827 }
4828 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4829 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4830 {
4831 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4832 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4833 return false;
4834 }
4835 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4836 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4837 {
4838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4839 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4840 return false;
4841 }
4842 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4843 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4844 {
4845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4846 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4847 return false;
4848 }
4849 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4850 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4851 {
4852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4853 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4854 return false;
4855 }
4856 }
4857 if(pCreateInfo->pSubpasses != nullptr)
4858 {
4859 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4860 {
4861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4862 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4863 return false;
4864 }
4865 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4866 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4867 {
4868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4869 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4870 return false;
4871 }
Cody Northropa505dda2015-08-04 11:16:41 -06004872 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873 {
Cody Northropa505dda2015-08-04 11:16:41 -06004874 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4875 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004876 {
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004878 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004879 return false;
4880 }
4881 }
Cody Northropa505dda2015-08-04 11:16:41 -06004882 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004883 {
Cody Northropa505dda2015-08-04 11:16:41 -06004884 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4885 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004886 {
4887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004888 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004889 return false;
4890 }
4891 }
Cody Northropa505dda2015-08-04 11:16:41 -06004892 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004893 {
Cody Northropa505dda2015-08-04 11:16:41 -06004894 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4895 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004896 {
4897 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004898 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899 return false;
4900 }
4901 }
4902 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4903 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
4904 {
4905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4906 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
4907 return false;
4908 }
Cody Northropa505dda2015-08-04 11:16:41 -06004909 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004910 {
Cody Northropa505dda2015-08-04 11:16:41 -06004911 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4912 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004913 {
4914 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004915 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004916 return false;
4917 }
4918 }
4919 }
4920 if(pCreateInfo->pDependencies != nullptr)
4921 {
4922 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
4923 {
4924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4925 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
4926 return false;
4927 }
4928 }
4929 }
4930
4931 return true;
4932}
4933
4934bool PostCreateRenderPass(
4935 VkDevice device,
4936 VkRenderPass* pRenderPass,
4937 VkResult result)
4938{
4939
4940 if(pRenderPass != nullptr)
4941 {
4942 }
4943
4944 if(result < VK_SUCCESS)
4945 {
4946 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4948 return false;
4949 }
4950
4951 return true;
4952}
4953
4954VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4955 VkDevice device,
4956 const VkRenderPassCreateInfo* pCreateInfo,
4957 VkRenderPass* pRenderPass)
4958{
4959 PreCreateRenderPass(device, pCreateInfo);
4960
4961 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
4962
4963 PostCreateRenderPass(device, pRenderPass, result);
4964
4965 return result;
4966}
4967
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004968bool PostGetRenderAreaGranularity(
4969 VkDevice device,
4970 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004971 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004972{
4973
4974
4975 if(pGranularity != nullptr)
4976 {
4977 }
4978
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004979 return true;
4980}
4981
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004982VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004983 VkDevice device,
4984 VkRenderPass renderPass,
4985 VkExtent2D* pGranularity)
4986{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004987 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004988
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004989 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004990}
4991
4992bool PreCreateCommandPool(
4993 VkDevice device,
4994 const VkCmdPoolCreateInfo* pCreateInfo)
4995{
4996 if(pCreateInfo != nullptr)
4997 {
4998 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
4999 {
5000 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5001 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5002 return false;
5003 }
5004 }
5005
5006 return true;
5007}
5008
5009bool PostCreateCommandPool(
5010 VkDevice device,
5011 VkCmdPool* pCmdPool,
5012 VkResult result)
5013{
5014
5015 if(pCmdPool != nullptr)
5016 {
5017 }
5018
5019 if(result < VK_SUCCESS)
5020 {
5021 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5022 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5023 return false;
5024 }
5025
5026 return true;
5027}
5028
5029VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5030 VkDevice device,
5031 const VkCmdPoolCreateInfo* pCreateInfo,
5032 VkCmdPool* pCmdPool)
5033{
5034 PreCreateCommandPool(device, pCreateInfo);
5035
5036 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5037
5038 PostCreateCommandPool(device, pCmdPool, result);
5039
5040 return result;
5041}
5042
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005043bool PostResetCommandPool(
5044 VkDevice device,
5045 VkCmdPool cmdPool,
5046 VkCmdPoolResetFlags flags,
5047 VkResult result)
5048{
5049
5050
5051
5052 if(result < VK_SUCCESS)
5053 {
5054 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5056 return false;
5057 }
5058
5059 return true;
5060}
5061
5062VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5063 VkDevice device,
5064 VkCmdPool cmdPool,
5065 VkCmdPoolResetFlags flags)
5066{
5067 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5068
5069 PostResetCommandPool(device, cmdPool, flags, result);
5070
5071 return result;
5072}
5073
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005074bool PreCreateCommandBuffer(
5075 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005076 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005077{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005078 if(pCreateInfo != nullptr)
5079 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005080 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005081 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005082 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005083 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005084 return false;
5085 }
5086 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5087 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5088 {
5089 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005090 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005091 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005092 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005093 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005094
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005095 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005096}
5097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005098bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005099 VkDevice device,
5100 VkCmdBuffer* pCmdBuffer,
5101 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005102{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005103
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005104 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005105 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005106 }
5107
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005108 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005109 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005110 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005111 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5112 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005113 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005114
5115 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005116}
5117
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005118VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005119 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005120 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005121 VkCmdBuffer* pCmdBuffer)
5122{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123 PreCreateCommandBuffer(device, pCreateInfo);
5124
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005125 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005126
5127 PostCreateCommandBuffer(device, pCmdBuffer, result);
5128
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005129 return result;
5130}
5131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005132bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005133 VkCmdBuffer cmdBuffer,
5134 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005135{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005136 if(pBeginInfo != nullptr)
5137 {
5138 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005141 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005142 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005143 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145
5146 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005147}
5148
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005149bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005150 VkCmdBuffer cmdBuffer,
5151 VkResult result)
5152{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005153
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005154 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005155 {
5156 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005157 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5158 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005159 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005160
5161 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005162}
5163
5164VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5165 VkCmdBuffer cmdBuffer,
5166 const VkCmdBufferBeginInfo* pBeginInfo)
5167{
5168 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005169
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5171
5172 PostBeginCommandBuffer(cmdBuffer, result);
5173
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005174 return result;
5175}
5176
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005177bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005178 VkCmdBuffer cmdBuffer,
5179 VkResult result)
5180{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005181
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005182 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183 {
5184 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005185 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005187 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188
5189 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005190}
5191
5192VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5193 VkCmdBuffer cmdBuffer)
5194{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5196
5197 PostEndCommandBuffer(cmdBuffer, result);
5198
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005199 return result;
5200}
5201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005202bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005203 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005204 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005205 VkResult result)
5206{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005208
5209 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005210 {
5211 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005212 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5213 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005214 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005215
5216 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005217}
5218
5219VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005220 VkCmdBuffer cmdBuffer,
5221 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005223 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005225 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005227 return result;
5228}
5229
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005230bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 VkCmdBuffer cmdBuffer,
5232 VkPipelineBindPoint pipelineBindPoint,
5233 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235
5236 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5237 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5238 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005239 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005240 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005241 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005242 }
5243
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005244
5245 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005246}
5247
Jeremy Hayes99a96322015-06-26 12:48:09 -06005248VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5249 VkCmdBuffer cmdBuffer,
5250 VkPipelineBindPoint pipelineBindPoint,
5251 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005252{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5254
5255 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5256}
5257
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005258VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005259{
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005260 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5261}
5262
5263VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5264{
5265 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005266}
5267
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005268VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005270 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005271}
5272
Chia-I Wud8c946a2015-10-26 19:08:09 +08005273VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005274{
Chia-I Wud8c946a2015-10-26 19:08:09 +08005275 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005276}
5277
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005278VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005279{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005280 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northrop12365112015-08-17 11:10:49 -06005281}
5282
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005283VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005284{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005285 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005286}
5287
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005288VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005289{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005290 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005291}
5292
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005293VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005294{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005295 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005296}
5297
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005298VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005299{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005300 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005301}
5302
5303bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005304 VkCmdBuffer cmdBuffer,
5305 const VkDescriptorSet* pDescriptorSets,
5306 const uint32_t* pDynamicOffsets)
5307{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005308 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005311
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005312 if(pDynamicOffsets != nullptr)
5313 {
5314 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005315
5316 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317}
5318
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005319bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005320 VkCmdBuffer cmdBuffer,
5321 VkPipelineBindPoint pipelineBindPoint,
5322 VkPipelineLayout layout,
5323 uint32_t firstSet,
5324 uint32_t setCount,
5325 uint32_t dynamicOffsetCount)
5326{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005327
5328 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5329 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5330 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005331 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005332 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005333 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005334 }
5335
5336
5337
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005338
5339
5340 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005341}
5342
5343VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5344 VkCmdBuffer cmdBuffer,
5345 VkPipelineBindPoint pipelineBindPoint,
5346 VkPipelineLayout layout,
5347 uint32_t firstSet,
5348 uint32_t setCount,
5349 const VkDescriptorSet* pDescriptorSets,
5350 uint32_t dynamicOffsetCount,
5351 const uint32_t* pDynamicOffsets)
5352{
5353 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005354
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5356
5357 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5358}
5359
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005360bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005361 VkCmdBuffer cmdBuffer,
5362 VkBuffer buffer,
5363 VkDeviceSize offset,
5364 VkIndexType indexType)
5365{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005366
Jeremy Hayes99a96322015-06-26 12:48:09 -06005367
5368
5369 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5370 indexType > VK_INDEX_TYPE_END_RANGE)
5371 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005372 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005373 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005376
5377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005378}
5379
5380VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5381 VkCmdBuffer cmdBuffer,
5382 VkBuffer buffer,
5383 VkDeviceSize offset,
5384 VkIndexType indexType)
5385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5387
5388 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5389}
5390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005391bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392 VkCmdBuffer cmdBuffer,
5393 const VkBuffer* pBuffers,
5394 const VkDeviceSize* pOffsets)
5395{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005396 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005397 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398 }
5399
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005400 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005402 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005403
5404 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005405}
5406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005407bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005408 VkCmdBuffer cmdBuffer,
5409 uint32_t startBinding,
5410 uint32_t bindingCount)
5411{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005412
5413
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005414
5415 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005416}
5417
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005418VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005419 VkCmdBuffer cmdBuffer,
5420 uint32_t startBinding,
5421 uint32_t bindingCount,
5422 const VkBuffer* pBuffers,
5423 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005424{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005426
Jeremy Hayes99a96322015-06-26 12:48:09 -06005427 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5428
5429 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005430}
5431
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005432bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005433 VkCmdBuffer cmdBuffer,
5434 uint32_t firstVertex,
5435 uint32_t vertexCount,
5436 uint32_t firstInstance,
5437 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005438{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005439
5440
5441
5442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005443
5444 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005445}
5446
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5448 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005449 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005450 uint32_t instanceCount,
5451 uint32_t firstVertex,
5452 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005453{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005454 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005455
5456 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005457}
5458
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005459bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 VkCmdBuffer cmdBuffer,
5461 uint32_t firstIndex,
5462 uint32_t indexCount,
5463 int32_t vertexOffset,
5464 uint32_t firstInstance,
5465 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005466{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467
5468
5469
5470
5471
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005472
5473 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005474}
5475
Jeremy Hayes99a96322015-06-26 12:48:09 -06005476VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5477 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005479 uint32_t instanceCount,
5480 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005481 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005482 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005483{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005484 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005485
5486 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5487}
5488
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005489bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 VkCmdBuffer cmdBuffer,
5491 VkBuffer buffer,
5492 VkDeviceSize offset,
5493 uint32_t count,
5494 uint32_t stride)
5495{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005496
5497
5498
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005499
5500
5501 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502}
5503
5504VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5505 VkCmdBuffer cmdBuffer,
5506 VkBuffer buffer,
5507 VkDeviceSize offset,
5508 uint32_t count,
5509 uint32_t stride)
5510{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005511 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5512
5513 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5514}
5515
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005516bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005517 VkCmdBuffer cmdBuffer,
5518 VkBuffer buffer,
5519 VkDeviceSize offset,
5520 uint32_t count,
5521 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005522{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523
5524
5525
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005526
5527
5528 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005529}
5530
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5532 VkCmdBuffer cmdBuffer,
5533 VkBuffer buffer,
5534 VkDeviceSize offset,
5535 uint32_t count,
5536 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005537{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5539
5540 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5541}
5542
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005543bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005544 VkCmdBuffer cmdBuffer,
5545 uint32_t x,
5546 uint32_t y,
5547 uint32_t z)
5548{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549
5550
5551
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005552
5553 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005554}
5555
5556VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5557 VkCmdBuffer cmdBuffer,
5558 uint32_t x,
5559 uint32_t y,
5560 uint32_t z)
5561{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5563
5564 PostCmdDispatch(cmdBuffer, x, y, z);
5565}
5566
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005567bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005568 VkCmdBuffer cmdBuffer,
5569 VkBuffer buffer,
5570 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005571{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005572
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005574
5575 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005576}
5577
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5579 VkCmdBuffer cmdBuffer,
5580 VkBuffer buffer,
5581 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005582{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5584
5585 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005586}
5587
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589 VkCmdBuffer cmdBuffer,
5590 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005591{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005592 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005595
5596 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597}
5598
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005599bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005600 VkCmdBuffer cmdBuffer,
5601 VkBuffer srcBuffer,
5602 VkBuffer destBuffer,
5603 uint32_t regionCount)
5604{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005605
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606
Jeremy Hayes99a96322015-06-26 12:48:09 -06005607
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005608
5609 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610}
5611
5612VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5613 VkCmdBuffer cmdBuffer,
5614 VkBuffer srcBuffer,
5615 VkBuffer destBuffer,
5616 uint32_t regionCount,
5617 const VkBufferCopy* pRegions)
5618{
5619 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005620
Jeremy Hayes99a96322015-06-26 12:48:09 -06005621 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5622
5623 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5624}
5625
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005627 VkCmdBuffer cmdBuffer,
5628 const VkImageCopy* pRegions)
5629{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005630 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005631 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005632 if ((pRegions->srcSubresource.aspect &
5633 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005635 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005636 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005637 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005638 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005639 if ((pRegions->destSubresource.aspect &
5640 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005642 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005643 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005644 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005646 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005647
5648 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649}
5650
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005651bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005652 VkCmdBuffer cmdBuffer,
5653 VkImage srcImage,
5654 VkImageLayout srcImageLayout,
5655 VkImage destImage,
5656 VkImageLayout destImageLayout,
5657 uint32_t regionCount)
5658{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005659
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660
5661 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5662 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5663 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005664 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005665 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005666 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667 }
5668
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669
5670 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5671 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5672 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005673 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005674 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005675 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676 }
5677
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005678
5679 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680}
5681
5682VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5683 VkCmdBuffer cmdBuffer,
5684 VkImage srcImage,
5685 VkImageLayout srcImageLayout,
5686 VkImage destImage,
5687 VkImageLayout destImageLayout,
5688 uint32_t regionCount,
5689 const VkImageCopy* pRegions)
5690{
5691 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005692
Jeremy Hayes99a96322015-06-26 12:48:09 -06005693 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5694
5695 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5696}
5697
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005698bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005699 VkCmdBuffer cmdBuffer,
5700 const VkImageBlit* pRegions)
5701{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005702 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005703 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005704 if ((pRegions->srcSubresource.aspect &
5705 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005707 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005708 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005710 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005711 if ((pRegions->destSubresource.aspect &
5712 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005714 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005715 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005716 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005717 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005718 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005719
5720 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721}
5722
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005723bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724 VkCmdBuffer cmdBuffer,
5725 VkImage srcImage,
5726 VkImageLayout srcImageLayout,
5727 VkImage destImage,
5728 VkImageLayout destImageLayout,
5729 uint32_t regionCount,
5730 VkTexFilter filter)
5731{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733
5734 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5735 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5736 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005737 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005738 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005739 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005740 }
5741
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742
5743 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5744 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5745 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005746 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005747 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005748 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005749 }
5750
5751
5752 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5753 filter > VK_TEX_FILTER_END_RANGE)
5754 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005755 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005756 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005757 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005759
5760 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761}
5762
5763VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5764 VkCmdBuffer cmdBuffer,
5765 VkImage srcImage,
5766 VkImageLayout srcImageLayout,
5767 VkImage destImage,
5768 VkImageLayout destImageLayout,
5769 uint32_t regionCount,
5770 const VkImageBlit* pRegions,
5771 VkTexFilter filter)
5772{
5773 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005774
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5776
5777 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5778}
5779
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005780bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005781 VkCmdBuffer cmdBuffer,
5782 const VkBufferImageCopy* pRegions)
5783{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005784 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005786 if ((pRegions->imageSubresource.aspect &
5787 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005788 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005789 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005790 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005793 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005794
5795 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796}
5797
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005798bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799 VkCmdBuffer cmdBuffer,
5800 VkBuffer srcBuffer,
5801 VkImage destImage,
5802 VkImageLayout destImageLayout,
5803 uint32_t regionCount)
5804{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005805
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807
5808 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5809 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5810 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005811 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005812 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005813 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814 }
5815
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005816
5817 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005818}
5819
5820VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5821 VkCmdBuffer cmdBuffer,
5822 VkBuffer srcBuffer,
5823 VkImage destImage,
5824 VkImageLayout destImageLayout,
5825 uint32_t regionCount,
5826 const VkBufferImageCopy* pRegions)
5827{
5828 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005829
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5831
5832 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5833}
5834
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005835bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836 VkCmdBuffer cmdBuffer,
5837 const VkBufferImageCopy* pRegions)
5838{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005839 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005841 if ((pRegions->imageSubresource.aspect &
5842 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005844 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005845 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005846 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005848 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005849
5850 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005851}
5852
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005853bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005854 VkCmdBuffer cmdBuffer,
5855 VkImage srcImage,
5856 VkImageLayout srcImageLayout,
5857 VkBuffer destBuffer,
5858 uint32_t regionCount)
5859{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005860
Jeremy Hayes99a96322015-06-26 12:48:09 -06005861
5862 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5863 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5864 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005865 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005866 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005867 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868 }
5869
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005871
5872 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873}
5874
5875VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5876 VkCmdBuffer cmdBuffer,
5877 VkImage srcImage,
5878 VkImageLayout srcImageLayout,
5879 VkBuffer destBuffer,
5880 uint32_t regionCount,
5881 const VkBufferImageCopy* pRegions)
5882{
5883 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005884
Jeremy Hayes99a96322015-06-26 12:48:09 -06005885 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5886
5887 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5888}
5889
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005891 VkCmdBuffer cmdBuffer,
5892 const uint32_t* pData)
5893{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005894 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005896 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005897
5898 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005899}
5900
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005902 VkCmdBuffer cmdBuffer,
5903 VkBuffer destBuffer,
5904 VkDeviceSize destOffset,
5905 VkDeviceSize dataSize)
5906{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907
5908
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005909
5910
5911 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005912}
5913
5914VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
5915 VkCmdBuffer cmdBuffer,
5916 VkBuffer destBuffer,
5917 VkDeviceSize destOffset,
5918 VkDeviceSize dataSize,
5919 const uint32_t* pData)
5920{
5921 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005922
Jeremy Hayes99a96322015-06-26 12:48:09 -06005923 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
5924
5925 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
5926}
5927
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005928bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005929 VkCmdBuffer cmdBuffer,
5930 VkBuffer destBuffer,
5931 VkDeviceSize destOffset,
5932 VkDeviceSize fillSize,
5933 uint32_t data)
5934{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935
5936
5937
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005938
5939
5940 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005941}
5942
5943VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
5944 VkCmdBuffer cmdBuffer,
5945 VkBuffer destBuffer,
5946 VkDeviceSize destOffset,
5947 VkDeviceSize fillSize,
5948 uint32_t data)
5949{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005950 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
5951
5952 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
5953}
5954
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005955bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005956 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005957 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005958 const VkImageSubresourceRange* pRanges)
5959{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005960 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005962 }
5963
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005964 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005966 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005967 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005968
5969 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970}
5971
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005972bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973 VkCmdBuffer cmdBuffer,
5974 VkImage image,
5975 VkImageLayout imageLayout,
5976 uint32_t rangeCount)
5977{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979
5980 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5981 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5982 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005984 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005985 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986 }
5987
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005988
5989 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990}
5991
5992VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
5993 VkCmdBuffer cmdBuffer,
5994 VkImage image,
5995 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005996 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997 uint32_t rangeCount,
5998 const VkImageSubresourceRange* pRanges)
5999{
6000 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006001
Jeremy Hayes99a96322015-06-26 12:48:09 -06006002 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6003
6004 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6005}
6006
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006007bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006008 VkCmdBuffer cmdBuffer,
6009 const VkImageSubresourceRange* pRanges)
6010{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006011 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006013 /*
6014 * TODO: How do we validation pRanges->aspectMask?
6015 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6016 * VK_IMAGE_ASPECT_STENCIL_BIT.
6017 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006018 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006019
6020 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006021}
6022
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006023bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024 VkCmdBuffer cmdBuffer,
6025 VkImage image,
6026 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006027 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028 uint32_t rangeCount)
6029{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030
Jeremy Hayes99a96322015-06-26 12:48:09 -06006031
6032 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6033 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6034 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006035 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006036 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006037 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038 }
6039
6040
6041
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006042
6043 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044}
6045
Chris Forbesd9be82b2015-06-22 17:21:59 +12006046VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047 VkCmdBuffer cmdBuffer,
6048 VkImage image,
6049 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006050 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 uint32_t rangeCount,
6052 const VkImageSubresourceRange* pRanges)
6053{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006054 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006055
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006056 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006057
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006058 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059}
6060
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006061bool PreCmdClearAttachments(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006062 VkCmdBuffer cmdBuffer,
6063 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006064 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006065{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006066 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006067 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006068 }
6069
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006070 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006071 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006072 }
6073
6074 return true;
6075}
6076
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006077VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6078 VkCmdBuffer cmdBuffer,
6079 uint32_t attachmentCount,
6080 const VkClearAttachment* pAttachments,
6081 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006082 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006083{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006084 for (uint32_t i = 0; i < attachmentCount; i++) {
6085 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086 }
6087
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006088 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006089}
6090
6091bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006092 VkCmdBuffer cmdBuffer,
6093 const VkImageResolve* pRegions)
6094{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006095 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006096 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006097 if ((pRegions->srcSubresource.aspect &
6098 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006100 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006101 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006102 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006104 if ((pRegions->destSubresource.aspect &
6105 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006106 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006107 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006108 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006111 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006112
6113 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006114}
6115
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006116bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006117 VkCmdBuffer cmdBuffer,
6118 VkImage srcImage,
6119 VkImageLayout srcImageLayout,
6120 VkImage destImage,
6121 VkImageLayout destImageLayout,
6122 uint32_t regionCount)
6123{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125
6126 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6127 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6128 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006129 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006130 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006131 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006132 }
6133
Jeremy Hayes99a96322015-06-26 12:48:09 -06006134
6135 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6136 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6137 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006138 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006139 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006140 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141 }
6142
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006143
6144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006145}
6146
6147VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6148 VkCmdBuffer cmdBuffer,
6149 VkImage srcImage,
6150 VkImageLayout srcImageLayout,
6151 VkImage destImage,
6152 VkImageLayout destImageLayout,
6153 uint32_t regionCount,
6154 const VkImageResolve* pRegions)
6155{
6156 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006157
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6159
6160 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6161}
6162
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006163bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164 VkCmdBuffer cmdBuffer,
6165 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006166 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006167{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006170
6171 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006172}
6173
6174VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6175 VkCmdBuffer cmdBuffer,
6176 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006177 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006179 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006180
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006181 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182}
6183
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006184bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006185 VkCmdBuffer cmdBuffer,
6186 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006187 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189
Jeremy Hayes99a96322015-06-26 12:48:09 -06006190
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006191
6192 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193}
6194
6195VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6196 VkCmdBuffer cmdBuffer,
6197 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006198 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006199{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006200 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006202 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203}
6204
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006206 VkCmdBuffer cmdBuffer,
6207 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006208 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006209{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006210 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006212 }
6213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006214 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006215 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006217
6218 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006219}
6220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006221bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006224 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006225 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006226 uint32_t memBarrierCount)
6227{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006229
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230
6231
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006232
6233 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006234}
6235
6236VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6237 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238 uint32_t eventCount,
6239 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006240 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006241 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006242 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006243 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006244{
6245 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006246
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006247 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006248
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006249 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250}
6251
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006252bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006253 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006254 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006256 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006259
6260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261}
6262
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006263bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006265 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006266 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006267 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268 uint32_t memBarrierCount)
6269{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006271
Jeremy Hayes99a96322015-06-26 12:48:09 -06006272
6273
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006274
6275 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006276}
6277
6278VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6279 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006280 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006281 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006282 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006284 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006285{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006286 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006287
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006288 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006290 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006291}
6292
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006293bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294 VkCmdBuffer cmdBuffer,
6295 VkQueryPool queryPool,
6296 uint32_t slot,
6297 VkQueryControlFlags flags)
6298{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006299
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300
6301
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006302
6303 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304}
6305
6306VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6307 VkCmdBuffer cmdBuffer,
6308 VkQueryPool queryPool,
6309 uint32_t slot,
6310 VkQueryControlFlags flags)
6311{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006312 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6313
6314 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6315}
6316
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006317bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006318 VkCmdBuffer cmdBuffer,
6319 VkQueryPool queryPool,
6320 uint32_t slot)
6321{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006322
Jeremy Hayes99a96322015-06-26 12:48:09 -06006323
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006324
6325 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006326}
6327
6328VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6329 VkCmdBuffer cmdBuffer,
6330 VkQueryPool queryPool,
6331 uint32_t slot)
6332{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006333 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6334
6335 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6336}
6337
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006338bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006339 VkCmdBuffer cmdBuffer,
6340 VkQueryPool queryPool,
6341 uint32_t startQuery,
6342 uint32_t queryCount)
6343{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006344
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006345
6346
6347
6348 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006349}
6350
6351VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6352 VkCmdBuffer cmdBuffer,
6353 VkQueryPool queryPool,
6354 uint32_t startQuery,
6355 uint32_t queryCount)
6356{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006357 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6358
6359 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6360}
6361
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006362bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006363 VkCmdBuffer cmdBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006364 VkPipelineStageFlagBits pipelineStage,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006365 VkBuffer destBuffer,
6366 VkDeviceSize destOffset)
6367{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006368
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006369 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370
6371 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006372}
6373
6374VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6375 VkCmdBuffer cmdBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006376 VkPipelineStageFlagBits pipelineStage,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006377 VkBuffer destBuffer,
6378 VkDeviceSize destOffset)
6379{
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006380 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006381
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006382 PostCmdWriteTimestamp(cmdBuffer, pipelineStage, destBuffer, destOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006383}
6384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006386 VkCmdBuffer cmdBuffer,
6387 VkQueryPool queryPool,
6388 uint32_t startQuery,
6389 uint32_t queryCount,
6390 VkBuffer destBuffer,
6391 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006392 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006393 VkQueryResultFlags flags)
6394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006395
6396
6397
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006398
Jeremy Hayes99a96322015-06-26 12:48:09 -06006399
6400
6401
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006402
6403 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006404}
6405
Jeremy Hayesad367152015-04-17 10:36:53 -06006406VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006407 VkCmdBuffer cmdBuffer,
6408 VkQueryPool queryPool,
6409 uint32_t startQuery,
6410 uint32_t queryCount,
6411 VkBuffer destBuffer,
6412 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006413 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006414 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006415{
Chia-I Wuccc93a72015-10-26 18:36:20 +08006416 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006417
Chia-I Wuccc93a72015-10-26 18:36:20 +08006418 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006419}
6420
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006421bool PreCmdPushConstants(
6422 VkCmdBuffer cmdBuffer,
6423 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006425 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006426 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006427 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006428
6429 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430}
6431
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006432bool PostCmdPushConstants(
6433 VkCmdBuffer cmdBuffer,
6434 VkPipelineLayout layout,
6435 VkShaderStageFlags stageFlags,
6436 uint32_t start,
6437 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006438{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006439
Jeremy Hayes99a96322015-06-26 12:48:09 -06006440
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006441
6442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006443
6444 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006445}
6446
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006447VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6448 VkCmdBuffer cmdBuffer,
6449 VkPipelineLayout layout,
6450 VkShaderStageFlags stageFlags,
6451 uint32_t start,
6452 uint32_t length,
6453 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006455 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006456
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006457 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006459 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006460}
6461
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006462bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006463 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006464 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006465{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006466 if(pRenderPassBegin != nullptr)
6467 {
6468 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006470 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006471 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006472 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006473 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006474 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006476 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006477 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006478
6479 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006480}
6481
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006482bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006483 VkCmdBuffer cmdBuffer,
6484 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006485{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006486
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006487 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6488 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6489 {
6490 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6491 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6492 return false;
6493 }
6494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006495 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006496}
6497
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6499 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006500 const VkRenderPassBeginInfo* pRenderPassBegin,
6501 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006502{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006503 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6504
Chia-I Wu08accc62015-07-07 11:50:03 +08006505 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006507 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006508}
6509
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006510bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006511 VkCmdBuffer cmdBuffer,
6512 VkRenderPassContents contents)
6513{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006514
6515 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006516 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006517 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006518 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006519 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6520 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006521 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006522
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006523 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006524}
6525
6526VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6527 VkCmdBuffer cmdBuffer,
6528 VkRenderPassContents contents)
6529{
Chia-I Wu08accc62015-07-07 11:50:03 +08006530 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6531
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006532 PostCmdNextSubpass(cmdBuffer, contents);
6533}
6534
6535bool PostCmdEndRenderPass(
6536 VkCmdBuffer cmdBuffer)
6537{
6538
6539 return true;
6540}
6541
6542VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6543 VkCmdBuffer cmdBuffer)
6544{
6545 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6546
6547 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006548}
6549
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006550bool PreCmdExecuteCommands(
6551 VkCmdBuffer cmdBuffer,
6552 const VkCmdBuffer* pCmdBuffers)
6553{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006554 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006555 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006556 }
6557
6558 return true;
6559}
6560
6561bool PostCmdExecuteCommands(
6562 VkCmdBuffer cmdBuffer,
6563 uint32_t cmdBuffersCount)
6564{
6565
6566
6567 return true;
6568}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006569
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006570VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006571 VkCmdBuffer cmdBuffer,
6572 uint32_t cmdBuffersCount,
6573 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006574{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006575 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6576
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006577 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6578
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006579 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006580}
6581
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006583{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006584 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006585 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006586 }
6587
Jon Ashburn8fd08252015-05-28 16:25:02 -06006588 /* loader uses this to force layer initialization; device object is wrapped */
6589 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006592 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006593
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006594 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006602 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006603 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006604 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006605 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006607 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006609 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006610 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006611 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006613 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006615 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006617 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006618 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006619 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006620 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006621 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006622 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006623 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006624 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006625 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006626 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006627 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006628 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006629 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006631 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006633 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006634 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006635 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006636 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006637 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006638 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006639 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006641 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006642 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006643 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006644 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006645 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006646 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006647 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006648 if (!strcmp(funcName, "vkCreateShaderModule"))
6649 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006650 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006651 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006652 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006653 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006654 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006655 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006657 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006658 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006659 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006660 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006661 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006662 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006663 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006664 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006665 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006666 if (!strcmp(funcName, "vkCmdSetViewport"))
6667 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006668 if (!strcmp(funcName, "vkCmdSetScissor"))
6669 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006670 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6671 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6672 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6673 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6674 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6675 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6676 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6677 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6678 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6679 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6680 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6681 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6682 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6683 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06006684 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6685 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006687 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006688 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006689 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006690 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006691 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006692 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006693 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006694 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006695 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006697 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006699 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006701 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006703 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006707 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006708 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006710 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006711 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006712 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006713 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006714 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006715 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006716 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006717 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006718 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006719 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006720 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006721 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006722 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006723 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006727 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006728 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006729 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006734 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006735 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006736 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006738 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006739 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006740 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006741 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006742 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006743 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006744 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006745 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006746 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006747 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006748 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006749 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006750 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006751 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006752 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006753 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006754 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006755 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006756
Jon Ashburneab34492015-06-01 09:37:38 -06006757 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006758 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006759 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006760 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006761 }
6762}
6763
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006764VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006765{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006766 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006767 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006768 }
6769
Jon Ashburn8fd08252015-05-28 16:25:02 -06006770 /* loader uses this to force layer initialization; instance object is wrapped */
6771 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006772 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006773 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006774 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006775
Jeremy Hayes99a96322015-06-26 12:48:09 -06006776 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006777 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006778 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006779 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006780 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006781 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006782 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006783 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006784 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006785 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006786 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006787 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006788 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6789 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6790 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6791 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6792 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6793 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6794 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6795 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006796
Jeremy Hayes99a96322015-06-26 12:48:09 -06006797 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006798 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006799 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006800 return fptr;
6801
Jeremy Hayes99a96322015-06-26 12:48:09 -06006802 {
6803 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6804 return NULL;
6805 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6806 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006807}