blob: d0d96558b783d421daa1a10c704530fefd3d1159 [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 PostQueueSignalSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003052 VkQueue queue,
3053 VkSemaphore semaphore,
3054 VkResult result)
3055{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003056
Jeremy Hayes99a96322015-06-26 12:48:09 -06003057
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003058 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003059 {
3060 std::string reason = "vkQueueSignalSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003061 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3062 return false;
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
3068VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(
3069 VkQueue queue,
3070 VkSemaphore semaphore)
3071{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003072 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSignalSemaphore(queue, semaphore);
3073
3074 PostQueueSignalSemaphore(queue, semaphore, result);
3075
3076 return result;
3077}
3078
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003079bool PostQueueWaitSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003080 VkQueue queue,
3081 VkSemaphore semaphore,
3082 VkResult result)
3083{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003084
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003086 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087 {
3088 std::string reason = "vkQueueWaitSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003089 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3090 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003092
3093 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094}
3095
3096VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(
3097 VkQueue queue,
3098 VkSemaphore semaphore)
3099{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003100 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitSemaphore(queue, semaphore);
3101
3102 PostQueueWaitSemaphore(queue, semaphore, result);
3103
3104 return result;
3105}
3106
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003108 VkDevice device,
3109 const VkEventCreateInfo* pCreateInfo)
3110{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003111 if(pCreateInfo != nullptr)
3112 {
3113 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003116 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003117 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003119 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003120
3121 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122}
3123
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003124bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003125 VkDevice device,
3126 VkEvent* pEvent,
3127 VkResult result)
3128{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003130 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132 }
3133
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003134 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135 {
3136 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3138 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003140
3141 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142}
3143
3144VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
3145 VkDevice device,
3146 const VkEventCreateInfo* pCreateInfo,
3147 VkEvent* pEvent)
3148{
3149 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003150
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pEvent);
3152
3153 PostCreateEvent(device, pEvent, result);
3154
3155 return result;
3156}
3157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003158bool PostGetEventStatus(
3159 VkDevice device,
3160 VkEvent event,
3161 VkResult result)
3162{
3163
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 = "vkGetEventStatus 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 vkGetEventStatus(
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)->GetEventStatus(device, event);
3180
3181 PostGetEventStatus(device, event, result);
3182
3183 return result;
3184}
3185
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003186bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 VkDevice device,
3188 VkEvent event,
3189 VkResult result)
3190{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003193 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 {
3195 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3197 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003199
3200 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003201}
3202
3203VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3204 VkDevice device,
3205 VkEvent event)
3206{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3208
3209 PostSetEvent(device, event, result);
3210
3211 return result;
3212}
3213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003214bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 VkDevice device,
3216 VkEvent event,
3217 VkResult result)
3218{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003221 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003222 {
3223 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3225 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003227
3228 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003229}
3230
3231VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3232 VkDevice device,
3233 VkEvent event)
3234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3236
3237 PostResetEvent(device, event, result);
3238
3239 return result;
3240}
3241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003242bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003243 VkDevice device,
3244 const VkQueryPoolCreateInfo* pCreateInfo)
3245{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003246 if(pCreateInfo != nullptr)
3247 {
3248 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003249 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003251 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253 }
3254 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3255 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3256 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003258 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003262
3263 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003264}
3265
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003266bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 VkDevice device,
3268 VkQueryPool* pQueryPool,
3269 VkResult result)
3270{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003271
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003272 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003273 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274 }
3275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003276 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277 {
3278 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3280 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003281 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003282
3283 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284}
3285
3286VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3287 VkDevice device,
3288 const VkQueryPoolCreateInfo* pCreateInfo,
3289 VkQueryPool* pQueryPool)
3290{
3291 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003292
Jeremy Hayes99a96322015-06-26 12:48:09 -06003293 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pQueryPool);
3294
3295 PostCreateQueryPool(device, pQueryPool, result);
3296
3297 return result;
3298}
3299
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003300bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003301 VkDevice device,
3302 VkQueryPool queryPool,
3303 uint32_t startQuery,
3304 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003305 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003306 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003307 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 VkQueryResultFlags flags,
3309 VkResult result)
3310{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003311
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312
3313
3314
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003317 }
3318
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003320 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003321 {
3322 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003323 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3324 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003326
3327 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003328}
3329
3330VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3331 VkDevice device,
3332 VkQueryPool queryPool,
3333 uint32_t startQuery,
3334 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003335 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003336 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003337 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338 VkQueryResultFlags flags)
3339{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003340 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 -06003341
Chia-I Wuccc93a72015-10-26 18:36:20 +08003342 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003343
3344 return result;
3345}
3346
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003347bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003348 VkDevice device,
3349 const VkBufferCreateInfo* pCreateInfo)
3350{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003351 if(pCreateInfo != nullptr)
3352 {
3353 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003354 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003355 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003356 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003357 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003358 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003359 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3360 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003362 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003363 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003364 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003365 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003366 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003368 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003369 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003370
3371 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372}
3373
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003374bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 VkDevice device,
3376 VkBuffer* pBuffer,
3377 VkResult result)
3378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003379
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003380 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 }
3383
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003384 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003385 {
3386 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3388 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003390
3391 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003392}
3393
3394VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3395 VkDevice device,
3396 const VkBufferCreateInfo* pCreateInfo,
3397 VkBuffer* pBuffer)
3398{
3399 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400
Jeremy Hayes99a96322015-06-26 12:48:09 -06003401 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pBuffer);
3402
3403 PostCreateBuffer(device, pBuffer, result);
3404
3405 return result;
3406}
3407
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003408bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409 VkDevice device,
3410 const VkBufferViewCreateInfo* pCreateInfo)
3411{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003412 if(pCreateInfo != nullptr)
3413 {
3414 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003415 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003416 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003417 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003418 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003420 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3421 pCreateInfo->format > VK_FORMAT_END_RANGE)
3422 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003424 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003426 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003427 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003428
3429 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003430}
3431
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003432bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003433 VkDevice device,
3434 VkBufferView* pView,
3435 VkResult result)
3436{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003438 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003439 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003440 }
3441
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003442 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003443 {
3444 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3446 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003447 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003448
3449 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450}
3451
3452VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3453 VkDevice device,
3454 const VkBufferViewCreateInfo* pCreateInfo,
3455 VkBufferView* pView)
3456{
3457 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003458
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pView);
3460
3461 PostCreateBufferView(device, pView, result);
3462
3463 return result;
3464}
3465
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003466bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003467 VkDevice device,
3468 const VkImageCreateInfo* pCreateInfo)
3469{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003470 if(pCreateInfo != nullptr)
3471 {
3472 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003475 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003476 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477 }
3478 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3479 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3480 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003482 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003483 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 }
3485 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3486 pCreateInfo->format > VK_FORMAT_END_RANGE)
3487 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003488 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003489 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003490 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003491 }
3492 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3493 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3494 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003496 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003497 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003498 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003499 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3500 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003501 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003502 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3503 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003506 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003508 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003509 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003510
3511 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003512}
3513
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003514bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003515 VkDevice device,
3516 VkImage* pImage,
3517 VkResult result)
3518{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003519
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003520 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003521 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003522 }
3523
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003524 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003525 {
3526 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003527 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3528 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003529 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003530
3531 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003532}
3533
Jeremy Hayes99a96322015-06-26 12:48:09 -06003534VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3535 VkDevice device,
3536 const VkImageCreateInfo* pCreateInfo,
3537 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003538{
3539 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003540
Jeremy Hayes99a96322015-06-26 12:48:09 -06003541 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pImage);
3542
3543 PostCreateImage(device, pImage, result);
3544
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003545 return result;
3546}
3547
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003548bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003549 VkDevice device,
3550 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003551{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003552 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003553 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003554 if ((pSubresource->aspect &
3555 (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 -06003556 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003558 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003559 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003560 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003561 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003562
3563 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003564}
3565
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003566bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003567 VkDevice device,
3568 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003569 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003571
Jeremy Hayes99a96322015-06-26 12:48:09 -06003572
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003573 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003574 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003575 }
3576
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003577 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578}
3579
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003580VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581 VkDevice device,
3582 VkImage image,
3583 const VkImageSubresource* pSubresource,
3584 VkSubresourceLayout* pLayout)
3585{
3586 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003587
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003588 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003589
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003590 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003591}
3592
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003593bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003594 VkDevice device,
3595 const VkImageViewCreateInfo* pCreateInfo)
3596{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003597 if(pCreateInfo != nullptr)
3598 {
3599 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003600 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003601 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003603 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003604 }
3605 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3606 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3607 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003608 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003609 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003610 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003611 }
3612 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3613 pCreateInfo->format > VK_FORMAT_END_RANGE)
3614 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003615 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003616 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003617 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003618 }
3619 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3620 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3621 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003622 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003623 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003624 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003625 }
3626 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3627 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3628 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003629 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003630 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003631 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003632 }
3633 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3634 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3635 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003637 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003638 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003639 }
3640 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3641 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3642 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003644 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003645 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003646 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003647 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003648
3649 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003650}
3651
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003652bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003653 VkDevice device,
3654 VkImageView* pView,
3655 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003656{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003657
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003658 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003659 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003660 }
3661
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003662 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003663 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003664 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3666 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003667 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003668
3669 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003670}
3671
3672VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3673 VkDevice device,
3674 const VkImageViewCreateInfo* pCreateInfo,
3675 VkImageView* pView)
3676{
3677 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003678
Jeremy Hayes99a96322015-06-26 12:48:09 -06003679 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pView);
3680
3681 PostCreateImageView(device, pView, result);
3682
3683 return result;
3684}
3685
Michael Lentine03d8e572015-09-15 14:59:14 -05003686bool PreCreateShaderModule(
3687 VkDevice device,
3688 const VkShaderModuleCreateInfo* pCreateInfo)
3689{
3690 if(pCreateInfo) {
3691 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3693 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3694 return false;
3695 }
3696 if(!pCreateInfo->pCode) {
3697 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3698 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3699 return false;
3700 }
3701 } else {
3702 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3703 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3704 return false;
3705 }
3706
3707 return true;
3708}
3709
3710bool PostCreateShaderModule(
3711 VkDevice device,
3712 VkShaderModule* pShaderModule,
3713 VkResult result)
3714{
3715 if(result < VK_SUCCESS) {
3716 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3717 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3718 return false;
3719 }
3720
3721 return true;
3722}
3723
3724VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3725 VkDevice device,
3726 const VkShaderModuleCreateInfo* pCreateInfo,
3727 VkShaderModule* pShaderModule)
3728{
3729 PreCreateShaderModule(device, pCreateInfo);
3730 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pShaderModule);
3731 PostCreateShaderModule(device, pShaderModule, result);
3732 return result;
3733}
3734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003735bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003736 VkDevice device,
3737 const VkShaderCreateInfo* pCreateInfo)
3738{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 if(pCreateInfo != nullptr)
3740 {
3741 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003742 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003743 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003744 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003745 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003746 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003747 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003748 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003749 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003750 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003751
3752 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003753}
3754
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003755bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003756 VkDevice device,
3757 VkShader* pShader,
3758 VkResult result)
3759{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003760
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003761 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003762 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003763 }
3764
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003766 {
3767 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3769 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003770 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003771
3772 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003773}
3774
3775VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3776 VkDevice device,
3777 const VkShaderCreateInfo* pCreateInfo,
3778 VkShader* pShader)
3779{
3780 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003781
Jeremy Hayes99a96322015-06-26 12:48:09 -06003782 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pShader);
3783
3784 PostCreateShader(device, pShader, result);
3785
3786 return result;
3787}
3788
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003790 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003792{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003793 if(pCreateInfo != nullptr)
3794 {
3795 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003796 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003797 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003798 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003799 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003800 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003801 if(pCreateInfo->initialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003802 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003803 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003804 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003805
3806 return true;
3807}
3808
3809bool PostCreatePipelineCache(
3810 VkDevice device,
3811 VkPipelineCache* pPipelineCache,
3812 VkResult result)
3813{
3814
3815 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003816 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003817 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003818
3819 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003820 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003821 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3823 return false;
3824 }
3825
3826 return true;
3827}
3828
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003829VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003830 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003831 const VkPipelineCacheCreateInfo* pCreateInfo,
3832 VkPipelineCache* pPipelineCache)
3833{
3834 PreCreatePipelineCache(device, pCreateInfo);
3835
3836 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pPipelineCache);
3837
3838 PostCreatePipelineCache(device, pPipelineCache, result);
3839
3840 return result;
3841}
3842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003843bool PostGetPipelineCacheData(
3844 VkDevice device,
3845 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003846 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003847 void* pData,
3848 VkResult result)
3849{
3850
3851
Chia-I Wub16facd2015-10-26 19:17:06 +08003852 if(pDataSize != nullptr)
3853 {
3854 }
3855
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003856 if(pData != nullptr)
3857 {
3858 }
3859
3860 if(result < VK_SUCCESS)
3861 {
3862 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3863 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3864 return false;
3865 }
3866
3867 return true;
3868}
3869
3870VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3871 VkDevice device,
3872 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003873 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003874 void* pData)
3875{
Chia-I Wub16facd2015-10-26 19:17:06 +08003876 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877
Chia-I Wub16facd2015-10-26 19:17:06 +08003878 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003879
3880 return result;
3881}
3882
3883bool PreMergePipelineCaches(
3884 VkDevice device,
3885 const VkPipelineCache* pSrcCaches)
3886{
3887 if(pSrcCaches != nullptr)
3888 {
3889 }
3890
3891 return true;
3892}
3893
3894bool PostMergePipelineCaches(
3895 VkDevice device,
3896 VkPipelineCache destCache,
3897 uint32_t srcCacheCount,
3898 VkResult result)
3899{
3900
3901
3902
3903 if(result < VK_SUCCESS)
3904 {
3905 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3907 return false;
3908 }
3909
3910 return true;
3911}
3912
3913VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3914 VkDevice device,
3915 VkPipelineCache destCache,
3916 uint32_t srcCacheCount,
3917 const VkPipelineCache* pSrcCaches)
3918{
3919 PreMergePipelineCaches(device, pSrcCaches);
3920
3921 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3922
3923 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3924
3925 return result;
3926}
3927
3928bool PreCreateGraphicsPipelines(
3929 VkDevice device,
3930 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3931{
3932 if(pCreateInfos != nullptr)
3933 {
3934 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3935 {
3936 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3937 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3938 return false;
3939 }
3940 if(pCreateInfos->pStages != nullptr)
3941 {
3942 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3943 {
3944 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3945 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3946 return false;
3947 }
Courtney Goeltzenleuchterd2635502015-10-21 17:08:06 -06003948 if((pCreateInfos->pStages->stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
3949 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
3950 VK_SHADER_STAGE_GEOMETRY_BIT |
3951 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003952 {
3953 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3954 "vkCreateGraphicsPipelines parameter, VkShaderStage pCreateInfos->pStages->stage, is an unrecognized enumerator");
3955 return false;
3956 }
3957 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3958 {
3959 if(pCreateInfos->pStages->pSpecializationInfo->pMap != nullptr)
3960 {
3961 }
3962 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3963 {
3964 }
3965 }
3966 }
3967 if(pCreateInfos->pVertexInputState != nullptr)
3968 {
3969 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3970 {
3971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3972 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3973 return false;
3974 }
3975 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3976 {
3977 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3978 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3979 {
3980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3981 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3982 return false;
3983 }
3984 }
3985 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3986 {
3987 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3988 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3989 {
3990 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3991 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3992 return false;
3993 }
3994 }
3995 }
3996 if(pCreateInfos->pInputAssemblyState != nullptr)
3997 {
3998 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3999 {
4000 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4001 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
4002 return false;
4003 }
4004 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
4005 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
4006 {
4007 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4008 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
4009 return false;
4010 }
4011 }
4012 if(pCreateInfos->pTessellationState != nullptr)
4013 {
4014 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
4015 {
4016 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4017 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
4018 return false;
4019 }
4020 }
4021 if(pCreateInfos->pViewportState != nullptr)
4022 {
4023 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
4024 {
4025 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4026 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
4027 return false;
4028 }
4029 }
4030 if(pCreateInfos->pRasterState != nullptr)
4031 {
4032 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
4033 {
4034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4035 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
4036 return false;
4037 }
4038 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
4039 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
4040 {
4041 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4042 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
4043 return false;
4044 }
4045 if(pCreateInfos->pRasterState->cullMode < VK_CULL_MODE_BEGIN_RANGE ||
4046 pCreateInfos->pRasterState->cullMode > VK_CULL_MODE_END_RANGE)
4047 {
4048 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4049 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
4050 return false;
4051 }
4052 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
4053 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
4054 {
4055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4056 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
4057 return false;
4058 }
4059 }
4060 if(pCreateInfos->pMultisampleState != nullptr)
4061 {
4062 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
4063 {
4064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4065 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
4066 return false;
4067 }
4068 }
4069 if(pCreateInfos->pDepthStencilState != nullptr)
4070 {
4071 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
4072 {
4073 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4074 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
4075 return false;
4076 }
4077 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4078 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
4079 {
4080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
4082 return false;
4083 }
4084 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4085 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4086 {
4087 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4088 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
4089 return false;
4090 }
4091 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4092 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4093 {
4094 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4095 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
4096 return false;
4097 }
4098 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4099 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4100 {
4101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4102 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
4103 return false;
4104 }
4105 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4106 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4107 {
4108 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4109 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
4110 return false;
4111 }
4112 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4113 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
4114 {
4115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4116 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
4117 return false;
4118 }
4119 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
4120 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
4121 {
4122 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4123 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
4124 return false;
4125 }
4126 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
4127 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
4128 {
4129 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4130 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
4131 return false;
4132 }
4133 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4134 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
4135 {
4136 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4137 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
4138 return false;
4139 }
4140 }
4141 if(pCreateInfos->pColorBlendState != nullptr)
4142 {
4143 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
4144 {
4145 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4146 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
4147 return false;
4148 }
Michael Lentine304b01f2015-10-06 14:55:54 -07004149 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
4150 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004151 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
4152 {
4153 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4154 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
4155 return false;
4156 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05004157 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004158 {
4159 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
4160 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
4161 {
4162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4163 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
4164 return false;
4165 }
4166 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
4167 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
4168 {
4169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4170 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
4171 return false;
4172 }
4173 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
4174 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
4175 {
4176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4177 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
4178 return false;
4179 }
4180 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4181 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
4182 {
4183 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4184 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
4185 return false;
4186 }
4187 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4188 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4189 {
4190 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4191 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4192 return false;
4193 }
4194 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4195 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4196 {
4197 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4198 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4199 return false;
4200 }
4201 }
4202 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004203 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4204 {
4205 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4206 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4207 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004208 }
4209
4210 return true;
4211}
4212
4213bool PostCreateGraphicsPipelines(
4214 VkDevice device,
4215 VkPipelineCache pipelineCache,
4216 uint32_t count,
4217 VkPipeline* pPipelines,
4218 VkResult result)
4219{
4220
4221
4222
4223 if(pPipelines != nullptr)
4224 {
4225 }
4226
4227 if(result < VK_SUCCESS)
4228 {
4229 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4231 return false;
4232 }
4233
4234 return true;
4235}
4236
4237VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4238 VkDevice device,
4239 VkPipelineCache pipelineCache,
4240 uint32_t count,
4241 const VkGraphicsPipelineCreateInfo* pCreateInfos,
4242 VkPipeline* pPipelines)
4243{
4244 PreCreateGraphicsPipelines(device, pCreateInfos);
4245
4246 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4247
4248 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4249
4250 return result;
4251}
4252
4253bool PreCreateComputePipelines(
4254 VkDevice device,
4255 const VkComputePipelineCreateInfo* pCreateInfos)
4256{
4257 if(pCreateInfos != nullptr)
4258 {
4259 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4260 {
4261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4262 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4263 return false;
4264 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004265 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004266 {
4267 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4268 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4269 return false;
4270 }
Courtney Goeltzenleuchterd2635502015-10-21 17:08:06 -06004271 if((pCreateInfos->stage.stage & (VK_SHADER_STAGE_VERTEX_BIT | VK_SHADER_STAGE_FRAGMENT_BIT |
4272 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT | VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
4273 VK_SHADER_STAGE_GEOMETRY_BIT |
4274 VK_SHADER_STAGE_COMPUTE_BIT)) == 0)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004275 {
4276 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4277 "vkCreateComputePipelines parameter, VkShaderStage pCreateInfos->cs.stage, is an unrecognized enumerator");
4278 return false;
4279 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004280 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004281 {
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004282 if(pCreateInfos->stage.pSpecializationInfo->pMap != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004283 {
4284 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004285 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004286 {
4287 }
4288 }
4289 }
4290
4291 return true;
4292}
4293
4294bool PostCreateComputePipelines(
4295 VkDevice device,
4296 VkPipelineCache pipelineCache,
4297 uint32_t count,
4298 VkPipeline* pPipelines,
4299 VkResult result)
4300{
4301
4302
4303
4304 if(pPipelines != nullptr)
4305 {
4306 }
4307
4308 if(result < VK_SUCCESS)
4309 {
4310 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4311 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4312 return false;
4313 }
4314
4315 return true;
4316}
4317
4318VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4319 VkDevice device,
4320 VkPipelineCache pipelineCache,
4321 uint32_t count,
4322 const VkComputePipelineCreateInfo* pCreateInfos,
4323 VkPipeline* pPipelines)
4324{
4325 PreCreateComputePipelines(device, pCreateInfos);
4326
4327 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pPipelines);
4328
4329 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4330
4331 return result;
4332}
4333
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004334bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 VkDevice device,
4336 const VkPipelineLayoutCreateInfo* pCreateInfo)
4337{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004338 if(pCreateInfo != nullptr)
4339 {
4340 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004342 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004343 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4344 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004346 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004347 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004348 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004349 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004351 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004352 }
4353
4354 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004355}
4356
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004357bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 VkDevice device,
4359 VkPipelineLayout* pPipelineLayout,
4360 VkResult result)
4361{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004363 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004364 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004365 }
4366
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004367 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368 {
4369 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4371 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004372 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004373
4374 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004375}
4376
4377VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4378 VkDevice device,
4379 const VkPipelineLayoutCreateInfo* pCreateInfo,
4380 VkPipelineLayout* pPipelineLayout)
4381{
4382 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004383
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
4385
4386 PostCreatePipelineLayout(device, pPipelineLayout, result);
4387
4388 return result;
4389}
4390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004391bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392 VkDevice device,
4393 const VkSamplerCreateInfo* pCreateInfo)
4394{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004395 if(pCreateInfo != nullptr)
4396 {
4397 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004400 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004401 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004402 }
4403 if(pCreateInfo->magFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4404 pCreateInfo->magFilter > VK_TEX_FILTER_END_RANGE)
4405 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004406 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004407 "vkCreateSampler parameter, VkTexFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004408 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004409 }
4410 if(pCreateInfo->minFilter < VK_TEX_FILTER_BEGIN_RANGE ||
4411 pCreateInfo->minFilter > VK_TEX_FILTER_END_RANGE)
4412 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004413 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004414 "vkCreateSampler parameter, VkTexFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004415 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416 }
4417 if(pCreateInfo->mipMode < VK_TEX_MIPMAP_MODE_BEGIN_RANGE ||
4418 pCreateInfo->mipMode > VK_TEX_MIPMAP_MODE_END_RANGE)
4419 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004421 "vkCreateSampler parameter, VkTexMipmapMode pCreateInfo->mipMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004422 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004424 if(pCreateInfo->addressModeU < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4425 pCreateInfo->addressModeU > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004427 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004428 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004429 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004430 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004431 if(pCreateInfo->addressModeV < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4432 pCreateInfo->addressModeV > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004434 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004435 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004436 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004437 }
Courtney Goeltzenleuchter38e48f32015-10-19 16:23:53 -06004438 if(pCreateInfo->addressModeW < VK_TEX_ADDRESS_MODE_BEGIN_RANGE ||
4439 pCreateInfo->addressModeW > VK_TEX_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004441 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004442 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444 }
4445 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4446 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4447 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004448 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004449 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004450 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451 }
4452 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4453 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4454 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004455 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004456 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004457 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004458 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004459 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004460
4461 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004462}
4463
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004464bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465 VkDevice device,
4466 VkSampler* pSampler,
4467 VkResult result)
4468{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004469
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004470 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004471 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004472 }
4473
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004474 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004475 {
4476 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004477 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4478 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004479 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004480
4481 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004482}
4483
4484VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4485 VkDevice device,
4486 const VkSamplerCreateInfo* pCreateInfo,
4487 VkSampler* pSampler)
4488{
4489 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004490
Jeremy Hayes99a96322015-06-26 12:48:09 -06004491 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pSampler);
4492
4493 PostCreateSampler(device, pSampler, result);
4494
4495 return result;
4496}
4497
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004498bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004499 VkDevice device,
4500 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4501{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004502 if(pCreateInfo != nullptr)
4503 {
4504 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004505 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004506 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004507 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004508 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004509 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004510 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004511 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004512 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4513 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4514 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004515 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004516 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004517 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004518 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004519 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004520 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004521 }
4522 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004524
4525 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526}
4527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004528bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004529 VkDevice device,
4530 VkDescriptorSetLayout* pSetLayout,
4531 VkResult result)
4532{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004533
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004535 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 }
4537
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004538 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539 {
4540 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004541 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4542 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004544
4545 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004546}
4547
4548VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4549 VkDevice device,
4550 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
4551 VkDescriptorSetLayout* pSetLayout)
4552{
4553 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004554
Jeremy Hayes99a96322015-06-26 12:48:09 -06004555 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
4556
4557 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4558
4559 return result;
4560}
4561
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004562bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004563 VkDevice device,
4564 const VkDescriptorPoolCreateInfo* pCreateInfo)
4565{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004566 if(pCreateInfo != nullptr)
4567 {
4568 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004570 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004571 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004572 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004573 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004574 if(pCreateInfo->pTypeCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004575 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004576 if(pCreateInfo->pTypeCount->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4577 pCreateInfo->pTypeCount->type > VK_DESCRIPTOR_TYPE_END_RANGE)
4578 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004579 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004580 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004581 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004582 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004583 }
4584 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004585
4586 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004587}
4588
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004589bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004590 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004591 uint32_t maxSets,
4592 VkDescriptorPool* pDescriptorPool,
4593 VkResult result)
4594{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004595
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004596 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004597
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004598 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004599 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004600 }
4601
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004602 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004603 {
4604 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004605 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4606 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004607 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004608
4609 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004610}
4611
4612VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4613 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004614 const VkDescriptorPoolCreateInfo* pCreateInfo,
4615 VkDescriptorPool* pDescriptorPool)
4616{
4617 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004618
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004619 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004620
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004621 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004622
4623 return result;
4624}
4625
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004626bool PostResetDescriptorPool(
4627 VkDevice device,
4628 VkDescriptorPool descriptorPool,
4629 VkResult result)
4630{
4631
Jeremy Hayes99a96322015-06-26 12:48:09 -06004632
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004633 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004634 {
4635 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4637 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004638 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004639
4640 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004641}
4642
4643VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4644 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004645 VkDescriptorPool descriptorPool,
4646 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004647{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004648 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004649
4650 PostResetDescriptorPool(device, descriptorPool, result);
4651
4652 return result;
4653}
4654
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004655bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004656 VkDevice device,
4657 const VkDescriptorSetLayout* pSetLayouts)
4658{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004659 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004660 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004661 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004662
4663 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004664}
4665
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004666bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004667 VkDevice device,
4668 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004669 uint32_t count,
4670 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004671 VkResult result)
4672{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004673
Jeremy Hayes99a96322015-06-26 12:48:09 -06004674
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004675 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004676 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004677 }
4678
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004679 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004680 {
4681 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004682 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4683 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004684 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004685
4686 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004687}
4688
4689VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4690 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004691 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004692 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004693{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004694 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004695
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004696 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004697
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004698 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->count, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004699
4700 return result;
4701}
4702
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004703bool PreFreeDescriptorSets(
4704 VkDevice device,
4705 const VkDescriptorSet* pDescriptorSets)
4706{
4707 if(pDescriptorSets != nullptr)
4708 {
4709 }
4710
4711 return true;
4712}
4713
4714bool PostFreeDescriptorSets(
4715 VkDevice device,
4716 VkDescriptorPool descriptorPool,
4717 uint32_t count,
4718 VkResult result)
4719{
4720
4721
4722
4723 if(result < VK_SUCCESS)
4724 {
4725 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4727 return false;
4728 }
4729
4730 return true;
4731}
4732
4733VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4734 VkDevice device,
4735 VkDescriptorPool descriptorPool,
4736 uint32_t count,
4737 const VkDescriptorSet* pDescriptorSets)
4738{
4739 PreFreeDescriptorSets(device, pDescriptorSets);
4740
4741 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4742
4743 PostFreeDescriptorSets(device, descriptorPool, count, result);
4744
4745 return result;
4746}
4747
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004748bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004749 VkDevice device,
4750 const VkWriteDescriptorSet* pDescriptorWrites,
4751 const VkCopyDescriptorSet* pDescriptorCopies)
4752{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004753 if(pDescriptorWrites != nullptr)
4754 {
4755 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004756 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004758 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004759 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004760 }
4761 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4762 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4763 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004764 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004765 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004766 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004767 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004768 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4769 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4770 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004771 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004772 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4773 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004774 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004776 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004777 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004778 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004779 }
4780 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004781
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004782 if(pDescriptorCopies != nullptr)
4783 {
4784 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004785 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004786 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004787 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004788 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004789 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004790 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004791
4792 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004793}
4794
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004795VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004796 VkDevice device,
4797 uint32_t writeCount,
4798 const VkWriteDescriptorSet* pDescriptorWrites,
4799 uint32_t copyCount,
4800 const VkCopyDescriptorSet* pDescriptorCopies)
4801{
4802 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004803
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004804 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, writeCount, pDescriptorWrites, copyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004805}
4806
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807bool PreCreateFramebuffer(
4808 VkDevice device,
4809 const VkFramebufferCreateInfo* pCreateInfo)
4810{
4811 if(pCreateInfo != nullptr)
4812 {
4813 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4814 {
4815 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4816 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4817 return false;
4818 }
4819 if(pCreateInfo->pAttachments != nullptr)
4820 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004821 }
4822 }
4823
4824 return true;
4825}
4826
4827bool PostCreateFramebuffer(
4828 VkDevice device,
4829 VkFramebuffer* pFramebuffer,
4830 VkResult result)
4831{
4832
4833 if(pFramebuffer != nullptr)
4834 {
4835 }
4836
4837 if(result < VK_SUCCESS)
4838 {
4839 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4840 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4841 return false;
4842 }
4843
4844 return true;
4845}
4846
4847VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4848 VkDevice device,
4849 const VkFramebufferCreateInfo* pCreateInfo,
4850 VkFramebuffer* pFramebuffer)
4851{
4852 PreCreateFramebuffer(device, pCreateInfo);
4853
4854 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pFramebuffer);
4855
4856 PostCreateFramebuffer(device, pFramebuffer, result);
4857
4858 return result;
4859}
4860
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004861bool PreCreateRenderPass(
4862 VkDevice device,
4863 const VkRenderPassCreateInfo* pCreateInfo)
4864{
4865 if(pCreateInfo != nullptr)
4866 {
4867 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4868 {
4869 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4870 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4871 return false;
4872 }
4873 if(pCreateInfo->pAttachments != nullptr)
4874 {
4875 if(pCreateInfo->pAttachments->sType != VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION)
4876 {
4877 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4878 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pAttachments->sType, is an invalid enumerator");
4879 return false;
4880 }
4881 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4882 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4883 {
4884 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4885 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4886 return false;
4887 }
4888 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4889 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4890 {
4891 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4892 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4893 return false;
4894 }
4895 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4896 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4897 {
4898 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4899 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4900 return false;
4901 }
4902 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4903 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4904 {
4905 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4906 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4907 return false;
4908 }
4909 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4910 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4911 {
4912 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4913 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4914 return false;
4915 }
4916 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4917 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4918 {
4919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4920 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4921 return false;
4922 }
4923 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4924 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4925 {
4926 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4927 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4928 return false;
4929 }
4930 }
4931 if(pCreateInfo->pSubpasses != nullptr)
4932 {
4933 if(pCreateInfo->pSubpasses->sType != VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION)
4934 {
4935 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4936 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pSubpasses->sType, is an invalid enumerator");
4937 return false;
4938 }
4939 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4940 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4941 {
4942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4943 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4944 return false;
4945 }
Cody Northropa505dda2015-08-04 11:16:41 -06004946 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004947 {
Cody Northropa505dda2015-08-04 11:16:41 -06004948 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4949 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004950 {
4951 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004952 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004953 return false;
4954 }
4955 }
Cody Northropa505dda2015-08-04 11:16:41 -06004956 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004957 {
Cody Northropa505dda2015-08-04 11:16:41 -06004958 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4959 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004960 {
4961 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004962 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004963 return false;
4964 }
4965 }
Cody Northropa505dda2015-08-04 11:16:41 -06004966 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004967 {
Cody Northropa505dda2015-08-04 11:16:41 -06004968 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4969 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004970 {
4971 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004972 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004973 return false;
4974 }
4975 }
4976 if(pCreateInfo->pSubpasses->depthStencilAttachment.layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4977 pCreateInfo->pSubpasses->depthStencilAttachment.layout > VK_IMAGE_LAYOUT_END_RANGE)
4978 {
4979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4980 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->depthStencilAttachment.layout, is an unrecognized enumerator");
4981 return false;
4982 }
Cody Northropa505dda2015-08-04 11:16:41 -06004983 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004984 {
Cody Northropa505dda2015-08-04 11:16:41 -06004985 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4986 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004987 {
4988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004989 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004990 return false;
4991 }
4992 }
4993 }
4994 if(pCreateInfo->pDependencies != nullptr)
4995 {
4996 if(pCreateInfo->pDependencies->sType != VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY)
4997 {
4998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4999 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->pDependencies->sType, is an invalid enumerator");
5000 return false;
5001 }
5002 }
5003 }
5004
5005 return true;
5006}
5007
5008bool PostCreateRenderPass(
5009 VkDevice device,
5010 VkRenderPass* pRenderPass,
5011 VkResult result)
5012{
5013
5014 if(pRenderPass != nullptr)
5015 {
5016 }
5017
5018 if(result < VK_SUCCESS)
5019 {
5020 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
5021 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5022 return false;
5023 }
5024
5025 return true;
5026}
5027
5028VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
5029 VkDevice device,
5030 const VkRenderPassCreateInfo* pCreateInfo,
5031 VkRenderPass* pRenderPass)
5032{
5033 PreCreateRenderPass(device, pCreateInfo);
5034
5035 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pRenderPass);
5036
5037 PostCreateRenderPass(device, pRenderPass, result);
5038
5039 return result;
5040}
5041
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005042bool PostGetRenderAreaGranularity(
5043 VkDevice device,
5044 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005045 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005046{
5047
5048
5049 if(pGranularity != nullptr)
5050 {
5051 }
5052
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005053 return true;
5054}
5055
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005056VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005057 VkDevice device,
5058 VkRenderPass renderPass,
5059 VkExtent2D* pGranularity)
5060{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005061 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005062
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06005063 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005064}
5065
5066bool PreCreateCommandPool(
5067 VkDevice device,
5068 const VkCmdPoolCreateInfo* pCreateInfo)
5069{
5070 if(pCreateInfo != nullptr)
5071 {
5072 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
5073 {
5074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5075 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
5076 return false;
5077 }
5078 }
5079
5080 return true;
5081}
5082
5083bool PostCreateCommandPool(
5084 VkDevice device,
5085 VkCmdPool* pCmdPool,
5086 VkResult result)
5087{
5088
5089 if(pCmdPool != nullptr)
5090 {
5091 }
5092
5093 if(result < VK_SUCCESS)
5094 {
5095 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5096 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5097 return false;
5098 }
5099
5100 return true;
5101}
5102
5103VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
5104 VkDevice device,
5105 const VkCmdPoolCreateInfo* pCreateInfo,
5106 VkCmdPool* pCmdPool)
5107{
5108 PreCreateCommandPool(device, pCreateInfo);
5109
5110 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pCmdPool);
5111
5112 PostCreateCommandPool(device, pCmdPool, result);
5113
5114 return result;
5115}
5116
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005117bool PostResetCommandPool(
5118 VkDevice device,
5119 VkCmdPool cmdPool,
5120 VkCmdPoolResetFlags flags,
5121 VkResult result)
5122{
5123
5124
5125
5126 if(result < VK_SUCCESS)
5127 {
5128 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
5129 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5130 return false;
5131 }
5132
5133 return true;
5134}
5135
5136VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
5137 VkDevice device,
5138 VkCmdPool cmdPool,
5139 VkCmdPoolResetFlags flags)
5140{
5141 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
5142
5143 PostResetCommandPool(device, cmdPool, flags, result);
5144
5145 return result;
5146}
5147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148bool PreCreateCommandBuffer(
5149 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005150 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005151{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005152 if(pCreateInfo != nullptr)
5153 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005154 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005155 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005157 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005158 return false;
5159 }
5160 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
5161 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
5162 {
5163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005164 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005165 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005166 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005167 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005168
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005169 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005170}
5171
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005172bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173 VkDevice device,
5174 VkCmdBuffer* pCmdBuffer,
5175 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005176{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005177
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005178 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005180 }
5181
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005182 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005183 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005184 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005185 log_msg(mdd(device), 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
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005192VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005193 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005194 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195 VkCmdBuffer* pCmdBuffer)
5196{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005197 PreCreateCommandBuffer(device, pCreateInfo);
5198
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06005199 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005200
5201 PostCreateCommandBuffer(device, pCmdBuffer, result);
5202
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005203 return result;
5204}
5205
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005206bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207 VkCmdBuffer cmdBuffer,
5208 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005209{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005210 if(pBeginInfo != nullptr)
5211 {
5212 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005213 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005214 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005215 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005216 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005217 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005218 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005219
5220 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005221}
5222
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005223bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224 VkCmdBuffer cmdBuffer,
5225 VkResult result)
5226{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005229 {
5230 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005231 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5232 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005234
5235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005236}
5237
5238VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5239 VkCmdBuffer cmdBuffer,
5240 const VkCmdBufferBeginInfo* pBeginInfo)
5241{
5242 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005243
Jeremy Hayes99a96322015-06-26 12:48:09 -06005244 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5245
5246 PostBeginCommandBuffer(cmdBuffer, result);
5247
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005248 return result;
5249}
5250
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005251bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005252 VkCmdBuffer cmdBuffer,
5253 VkResult result)
5254{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005255
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005256 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005257 {
5258 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005259 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5260 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005262
5263 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005264}
5265
5266VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5267 VkCmdBuffer cmdBuffer)
5268{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005269 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5270
5271 PostEndCommandBuffer(cmdBuffer, result);
5272
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005273 return result;
5274}
5275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005276bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005278 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005279 VkResult result)
5280{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005282
5283 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005284 {
5285 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005286 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005288 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005289
5290 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005291}
5292
5293VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005294 VkCmdBuffer cmdBuffer,
5295 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005297 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005298
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005299 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005300
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005301 return result;
5302}
5303
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005304bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005305 VkCmdBuffer cmdBuffer,
5306 VkPipelineBindPoint pipelineBindPoint,
5307 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005308{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005309
5310 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5311 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5312 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005313 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005314 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005315 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316 }
5317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005318
5319 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005320}
5321
Jeremy Hayes99a96322015-06-26 12:48:09 -06005322VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5323 VkCmdBuffer cmdBuffer,
5324 VkPipelineBindPoint pipelineBindPoint,
5325 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005326{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005327 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5328
5329 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5330}
5331
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005332VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005333{
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005334 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5335}
5336
5337VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5338{
5339 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005340}
5341
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005342VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005344 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005345}
5346
Chia-I Wud8c946a2015-10-26 19:08:09 +08005347VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005348{
Chia-I Wud8c946a2015-10-26 19:08:09 +08005349 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005350}
5351
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005352VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConst[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005353{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005354 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConst);
Cody Northrop12365112015-08-17 11:10:49 -06005355}
5356
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005357VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005358{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005359 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005360}
5361
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005362VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005363{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005364 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005365}
5366
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005367VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005368{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005369 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005370}
5371
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005372VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005373{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005374 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005375}
5376
5377bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005378 VkCmdBuffer cmdBuffer,
5379 const VkDescriptorSet* pDescriptorSets,
5380 const uint32_t* pDynamicOffsets)
5381{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005382 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005383 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005384 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005385
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005386 if(pDynamicOffsets != nullptr)
5387 {
5388 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005389
5390 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005391}
5392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005393bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005394 VkCmdBuffer cmdBuffer,
5395 VkPipelineBindPoint pipelineBindPoint,
5396 VkPipelineLayout layout,
5397 uint32_t firstSet,
5398 uint32_t setCount,
5399 uint32_t dynamicOffsetCount)
5400{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005401
5402 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5403 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5404 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005405 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005406 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005407 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005408 }
5409
5410
5411
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005412
5413
5414 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005415}
5416
5417VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5418 VkCmdBuffer cmdBuffer,
5419 VkPipelineBindPoint pipelineBindPoint,
5420 VkPipelineLayout layout,
5421 uint32_t firstSet,
5422 uint32_t setCount,
5423 const VkDescriptorSet* pDescriptorSets,
5424 uint32_t dynamicOffsetCount,
5425 const uint32_t* pDynamicOffsets)
5426{
5427 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005428
Jeremy Hayes99a96322015-06-26 12:48:09 -06005429 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5430
5431 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5432}
5433
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005434bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435 VkCmdBuffer cmdBuffer,
5436 VkBuffer buffer,
5437 VkDeviceSize offset,
5438 VkIndexType indexType)
5439{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005440
Jeremy Hayes99a96322015-06-26 12:48:09 -06005441
5442
5443 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5444 indexType > VK_INDEX_TYPE_END_RANGE)
5445 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005446 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005447 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005449 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005450
5451 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452}
5453
5454VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5455 VkCmdBuffer cmdBuffer,
5456 VkBuffer buffer,
5457 VkDeviceSize offset,
5458 VkIndexType indexType)
5459{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5461
5462 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5463}
5464
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005465bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466 VkCmdBuffer cmdBuffer,
5467 const VkBuffer* pBuffers,
5468 const VkDeviceSize* pOffsets)
5469{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005470 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005472 }
5473
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005474 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005475 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005476 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005477
5478 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005479}
5480
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005481bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005482 VkCmdBuffer cmdBuffer,
5483 uint32_t startBinding,
5484 uint32_t bindingCount)
5485{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005486
5487
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005488
5489 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005490}
5491
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005492VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493 VkCmdBuffer cmdBuffer,
5494 uint32_t startBinding,
5495 uint32_t bindingCount,
5496 const VkBuffer* pBuffers,
5497 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005498{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005499 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005500
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5502
5503 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005504}
5505
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005506bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005507 VkCmdBuffer cmdBuffer,
5508 uint32_t firstVertex,
5509 uint32_t vertexCount,
5510 uint32_t firstInstance,
5511 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005512{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005513
5514
5515
5516
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005517
5518 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005519}
5520
Jeremy Hayes99a96322015-06-26 12:48:09 -06005521VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5522 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005524 uint32_t instanceCount,
5525 uint32_t firstVertex,
5526 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005527{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005528 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529
5530 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005531}
5532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534 VkCmdBuffer cmdBuffer,
5535 uint32_t firstIndex,
5536 uint32_t indexCount,
5537 int32_t vertexOffset,
5538 uint32_t firstInstance,
5539 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005540{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005541
5542
5543
5544
5545
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005546
5547 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005548}
5549
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5551 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005552 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005553 uint32_t instanceCount,
5554 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005555 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005556 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005557{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005558 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559
5560 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5561}
5562
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005563bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564 VkCmdBuffer cmdBuffer,
5565 VkBuffer buffer,
5566 VkDeviceSize offset,
5567 uint32_t count,
5568 uint32_t stride)
5569{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005570
5571
5572
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005573
5574
5575 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005576}
5577
5578VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5579 VkCmdBuffer cmdBuffer,
5580 VkBuffer buffer,
5581 VkDeviceSize offset,
5582 uint32_t count,
5583 uint32_t stride)
5584{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005585 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5586
5587 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5588}
5589
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005590bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005591 VkCmdBuffer cmdBuffer,
5592 VkBuffer buffer,
5593 VkDeviceSize offset,
5594 uint32_t count,
5595 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005596{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597
5598
5599
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005600
5601
5602 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005603}
5604
Jeremy Hayes99a96322015-06-26 12:48:09 -06005605VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5606 VkCmdBuffer cmdBuffer,
5607 VkBuffer buffer,
5608 VkDeviceSize offset,
5609 uint32_t count,
5610 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005611{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5613
5614 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5615}
5616
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005617bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005618 VkCmdBuffer cmdBuffer,
5619 uint32_t x,
5620 uint32_t y,
5621 uint32_t z)
5622{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005623
5624
5625
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626
5627 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628}
5629
5630VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5631 VkCmdBuffer cmdBuffer,
5632 uint32_t x,
5633 uint32_t y,
5634 uint32_t z)
5635{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5637
5638 PostCmdDispatch(cmdBuffer, x, y, z);
5639}
5640
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005641bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005642 VkCmdBuffer cmdBuffer,
5643 VkBuffer buffer,
5644 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005645{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005646
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005648
5649 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005650}
5651
Jeremy Hayes99a96322015-06-26 12:48:09 -06005652VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5653 VkCmdBuffer cmdBuffer,
5654 VkBuffer buffer,
5655 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005656{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5658
5659 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005660}
5661
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005662bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005663 VkCmdBuffer cmdBuffer,
5664 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005665{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005666 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005668 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005669
5670 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671}
5672
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005673bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005674 VkCmdBuffer cmdBuffer,
5675 VkBuffer srcBuffer,
5676 VkBuffer destBuffer,
5677 uint32_t regionCount)
5678{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005679
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680
Jeremy Hayes99a96322015-06-26 12:48:09 -06005681
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005682
5683 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684}
5685
5686VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5687 VkCmdBuffer cmdBuffer,
5688 VkBuffer srcBuffer,
5689 VkBuffer destBuffer,
5690 uint32_t regionCount,
5691 const VkBufferCopy* pRegions)
5692{
5693 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005694
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5696
5697 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5698}
5699
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005700bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005701 VkCmdBuffer cmdBuffer,
5702 const VkImageCopy* pRegions)
5703{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005704 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005706 if ((pRegions->srcSubresource.aspect &
5707 (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 -06005708 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005709 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005710 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005711 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005712 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005713 if ((pRegions->destSubresource.aspect &
5714 (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 -06005715 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005716 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005717 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005718 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005719 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005720 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005721
5722 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005723}
5724
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005725bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726 VkCmdBuffer cmdBuffer,
5727 VkImage srcImage,
5728 VkImageLayout srcImageLayout,
5729 VkImage destImage,
5730 VkImageLayout destImageLayout,
5731 uint32_t regionCount)
5732{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734
5735 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5736 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5737 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005738 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005739 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005740 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741 }
5742
Jeremy Hayes99a96322015-06-26 12:48:09 -06005743
5744 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5745 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5746 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005747 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005748 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005749 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005750 }
5751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005752
5753 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754}
5755
5756VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5757 VkCmdBuffer cmdBuffer,
5758 VkImage srcImage,
5759 VkImageLayout srcImageLayout,
5760 VkImage destImage,
5761 VkImageLayout destImageLayout,
5762 uint32_t regionCount,
5763 const VkImageCopy* pRegions)
5764{
5765 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005766
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5768
5769 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5770}
5771
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005772bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773 VkCmdBuffer cmdBuffer,
5774 const VkImageBlit* pRegions)
5775{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005776 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005777 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005778 if ((pRegions->srcSubresource.aspect &
5779 (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 -06005780 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005781 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005782 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005783 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005785 if ((pRegions->destSubresource.aspect &
5786 (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 -06005787 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005788 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005789 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005790 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005791 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005792 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005793
5794 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005795}
5796
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005797bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 VkCmdBuffer cmdBuffer,
5799 VkImage srcImage,
5800 VkImageLayout srcImageLayout,
5801 VkImage destImage,
5802 VkImageLayout destImageLayout,
5803 uint32_t regionCount,
5804 VkTexFilter filter)
5805{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005806
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807
5808 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5809 srcImageLayout > 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 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005813 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814 }
5815
Jeremy Hayes99a96322015-06-26 12:48:09 -06005816
5817 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5818 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5819 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005820 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005821 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005822 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005823 }
5824
5825
5826 if(filter < VK_TEX_FILTER_BEGIN_RANGE ||
5827 filter > VK_TEX_FILTER_END_RANGE)
5828 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005829 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005830 "vkCmdBlitImage parameter, VkTexFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005831 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005833
5834 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005835}
5836
5837VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5838 VkCmdBuffer cmdBuffer,
5839 VkImage srcImage,
5840 VkImageLayout srcImageLayout,
5841 VkImage destImage,
5842 VkImageLayout destImageLayout,
5843 uint32_t regionCount,
5844 const VkImageBlit* pRegions,
5845 VkTexFilter filter)
5846{
5847 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005848
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5850
5851 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5852}
5853
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005854bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005855 VkCmdBuffer cmdBuffer,
5856 const VkBufferImageCopy* pRegions)
5857{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005858 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005860 if ((pRegions->imageSubresource.aspect &
5861 (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 -06005862 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005864 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005865 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005866 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005867 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005868
5869 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870}
5871
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873 VkCmdBuffer cmdBuffer,
5874 VkBuffer srcBuffer,
5875 VkImage destImage,
5876 VkImageLayout destImageLayout,
5877 uint32_t regionCount)
5878{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005879
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880
Jeremy Hayes99a96322015-06-26 12:48:09 -06005881
5882 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5883 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5884 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005885 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005886 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005887 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005888 }
5889
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890
5891 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892}
5893
5894VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5895 VkCmdBuffer cmdBuffer,
5896 VkBuffer srcBuffer,
5897 VkImage destImage,
5898 VkImageLayout destImageLayout,
5899 uint32_t regionCount,
5900 const VkBufferImageCopy* pRegions)
5901{
5902 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903
Jeremy Hayes99a96322015-06-26 12:48:09 -06005904 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5905
5906 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5907}
5908
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005909bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005910 VkCmdBuffer cmdBuffer,
5911 const VkBufferImageCopy* pRegions)
5912{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005913 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005914 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005915 if ((pRegions->imageSubresource.aspect &
5916 (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 -06005917 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005919 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005920 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005921 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005922 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005923
5924 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005925}
5926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005927bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928 VkCmdBuffer cmdBuffer,
5929 VkImage srcImage,
5930 VkImageLayout srcImageLayout,
5931 VkBuffer destBuffer,
5932 uint32_t regionCount)
5933{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005934
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935
5936 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5937 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5938 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005939 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005940 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005941 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005942 }
5943
Jeremy Hayes99a96322015-06-26 12:48:09 -06005944
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005945
5946 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005947}
5948
5949VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5950 VkCmdBuffer cmdBuffer,
5951 VkImage srcImage,
5952 VkImageLayout srcImageLayout,
5953 VkBuffer destBuffer,
5954 uint32_t regionCount,
5955 const VkBufferImageCopy* pRegions)
5956{
5957 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005958
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5960
5961 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5962}
5963
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005964bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965 VkCmdBuffer cmdBuffer,
5966 const uint32_t* pData)
5967{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005968 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005969 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005971
5972 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973}
5974
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005975bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005976 VkCmdBuffer cmdBuffer,
5977 VkBuffer destBuffer,
5978 VkDeviceSize destOffset,
5979 VkDeviceSize dataSize)
5980{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005981
5982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983
5984
5985 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986}
5987
5988VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
5989 VkCmdBuffer cmdBuffer,
5990 VkBuffer destBuffer,
5991 VkDeviceSize destOffset,
5992 VkDeviceSize dataSize,
5993 const uint32_t* pData)
5994{
5995 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005996
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
5998
5999 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
6000}
6001
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006002bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003 VkCmdBuffer cmdBuffer,
6004 VkBuffer destBuffer,
6005 VkDeviceSize destOffset,
6006 VkDeviceSize fillSize,
6007 uint32_t data)
6008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009
6010
6011
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006012
6013
6014 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015}
6016
6017VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
6018 VkCmdBuffer cmdBuffer,
6019 VkBuffer destBuffer,
6020 VkDeviceSize destOffset,
6021 VkDeviceSize fillSize,
6022 uint32_t data)
6023{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6025
6026 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
6027}
6028
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006029bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12006031 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006032 const VkImageSubresourceRange* pRanges)
6033{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006034 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006035 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036 }
6037
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006038 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006040 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006041 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006042
6043 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044}
6045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006046bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047 VkCmdBuffer cmdBuffer,
6048 VkImage image,
6049 VkImageLayout imageLayout,
6050 uint32_t rangeCount)
6051{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052
Jeremy Hayes99a96322015-06-26 12:48:09 -06006053
6054 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6055 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6056 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006057 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006058 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006059 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006060 }
6061
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006062
6063 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064}
6065
6066VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
6067 VkCmdBuffer cmdBuffer,
6068 VkImage image,
6069 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12006070 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071 uint32_t rangeCount,
6072 const VkImageSubresourceRange* pRanges)
6073{
6074 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006075
Jeremy Hayes99a96322015-06-26 12:48:09 -06006076 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
6077
6078 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
6079}
6080
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006081bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082 VkCmdBuffer cmdBuffer,
6083 const VkImageSubresourceRange* pRanges)
6084{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006085 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06006087 /*
6088 * TODO: How do we validation pRanges->aspectMask?
6089 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
6090 * VK_IMAGE_ASPECT_STENCIL_BIT.
6091 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006092 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006093
6094 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095}
6096
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006097bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098 VkCmdBuffer cmdBuffer,
6099 VkImage image,
6100 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006101 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006102 uint32_t rangeCount)
6103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105
6106 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6107 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6108 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006109 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006110 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006111 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112 }
6113
6114
6115
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006116
6117 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118}
6119
Chris Forbesd9be82b2015-06-22 17:21:59 +12006120VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006121 VkCmdBuffer cmdBuffer,
6122 VkImage image,
6123 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006124 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125 uint32_t rangeCount,
6126 const VkImageSubresourceRange* pRanges)
6127{
Chris Forbesd9be82b2015-06-22 17:21:59 +12006128 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006129
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006130 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006131
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06006132 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133}
6134
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006135bool PreCmdClearAttachments(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006136 VkCmdBuffer cmdBuffer,
6137 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006138 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006139{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006140 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006141 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006142 }
6143
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006144 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006145 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006146 }
6147
6148 return true;
6149}
6150
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006151VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
6152 VkCmdBuffer cmdBuffer,
6153 uint32_t attachmentCount,
6154 const VkClearAttachment* pAttachments,
6155 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06006156 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006157{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006158 for (uint32_t i = 0; i < attachmentCount; i++) {
6159 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006160 }
6161
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06006162 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006163}
6164
6165bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006166 VkCmdBuffer cmdBuffer,
6167 const VkImageResolve* pRegions)
6168{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006169 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006170 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006171 if ((pRegions->srcSubresource.aspect &
6172 (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 -06006173 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006174 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006175 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006176 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006177 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06006178 if ((pRegions->destSubresource.aspect &
6179 (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 -06006180 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006181 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006182 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006183 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006184 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006185 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006186
6187 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188}
6189
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006190bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006191 VkCmdBuffer cmdBuffer,
6192 VkImage srcImage,
6193 VkImageLayout srcImageLayout,
6194 VkImage destImage,
6195 VkImageLayout destImageLayout,
6196 uint32_t regionCount)
6197{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198
Jeremy Hayes99a96322015-06-26 12:48:09 -06006199
6200 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6201 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6202 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006203 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006204 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006206 }
6207
Jeremy Hayes99a96322015-06-26 12:48:09 -06006208
6209 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6210 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6211 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006212 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006213 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006215 }
6216
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006217
6218 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006219}
6220
6221VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6222 VkCmdBuffer cmdBuffer,
6223 VkImage srcImage,
6224 VkImageLayout srcImageLayout,
6225 VkImage destImage,
6226 VkImageLayout destImageLayout,
6227 uint32_t regionCount,
6228 const VkImageResolve* pRegions)
6229{
6230 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006231
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6233
6234 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6235}
6236
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006237bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006238 VkCmdBuffer cmdBuffer,
6239 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006240 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006242
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006244
6245 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006246}
6247
6248VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6249 VkCmdBuffer cmdBuffer,
6250 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006251 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006253 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006254
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006255 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256}
6257
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006258bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006259 VkCmdBuffer cmdBuffer,
6260 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006261 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006262{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006263
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006265
6266 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267}
6268
6269VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6270 VkCmdBuffer cmdBuffer,
6271 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006272 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006273{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006274 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006276 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006277}
6278
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006279bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280 VkCmdBuffer cmdBuffer,
6281 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006282 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006284 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006285 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006286 }
6287
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006288 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006290 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006291
6292 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293}
6294
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006295bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006297 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006298 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006299 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006300 uint32_t memBarrierCount)
6301{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006302
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006303
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304
6305
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006306
6307 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006308}
6309
6310VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6311 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006312 uint32_t eventCount,
6313 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006314 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006315 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006316 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006317 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006318{
6319 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006320
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006321 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006322
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006323 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006324}
6325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006326bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006328 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006329{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006330 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006331 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006332 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006333
6334 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006335}
6336
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006337bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006339 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006340 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006341 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006342 uint32_t memBarrierCount)
6343{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006344
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006345
Jeremy Hayes99a96322015-06-26 12:48:09 -06006346
6347
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006348
6349 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006350}
6351
6352VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6353 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006354 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006355 VkPipelineStageFlags destStageMask,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06006356 VkBool32 byRegion,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006357 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006358 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006359{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006360 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006361
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006362 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006363
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006364 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, byRegion, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006365}
6366
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006367bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006368 VkCmdBuffer cmdBuffer,
6369 VkQueryPool queryPool,
6370 uint32_t slot,
6371 VkQueryControlFlags flags)
6372{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006373
Jeremy Hayes99a96322015-06-26 12:48:09 -06006374
6375
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006376
6377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006378}
6379
6380VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6381 VkCmdBuffer cmdBuffer,
6382 VkQueryPool queryPool,
6383 uint32_t slot,
6384 VkQueryControlFlags flags)
6385{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006386 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6387
6388 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6389}
6390
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006391bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006392 VkCmdBuffer cmdBuffer,
6393 VkQueryPool queryPool,
6394 uint32_t slot)
6395{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006396
Jeremy Hayes99a96322015-06-26 12:48:09 -06006397
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006398
6399 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006400}
6401
6402VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6403 VkCmdBuffer cmdBuffer,
6404 VkQueryPool queryPool,
6405 uint32_t slot)
6406{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006407 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6408
6409 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6410}
6411
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006412bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006413 VkCmdBuffer cmdBuffer,
6414 VkQueryPool queryPool,
6415 uint32_t startQuery,
6416 uint32_t queryCount)
6417{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006418
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419
6420
6421
6422 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006423}
6424
6425VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6426 VkCmdBuffer cmdBuffer,
6427 VkQueryPool queryPool,
6428 uint32_t startQuery,
6429 uint32_t queryCount)
6430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006431 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6432
6433 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6434}
6435
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006436bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006437 VkCmdBuffer cmdBuffer,
6438 VkTimestampType timestampType,
6439 VkBuffer destBuffer,
6440 VkDeviceSize destOffset)
6441{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006442
6443 if(timestampType < VK_TIMESTAMP_TYPE_BEGIN_RANGE ||
6444 timestampType > VK_TIMESTAMP_TYPE_END_RANGE)
6445 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006446 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006447 "vkCmdWriteTimestamp parameter, VkTimestampType timestampType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006448 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006449 }
6450
Jeremy Hayes99a96322015-06-26 12:48:09 -06006451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006452
6453 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454}
6455
6456VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6457 VkCmdBuffer cmdBuffer,
6458 VkTimestampType timestampType,
6459 VkBuffer destBuffer,
6460 VkDeviceSize destOffset)
6461{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006462 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6463
6464 PostCmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
6465}
6466
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006467bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 VkCmdBuffer cmdBuffer,
6469 VkQueryPool queryPool,
6470 uint32_t startQuery,
6471 uint32_t queryCount,
6472 VkBuffer destBuffer,
6473 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006474 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 VkQueryResultFlags flags)
6476{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006477
6478
6479
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006480
Jeremy Hayes99a96322015-06-26 12:48:09 -06006481
6482
6483
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006484
6485 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006486}
6487
Jeremy Hayesad367152015-04-17 10:36:53 -06006488VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 VkCmdBuffer cmdBuffer,
6490 VkQueryPool queryPool,
6491 uint32_t startQuery,
6492 uint32_t queryCount,
6493 VkBuffer destBuffer,
6494 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006495 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006497{
Chia-I Wuccc93a72015-10-26 18:36:20 +08006498 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006499
Chia-I Wuccc93a72015-10-26 18:36:20 +08006500 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006501}
6502
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006503bool PreCmdPushConstants(
6504 VkCmdBuffer cmdBuffer,
6505 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006507 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006510
6511 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512}
6513
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006514bool PostCmdPushConstants(
6515 VkCmdBuffer cmdBuffer,
6516 VkPipelineLayout layout,
6517 VkShaderStageFlags stageFlags,
6518 uint32_t start,
6519 uint32_t length)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006520{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006523
6524
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006525
6526 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527}
6528
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006529VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6530 VkCmdBuffer cmdBuffer,
6531 VkPipelineLayout layout,
6532 VkShaderStageFlags stageFlags,
6533 uint32_t start,
6534 uint32_t length,
6535 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006536{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006537 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006538
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006539 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, start, length, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006541 PostCmdPushConstants(cmdBuffer, layout, stageFlags, start, length);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006542}
6543
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006544bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006545 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006546 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006547{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006548 if(pRenderPassBegin != nullptr)
6549 {
6550 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006552 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006553 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006554 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006555 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006556 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006558 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006559 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006560
6561 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006562}
6563
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006564bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006565 VkCmdBuffer cmdBuffer,
6566 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006567{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006568
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006569 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6570 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6571 {
6572 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6573 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6574 return false;
6575 }
6576
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006577 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006578}
6579
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6581 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006582 const VkRenderPassBeginInfo* pRenderPassBegin,
6583 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006584{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006585 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6586
Chia-I Wu08accc62015-07-07 11:50:03 +08006587 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006589 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006590}
6591
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006592bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006593 VkCmdBuffer cmdBuffer,
6594 VkRenderPassContents contents)
6595{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006596
6597 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006598 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006599 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006600 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006601 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6602 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006603 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006604
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006605 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006606}
6607
6608VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6609 VkCmdBuffer cmdBuffer,
6610 VkRenderPassContents contents)
6611{
Chia-I Wu08accc62015-07-07 11:50:03 +08006612 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6613
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006614 PostCmdNextSubpass(cmdBuffer, contents);
6615}
6616
6617bool PostCmdEndRenderPass(
6618 VkCmdBuffer cmdBuffer)
6619{
6620
6621 return true;
6622}
6623
6624VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6625 VkCmdBuffer cmdBuffer)
6626{
6627 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6628
6629 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006630}
6631
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006632bool PreCmdExecuteCommands(
6633 VkCmdBuffer cmdBuffer,
6634 const VkCmdBuffer* pCmdBuffers)
6635{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006636 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006637 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006638 }
6639
6640 return true;
6641}
6642
6643bool PostCmdExecuteCommands(
6644 VkCmdBuffer cmdBuffer,
6645 uint32_t cmdBuffersCount)
6646{
6647
6648
6649 return true;
6650}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006651
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006652VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006653 VkCmdBuffer cmdBuffer,
6654 uint32_t cmdBuffersCount,
6655 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006656{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006657 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6658
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006659 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6660
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006661 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006662}
6663
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006664VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006665{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006666 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006667 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006668 }
6669
Jon Ashburn8fd08252015-05-28 16:25:02 -06006670 /* loader uses this to force layer initialization; device object is wrapped */
6671 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006672 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006673 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006674 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006675
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006676 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006677 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006678 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006679 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006680 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006681 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006682 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006683 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006684 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006685 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006686 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006687 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006688 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006689 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006690 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006691 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006692 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006693 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006694 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006695 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006696 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006697 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006698 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006699 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006700 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006701 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006702 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006703 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006704 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006705 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006706 if (!strcmp(funcName, "vkQueueSignalSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006707 return (PFN_vkVoidFunction) vkQueueSignalSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006708 if (!strcmp(funcName, "vkQueueWaitSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006709 return (PFN_vkVoidFunction) vkQueueWaitSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006710 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006711 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006712 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006713 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006714 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006715 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006716 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006717 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006718 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006719 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006720 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006721 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006722 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006723 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006724 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006725 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006726 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006727 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006728 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006729 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006730 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006731 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006732 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006733 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006734 if (!strcmp(funcName, "vkCreateShaderModule"))
6735 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006736 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006737 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006738 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006739 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006740 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006741 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006742 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006743 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006744 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006745 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006746 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006747 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006748 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006749 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006750 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006751 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006752 if (!strcmp(funcName, "vkCmdSetViewport"))
6753 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006754 if (!strcmp(funcName, "vkCmdSetScissor"))
6755 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006756 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6757 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6758 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6759 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6760 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6761 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6762 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6763 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6764 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6765 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6766 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6767 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6768 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6769 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06006770 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6771 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006772 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006773 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006774 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006775 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006776 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006777 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006778 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006779 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006780 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006781 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006782 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006783 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006784 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006785 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006786 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006787 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006788 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006789 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006790 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006791 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006792 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006793 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006794 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006795 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006796 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006797 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006798 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006799 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006800 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006801 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006802 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006803 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006804 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006805 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006806 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006807 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006808 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006809 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006810 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006811 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006812 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006813 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006814 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006815 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006816 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006817 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006818 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006819 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006820 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006821 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006822 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006823 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006824 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006825 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006826 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006827 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006828 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006829 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006830 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006831 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006832 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006833 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006834 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006835 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006836 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006837 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006838 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006839 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006840 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006841 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006842
Jon Ashburneab34492015-06-01 09:37:38 -06006843 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006844 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006845 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006846 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006847 }
6848}
6849
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006850VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006851{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006852 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006853 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006854 }
6855
Jon Ashburn8fd08252015-05-28 16:25:02 -06006856 /* loader uses this to force layer initialization; instance object is wrapped */
6857 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006858 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006859 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006860 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006861
Jeremy Hayes99a96322015-06-26 12:48:09 -06006862 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006863 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006864 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006865 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006866 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006867 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006868 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006869 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006870 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006871 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006872 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006873 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006874 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6875 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6876 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6877 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6878 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6879 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6880 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6881 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006882
Jeremy Hayes99a96322015-06-26 12:48:09 -06006883 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006884 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006885 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006886 return fptr;
6887
Jeremy Hayes99a96322015-06-26 12:48:09 -06006888 {
6889 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6890 return NULL;
6891 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6892 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006893}