blob: 2181e44f5a10ec3b503b7c016e214fbc5d3983f1 [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{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800450 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600451 VK_QUEUE_DMA_BIT |
452 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800453 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600454 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;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600472 if(enumerator & VK_QUEUE_DMA_BIT)
473 {
474 strings.push_back("VK_QUEUE_DMA_BIT");
475 }
476 if(enumerator & VK_QUEUE_COMPUTE_BIT)
477 {
478 strings.push_back("VK_QUEUE_COMPUTE_BIT");
479 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800480 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600481 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800482 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600483 }
484 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
485 {
486 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
487 }
488
489 std::string enumeratorString;
490 for(auto const& string : strings)
491 {
492 enumeratorString += string;
493
494 if(string != strings.back())
495 {
496 enumeratorString += '|';
497 }
498 }
499
500 return enumeratorString;
501}
502
503static
504bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
505{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600506 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600507 VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT |
508 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
509 VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT |
510 VK_MEMORY_PROPERTY_DEVICE_ONLY);
511 if(enumerator & (~allFlags))
512 {
513 return false;
514 }
515
516 return true;
517}
518
519static
520std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
521{
522 if(!ValidateEnumerator(enumerator))
523 {
524 return "unrecognized enumerator";
525 }
526
527 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600528 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
529 {
530 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
531 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600532 if(enumerator & VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT)
533 {
534 strings.push_back("VK_MEMORY_PROPERTY_HOST_NON_COHERENT_BIT");
535 }
536 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
539 }
540 if(enumerator & VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT)
541 {
542 strings.push_back("VK_MEMORY_PROPERTY_HOST_UNCACHED_BIT");
543 }
544 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_ONLY)
545 {
546 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_ONLY");
547 }
548
549 std::string enumeratorString;
550 for(auto const& string : strings)
551 {
552 enumeratorString += string;
553
554 if(string != strings.back())
555 {
556 enumeratorString += '|';
557 }
558 }
559
560 return enumeratorString;
561}
562
563static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600564bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600565{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600566 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_HOST_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600567 if(enumerator & (~allFlags))
568 {
569 return false;
570 }
571
572 return true;
573}
574
575static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600576std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600577{
578 if(!ValidateEnumerator(enumerator))
579 {
580 return "unrecognized enumerator";
581 }
582
583 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600584 if(enumerator & VK_MEMORY_HEAP_HOST_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -0600586 strings.push_back("VK_MEMORY_HEAP_HOST_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600587 }
588
589 std::string enumeratorString;
590 for(auto const& string : strings)
591 {
592 enumeratorString += string;
593
594 if(string != strings.back())
595 {
596 enumeratorString += '|';
597 }
598 }
599
600 return enumeratorString;
601}
602
603static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600604bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
605{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800606 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
607 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
608 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600609 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600610 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600611 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600612 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600613
614 return true;
615}
616
617static
618std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
619{
620 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600621 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600622 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600623 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600624
625 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800626 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800628 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800630 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600631 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800632 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600633 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800634 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600635 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800636 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600637 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600638
639 std::string enumeratorString;
640 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600641 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600642 enumeratorString += string;
643
644 if(string != strings.back())
645 {
646 enumeratorString += '|';
647 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600648 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600649
650 return enumeratorString;
651}
652
653static
654bool ValidateEnumerator(VkSparseMemoryBindFlagBits const& enumerator)
655{
Chia-I Wu85f34a72015-10-26 19:26:04 +0800656 VkSparseMemoryBindFlagBits allFlags = (VkSparseMemoryBindFlagBits)(VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600657 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600658 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600659 return false;
660 }
661
662 return true;
663}
664
665static
666std::string EnumeratorString(VkSparseMemoryBindFlagBits const& enumerator)
667{
668 if(!ValidateEnumerator(enumerator))
669 {
670 return "unrecognized enumerator";
671 }
672
673 std::vector<std::string> strings;
Chia-I Wu85f34a72015-10-26 19:26:04 +0800674 if(enumerator & VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600675 {
Chia-I Wu85f34a72015-10-26 19:26:04 +0800676 strings.push_back("VK_SPARSE_MEMORY_BIND_REPLICATE_BLOCK_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600677 }
678
679 std::string enumeratorString;
680 for(auto const& string : strings)
681 {
682 enumeratorString += string;
683
684 if(string != strings.back())
685 {
686 enumeratorString += '|';
687 }
688 }
689
690 return enumeratorString;
691}
692
693static
694bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
695{
696 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
697 if(enumerator & (~allFlags))
698 {
699 return false;
700 }
701
702 return true;
703}
704
705static
706std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
707{
708 if(!ValidateEnumerator(enumerator))
709 {
710 return "unrecognized enumerator";
711 }
712
713 std::vector<std::string> strings;
714 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
715 {
716 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
717 }
718
719 std::string enumeratorString;
720 for(auto const& string : strings)
721 {
722 enumeratorString += string;
723
724 if(string != strings.back())
725 {
726 enumeratorString += '|';
727 }
728 }
729
730 return enumeratorString;
731}
732
733static
734bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
735{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600736 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
737 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
738 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
739 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
740 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600747 if(enumerator & (~allFlags))
748 {
749 return false;
750 }
751
752 return true;
753}
754
755static
756std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
757{
758 if(!ValidateEnumerator(enumerator))
759 {
760 return "unrecognized enumerator";
761 }
762
763 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600764 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600765 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_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_PRIMITIVES_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_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_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_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_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_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 }
808
809 std::string enumeratorString;
810 for(auto const& string : strings)
811 {
812 enumeratorString += string;
813
814 if(string != strings.back())
815 {
816 enumeratorString += '|';
817 }
818 }
819
820 return enumeratorString;
821}
822
823static
824bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
825{
826 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
827 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
828 VK_QUERY_RESULT_WAIT_BIT |
829 VK_QUERY_RESULT_64_BIT |
830 VK_QUERY_RESULT_DEFAULT);
831 if(enumerator & (~allFlags))
832 {
833 return false;
834 }
835
836 return true;
837}
838
839static
840std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
841{
842 if(!ValidateEnumerator(enumerator))
843 {
844 return "unrecognized enumerator";
845 }
846
847 std::vector<std::string> strings;
848 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
849 {
850 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
851 }
852 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
853 {
854 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
855 }
856 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
857 {
858 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
859 }
860 if(enumerator & VK_QUERY_RESULT_64_BIT)
861 {
862 strings.push_back("VK_QUERY_RESULT_64_BIT");
863 }
864 if(enumerator & VK_QUERY_RESULT_DEFAULT)
865 {
866 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600867 }
868
869 std::string enumeratorString;
870 for(auto const& string : strings)
871 {
872 enumeratorString += string;
873
874 if(string != strings.back())
875 {
876 enumeratorString += '|';
877 }
878 }
879
880 return enumeratorString;
881}
882
883static
884bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
885{
886 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
887 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
888 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
889 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
890 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
891 VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT |
892 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
893 VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600894 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600895 if(enumerator & (~allFlags))
896 {
897 return false;
898 }
899
900 return true;
901}
902
903static
904std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
905{
906 if(!ValidateEnumerator(enumerator))
907 {
908 return "unrecognized enumerator";
909 }
910
911 std::vector<std::string> strings;
912 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
913 {
914 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
915 }
916 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
917 {
918 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
919 }
920 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
921 {
922 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
923 }
924 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
925 {
926 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
927 }
928 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
929 {
930 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
931 }
932 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT)
933 {
934 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DESTINATION_BIT");
935 }
936 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
937 {
938 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
939 }
940 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT)
941 {
942 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SOURCE_BIT");
943 }
944 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
945 {
946 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
947 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600948
949 std::string enumeratorString;
950 for(auto const& string : strings)
951 {
952 enumeratorString += string;
953
954 if(string != strings.back())
955 {
956 enumeratorString += '|';
957 }
958 }
959
960 return enumeratorString;
961}
962
963static
964bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
965{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600966 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
967 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600968 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600969 if(enumerator & (~allFlags))
970 {
971 return false;
972 }
973
974 return true;
975}
976
977static
978std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
979{
980 if(!ValidateEnumerator(enumerator))
981 {
982 return "unrecognized enumerator";
983 }
984
985 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600986 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
987 {
988 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
989 }
990 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
991 {
992 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
993 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600994 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600995 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600996 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600997 }
998
999 std::string enumeratorString;
1000 for(auto const& string : strings)
1001 {
1002 enumeratorString += string;
1003
1004 if(string != strings.back())
1005 {
1006 enumeratorString += '|';
1007 }
1008 }
1009
1010 return enumeratorString;
1011}
1012
1013static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001014bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1015{
1016 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001017 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1018 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001019 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001020 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001021 if(enumerator & (~allFlags))
1022 {
1023 return false;
1024 }
1025
1026 return true;
1027}
1028
1029static
1030std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1031{
1032 if(!ValidateEnumerator(enumerator))
1033 {
1034 return "unrecognized enumerator";
1035 }
1036
1037 std::vector<std::string> strings;
1038 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1039 {
1040 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1041 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001042 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1043 {
1044 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1045 }
1046 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1047 {
1048 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1049 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001050 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1051 {
1052 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1053 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001054 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001055 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001056 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001057 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058
1059 std::string enumeratorString;
1060 for(auto const& string : strings)
1061 {
1062 enumeratorString += string;
1063
1064 if(string != strings.back())
1065 {
1066 enumeratorString += '|';
1067 }
1068 }
1069
1070 return enumeratorString;
1071}
1072
1073static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001074bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1075{
1076 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1077 VK_CHANNEL_B_BIT |
1078 VK_CHANNEL_G_BIT |
1079 VK_CHANNEL_R_BIT);
1080 if(enumerator & (~allFlags))
1081 {
1082 return false;
1083 }
1084
1085 return true;
1086}
1087
1088static
1089std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1090{
1091 if(!ValidateEnumerator(enumerator))
1092 {
1093 return "unrecognized enumerator";
1094 }
1095
1096 std::vector<std::string> strings;
1097 if(enumerator & VK_CHANNEL_A_BIT)
1098 {
1099 strings.push_back("VK_CHANNEL_A_BIT");
1100 }
1101 if(enumerator & VK_CHANNEL_B_BIT)
1102 {
1103 strings.push_back("VK_CHANNEL_B_BIT");
1104 }
1105 if(enumerator & VK_CHANNEL_G_BIT)
1106 {
1107 strings.push_back("VK_CHANNEL_G_BIT");
1108 }
1109 if(enumerator & VK_CHANNEL_R_BIT)
1110 {
1111 strings.push_back("VK_CHANNEL_R_BIT");
1112 }
1113
1114 std::string enumeratorString;
1115 for(auto const& string : strings)
1116 {
1117 enumeratorString += string;
1118
1119 if(string != strings.back())
1120 {
1121 enumeratorString += '|';
1122 }
1123 }
1124
1125 return enumeratorString;
1126}
1127
1128static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001129bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001130{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001131 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1132 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1133 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001134 if(enumerator & (~allFlags))
1135 {
1136 return false;
1137 }
1138
1139 return true;
1140}
1141
1142static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001143std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001144{
1145 if(!ValidateEnumerator(enumerator))
1146 {
1147 return "unrecognized enumerator";
1148 }
1149
1150 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001151 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001152 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001153 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1154 }
1155 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1156 {
1157 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1158 }
1159 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1160 {
1161 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001162 }
1163
1164 std::string enumeratorString;
1165 for(auto const& string : strings)
1166 {
1167 enumeratorString += string;
1168
1169 if(string != strings.back())
1170 {
1171 enumeratorString += '|';
1172 }
1173 }
1174
1175 return enumeratorString;
1176}
1177
1178static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001179bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001180{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001181 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1182 VK_SHADER_STAGE_FRAGMENT_BIT |
1183 VK_SHADER_STAGE_GEOMETRY_BIT |
1184 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001185 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1186 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001187 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001188 if(enumerator & (~allFlags))
1189 {
1190 return false;
1191 }
1192
1193 return true;
1194}
1195
1196static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001197std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001198{
1199 if(!ValidateEnumerator(enumerator))
1200 {
1201 return "unrecognized enumerator";
1202 }
1203
1204 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001205 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001206 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001207 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001208 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001209 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001210 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001211 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001212 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001213 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001214 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001215 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1216 }
1217 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1218 {
1219 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1220 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001221 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001222 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001223 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001225 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001226 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001227 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228 }
1229 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1230 {
1231 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001232 }
1233
1234 std::string enumeratorString;
1235 for(auto const& string : strings)
1236 {
1237 enumeratorString += string;
1238
1239 if(string != strings.back())
1240 {
1241 enumeratorString += '|';
1242 }
1243 }
1244
1245 return enumeratorString;
1246}
1247
1248static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001249bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001250{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001251 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1252 VK_PIPELINE_STAGE_HOST_BIT |
1253 VK_PIPELINE_STAGE_TRANSFER_BIT |
1254 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1255 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1256 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001257 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001258 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001259 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1260 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1261 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001262 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001263 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1264 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1265 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1266 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001267 if(enumerator & (~allFlags))
1268 {
1269 return false;
1270 }
1271
1272 return true;
1273}
1274
1275static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001276std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001277{
1278 if(!ValidateEnumerator(enumerator))
1279 {
1280 return "unrecognized enumerator";
1281 }
1282
1283 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001284 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001285 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001286 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001287 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001288 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001289 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001290 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001291 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001292 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001293 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001294 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001295 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001296 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001297 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001298 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001299 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001300 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001301 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001302 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001303 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001304 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001305 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001306 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001307 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001308 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001309 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001310 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001311 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001312 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001313 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001314 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001316 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001317 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001318 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001319 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001320 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001321 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001322 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1323 }
1324 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1325 {
1326 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1327 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001328 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001329 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001330 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001331 }
1332 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1333 {
1334 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1335 }
1336 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1337 {
1338 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1339 }
1340 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1341 {
1342 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1343 }
1344 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1345 {
1346 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001347 }
1348
1349 std::string enumeratorString;
1350 for(auto const& string : strings)
1351 {
1352 enumeratorString += string;
1353
1354 if(string != strings.back())
1355 {
1356 enumeratorString += '|';
1357 }
1358 }
1359
1360 return enumeratorString;
1361}
1362
1363static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001364bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001365{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001366 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1367 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1368 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1369 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1370 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001371 if(enumerator & (~allFlags))
1372 {
1373 return false;
1374 }
1375
1376 return true;
1377}
1378
1379static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001380std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001381{
1382 if(!ValidateEnumerator(enumerator))
1383 {
1384 return "unrecognized enumerator";
1385 }
1386
1387 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001388 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001389 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001390 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001391 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001392 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001393 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001394 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001395 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001396 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001397 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001398 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1399 }
1400 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1401 {
1402 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1403 }
1404 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1405 {
1406 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001407 }
1408
1409 std::string enumeratorString;
1410 for(auto const& string : strings)
1411 {
1412 enumeratorString += string;
1413
1414 if(string != strings.back())
1415 {
1416 enumeratorString += '|';
1417 }
1418 }
1419
1420 return enumeratorString;
1421}
1422
1423static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001424bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001425{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001426 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1427 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1428 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1429 VK_MEMORY_INPUT_SHADER_READ_BIT |
1430 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1431 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1432 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1433 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1434 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1435 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 if(enumerator & (~allFlags))
1437 {
1438 return false;
1439 }
1440
1441 return true;
1442}
1443
1444static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001445std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001446{
1447 if(!ValidateEnumerator(enumerator))
1448 {
1449 return "unrecognized enumerator";
1450 }
1451
1452 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001453 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001454 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001455 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1456 }
1457 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1458 {
1459 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1460 }
1461 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1462 {
1463 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1464 }
1465 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1466 {
1467 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1468 }
1469 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1470 {
1471 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1472 }
1473 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1474 {
1475 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1476 }
1477 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1478 {
1479 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1480 }
1481 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1482 {
1483 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1484 }
1485 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1486 {
1487 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1488 }
1489 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1490 {
1491 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001492 }
1493
1494 std::string enumeratorString;
1495 for(auto const& string : strings)
1496 {
1497 enumeratorString += string;
1498
1499 if(string != strings.back())
1500 {
1501 enumeratorString += '|';
1502 }
1503 }
1504
1505 return enumeratorString;
1506}
1507
1508static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001509bool ValidateEnumerator(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001510{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001511 VkCmdPoolCreateFlagBits allFlags = (VkCmdPoolCreateFlagBits)(VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1512 VK_CMD_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001513 if(enumerator & (~allFlags))
1514 {
1515 return false;
1516 }
1517
1518 return true;
1519}
1520
1521static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001522std::string EnumeratorString(VkCmdPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001523{
1524 if(!ValidateEnumerator(enumerator))
1525 {
1526 return "unrecognized enumerator";
1527 }
1528
1529 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001530 if(enumerator & VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001531 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001532 strings.push_back("VK_CMD_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001533 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534 if(enumerator & VK_CMD_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001535 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001536 strings.push_back("VK_CMD_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001537 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001538
1539 std::string enumeratorString;
1540 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001541 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542 enumeratorString += string;
1543
1544 if(string != strings.back())
1545 {
1546 enumeratorString += '|';
1547 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001548 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001549
1550 return enumeratorString;
1551}
1552
1553static
1554bool ValidateEnumerator(VkCmdPoolResetFlagBits const& enumerator)
1555{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001556 VkCmdPoolResetFlagBits allFlags = (VkCmdPoolResetFlagBits)(VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001557 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001558 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001559 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001560 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001561
1562 return true;
1563}
1564
1565static
1566std::string EnumeratorString(VkCmdPoolResetFlagBits const& enumerator)
1567{
1568 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001569 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001570 return "unrecognized enumerator";
1571 }
1572
1573 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001574 if(enumerator & VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001575 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001576 strings.push_back("VK_CMD_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001577 }
1578
1579 std::string enumeratorString;
1580 for(auto const& string : strings)
1581 {
1582 enumeratorString += string;
1583
1584 if(string != strings.back())
1585 {
1586 enumeratorString += '|';
1587 }
1588 }
1589
1590 return enumeratorString;
1591}
1592
1593static
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001594bool ValidateEnumerator(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001595{
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001596 VkCmdBufferUsageFlags allFlags = (VkCmdBufferUsageFlags)(VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1597 VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1598 VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001599 if(enumerator & (~allFlags))
1600 {
1601 return false;
1602 }
1603
1604 return true;
1605}
1606
1607static
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001608std::string EnumeratorString(VkCmdBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001609{
1610 if(!ValidateEnumerator(enumerator))
1611 {
1612 return "unrecognized enumerator";
1613 }
1614
1615 std::vector<std::string> strings;
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001616 if(enumerator & VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001617 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001618 strings.push_back("VK_CMD_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001619 }
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001620 if(enumerator & VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001621 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001622 strings.push_back("VK_CMD_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001623 }
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001624 if(enumerator & VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625 {
Courtney Goeltzenleuchter04bb5f82015-10-21 18:11:04 -06001626 strings.push_back("VK_CMD_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001627 }
1628
1629 std::string enumeratorString;
1630 for(auto const& string : strings)
1631 {
1632 enumeratorString += string;
1633
1634 if(string != strings.back())
1635 {
1636 enumeratorString += '|';
1637 }
1638 }
1639
1640 return enumeratorString;
1641}
1642
1643static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001644bool ValidateEnumerator(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001645{
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001646 VkCmdBufferResetFlagBits allFlags = (VkCmdBufferResetFlagBits)(VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001647 if(enumerator & (~allFlags))
1648 {
1649 return false;
1650 }
1651
1652 return true;
1653}
1654
1655static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001656std::string EnumeratorString(VkCmdBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001657{
1658 if(!ValidateEnumerator(enumerator))
1659 {
1660 return "unrecognized enumerator";
1661 }
1662
1663 std::vector<std::string> strings;
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001664 if(enumerator & VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001665 {
Courtney Goeltzenleuchter7b0d95d2015-09-11 11:40:48 -06001666 strings.push_back("VK_CMD_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001667 }
1668
1669 std::string enumeratorString;
1670 for(auto const& string : strings)
1671 {
1672 enumeratorString += string;
1673
1674 if(string != strings.back())
1675 {
1676 enumeratorString += '|';
1677 }
1678 }
1679
1680 return enumeratorString;
1681}
1682
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001683static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001684bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001685{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001686 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1687 VK_IMAGE_ASPECT_STENCIL_BIT |
1688 VK_IMAGE_ASPECT_DEPTH_BIT |
1689 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001690 if(enumerator & (~allFlags))
1691 {
1692 return false;
1693 }
1694
1695 return true;
1696}
1697
1698static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001699std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001700{
1701 if(!ValidateEnumerator(enumerator))
1702 {
1703 return "unrecognized enumerator";
1704 }
1705
1706 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001707 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001708 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001709 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1710 }
1711 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1712 {
1713 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1714 }
1715 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1716 {
1717 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1718 }
1719 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1720 {
1721 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1722 }
1723
1724 std::string enumeratorString;
1725 for(auto const& string : strings)
1726 {
1727 enumeratorString += string;
1728
1729 if(string != strings.back())
1730 {
1731 enumeratorString += '|';
1732 }
1733 }
1734
1735 return enumeratorString;
1736}
1737
1738static
1739bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1740{
1741 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1742 if(enumerator & (~allFlags))
1743 {
1744 return false;
1745 }
1746
1747 return true;
1748}
1749
1750static
1751std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1752{
1753 if(!ValidateEnumerator(enumerator))
1754 {
1755 return "unrecognized enumerator";
1756 }
1757
1758 std::vector<std::string> strings;
1759 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1760 {
1761 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001762 }
1763
1764 std::string enumeratorString;
1765 for(auto const& string : strings)
1766 {
1767 enumeratorString += string;
1768
1769 if(string != strings.back())
1770 {
1771 enumeratorString += '|';
1772 }
1773 }
1774
1775 return enumeratorString;
1776}
1777
Jeremy Hayes99a96322015-06-26 12:48:09 -06001778VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1779 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08001780 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001781 VkInstance* pInstance)
1782{
1783 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001784 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001785
1786 if (result == VK_SUCCESS) {
1787 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001788 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001789 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001790
1791 InitParamChecker(data);
1792 }
1793
1794 return result;
1795}
1796
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001797VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001798 VkInstance instance,
1799 const VkAllocCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001800{
1801 // Grab the key before the instance is destroyed.
1802 dispatch_key key = get_dispatch_key(instance);
1803 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001804 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001805
1806 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001807 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1808 while (my_data->logging_callback.size() > 0) {
1809 VkDbgMsgCallback callback = my_data->logging_callback.back();
1810 layer_destroy_msg_callback(my_data->report_data, callback);
1811 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812 }
1813
1814 layer_debug_report_destroy_instance(mid(instance));
1815 layer_data_map.erase(pTable);
1816
1817 pc_instance_table_map.erase(key);
1818 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001819}
1820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001821bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001822 VkInstance instance,
1823 uint32_t* pPhysicalDeviceCount,
1824 VkPhysicalDevice* pPhysicalDevices,
1825 VkResult result)
1826{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001827
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001828 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001830 }
1831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001832 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001833 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001834 }
1835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001836 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001837 {
1838 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001839 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1840 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001842
1843 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844}
1845
1846VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1847 VkInstance instance,
1848 uint32_t* pPhysicalDeviceCount,
1849 VkPhysicalDevice* pPhysicalDevices)
1850{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1852
1853 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1854
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001855 return result;
1856}
1857
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001858bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001859 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001860 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001861{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001862
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001863 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001864 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865 }
1866
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001867 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001868}
1869
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001870VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001871 VkPhysicalDevice physicalDevice,
1872 VkPhysicalDeviceFeatures* pFeatures)
1873{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001874 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001876 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001877}
1878
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001879bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880 VkPhysicalDevice physicalDevice,
1881 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001882 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001883{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884
1885 if(format < VK_FORMAT_BEGIN_RANGE ||
1886 format > VK_FORMAT_END_RANGE)
1887 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001888 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001889 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001890 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891 }
1892
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001893 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001894 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001895 }
1896
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001897 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001898}
1899
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001900VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001901 VkPhysicalDevice physicalDevice,
1902 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001903 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001904{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001905 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001906
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001907 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001908}
1909
1910bool PostGetPhysicalDeviceImageFormatProperties(
1911 VkPhysicalDevice physicalDevice,
1912 VkFormat format,
1913 VkImageType type,
1914 VkImageTiling tiling,
1915 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001916 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001917 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001918{
1919
1920 if(format < VK_FORMAT_BEGIN_RANGE ||
1921 format > VK_FORMAT_END_RANGE)
1922 {
1923 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1924 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1925 return false;
1926 }
1927
1928 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1929 type > VK_IMAGE_TYPE_END_RANGE)
1930 {
1931 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1932 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1933 return false;
1934 }
1935
1936 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1937 tiling > VK_IMAGE_TILING_END_RANGE)
1938 {
1939 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1940 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1941 return false;
1942 }
1943
1944
1945 if(pImageFormatProperties != nullptr)
1946 {
1947 }
1948
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001949 return true;
1950}
1951
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001952VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001953 VkPhysicalDevice physicalDevice,
1954 VkFormat format,
1955 VkImageType type,
1956 VkImageTiling tiling,
1957 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001958 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001959 VkImageFormatProperties* pImageFormatProperties)
1960{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001961 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001962
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001963 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001964}
1965
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001966bool PostGetPhysicalDeviceProperties(
1967 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001968 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001969{
1970
1971 if(pProperties != nullptr)
1972 {
1973 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1974 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1975 {
1976 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1977 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1978 return false;
1979 }
1980 }
1981
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001982 return true;
1983}
1984
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001985VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001986 VkPhysicalDevice physicalDevice,
1987 VkPhysicalDeviceProperties* pProperties)
1988{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001989 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001990
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001991 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001992}
1993
Cody Northropd0802882015-08-03 17:04:53 -06001994bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001995 VkPhysicalDevice physicalDevice,
1996 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001997 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998{
1999
Cody Northropd0802882015-08-03 17:04:53 -06002000 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002001 {
2002 }
2003
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002004 if(pQueueProperties != nullptr)
2005 {
2006 }
2007
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002008 return true;
2009}
2010
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06002011VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002012 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002013 uint32_t* pCount,
2014 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002015{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002016 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002017
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002018 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019}
2020
2021bool PostGetPhysicalDeviceMemoryProperties(
2022 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002023 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024{
2025
2026 if(pMemoryProperties != nullptr)
2027 {
2028 }
2029
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030 return true;
2031}
2032
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002033VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002034 VkPhysicalDevice physicalDevice,
2035 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2036{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002037 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002038
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002039 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002040}
2041
Jeremy Hayes99a96322015-06-26 12:48:09 -06002042VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2043 VkPhysicalDevice physicalDevice,
2044 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08002045 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002046 VkDevice* pDevice)
2047{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002048 /*
2049 * NOTE: The loader fills in the ICD's device object in *pDevice.
2050 * Use that object to get the dispatch table.
2051 *
2052 * NOTE: We do not validate physicalDevice or any dispatchable
2053 * object as the first parameter. We couldn't get here if it was wrong!
2054 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002055 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002056 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002057 if(result == VK_SUCCESS)
2058 {
2059 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2060 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2061 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2062 }
2063
2064 return result;
2065}
2066
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002067VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002068 VkDevice device,
2069 const VkAllocCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002070{
2071 layer_debug_report_destroy_device(device);
2072
2073 dispatch_key key = get_dispatch_key(device);
2074#if DISPATCH_MAP_DEBUG
2075 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2076#endif
2077
Chia-I Wuf7458c52015-10-26 21:10:41 +08002078 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002079 pc_device_table_map.erase(key);
2080 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081}
2082
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002083bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002084 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002085 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002086 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002087 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002089
2090
2091
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002092 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002093 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002094 }
2095
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002096 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002097}
2098
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002099VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002100 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002101 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002102 uint32_t queueIndex,
2103 VkQueue* pQueue)
2104{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002105 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002106
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002107 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002108}
2109
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002110bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002111 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002112 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002113{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002114 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2115 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002116 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002117 return false;
2118 }
2119
2120 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002121 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002122 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002123
2124 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002125}
2126
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002127bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002128 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002129 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002130 VkFence fence,
2131 VkResult result)
2132{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002133
2134
Jeremy Hayes99a96322015-06-26 12:48:09 -06002135
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002136 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 {
2138 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002139 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2140 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002142
2143 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002144}
2145
2146VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2147 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002148 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002149 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002150 VkFence fence)
2151{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002152 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002153 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002154 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002155
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002156 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002158 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159
2160 return result;
2161}
2162
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002163bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002164 VkQueue queue,
2165 VkResult result)
2166{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002167
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002168 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 {
2170 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002171 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2172 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002173 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002174
2175 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176}
2177
2178VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2179 VkQueue queue)
2180{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002181 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2182
2183 PostQueueWaitIdle(queue, result);
2184
2185 return result;
2186}
2187
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002188bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189 VkDevice device,
2190 VkResult result)
2191{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002192
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002193 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194 {
2195 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002196 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2197 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002199
2200 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002201}
2202
2203VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2204 VkDevice device)
2205{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2207
2208 PostDeviceWaitIdle(device, result);
2209
2210 return result;
2211}
2212
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002213bool PreAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 VkDevice device,
2215 const VkMemoryAllocInfo* pAllocInfo)
2216{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002217 if(pAllocInfo != nullptr)
2218 {
2219 if(pAllocInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002222 "vkAllocMemory parameter, VkStructureType pAllocInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002223 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002224 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002226
2227 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228}
2229
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002230bool PostAllocMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002231 VkDevice device,
2232 VkDeviceMemory* pMem,
2233 VkResult result)
2234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002236 if(pMem != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002237 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002238 }
2239
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002240 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002241 {
2242 std::string reason = "vkAllocMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2244 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002246
2247 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248}
2249
2250VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(
2251 VkDevice device,
2252 const VkMemoryAllocInfo* pAllocInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08002253 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002254 VkDeviceMemory* pMem)
2255{
2256 PreAllocMemory(device, pAllocInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002257
Chia-I Wuf7458c52015-10-26 21:10:41 +08002258 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocMemory(device, pAllocInfo, pAllocator, pMem);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002259
2260 PostAllocMemory(device, pMem, result);
2261
2262 return result;
2263}
2264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002265bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002266 VkDevice device,
2267 VkDeviceMemory mem,
2268 VkDeviceSize offset,
2269 VkDeviceSize size,
2270 VkMemoryMapFlags flags,
2271 void** ppData,
2272 VkResult result)
2273{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275
2276
2277
2278
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002279 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281 }
2282
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002283 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002284 {
2285 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002288 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002289
2290 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002291}
2292
2293VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2294 VkDevice device,
2295 VkDeviceMemory mem,
2296 VkDeviceSize offset,
2297 VkDeviceSize size,
2298 VkMemoryMapFlags flags,
2299 void** ppData)
2300{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2302
2303 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2304
2305 return result;
2306}
2307
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002308bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309 VkDevice device,
2310 const VkMappedMemoryRange* pMemRanges)
2311{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002312 if(pMemRanges != nullptr)
2313 {
2314 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002316 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002317 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002318 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002320 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002321
2322 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323}
2324
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002325bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002326 VkDevice device,
2327 uint32_t memRangeCount,
2328 VkResult result)
2329{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330
2331
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002332 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333 {
2334 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2336 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002337 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002338
2339 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002340}
2341
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002342VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002343 VkDevice device,
2344 uint32_t memRangeCount,
2345 const VkMappedMemoryRange* pMemRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002346{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347 PreFlushMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002348
Jeremy Hayes99a96322015-06-26 12:48:09 -06002349 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memRangeCount, pMemRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002350
Jeremy Hayes99a96322015-06-26 12:48:09 -06002351 PostFlushMappedMemoryRanges(device, memRangeCount, result);
2352
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002353 return result;
2354}
2355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357 VkDevice device,
2358 const VkMappedMemoryRange* pMemRanges)
2359{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002360 if(pMemRanges != nullptr)
2361 {
2362 if(pMemRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002363 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002364 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002365 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002366 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002367 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002369
2370 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002371}
2372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002373bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374 VkDevice device,
2375 uint32_t memRangeCount,
2376 VkResult result)
2377{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378
2379
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002380 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 {
2382 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002383 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2384 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002385 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386
2387 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002388}
2389
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002390VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391 VkDevice device,
2392 uint32_t memRangeCount,
2393 const VkMappedMemoryRange* pMemRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395 PreInvalidateMappedMemoryRanges(device, pMemRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002396
Jeremy Hayes99a96322015-06-26 12:48:09 -06002397 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memRangeCount, pMemRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002398
Jeremy Hayes99a96322015-06-26 12:48:09 -06002399 PostInvalidateMappedMemoryRanges(device, memRangeCount, result);
2400
Tony Barbourb1250542015-04-16 19:23:13 -06002401 return result;
2402}
2403
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002404bool PostGetDeviceMemoryCommitment(
2405 VkDevice device,
2406 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002407 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002408{
2409
2410
2411 if(pCommittedMemoryInBytes != nullptr)
2412 {
2413 }
2414
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002415 return true;
2416}
2417
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002418VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002419 VkDevice device,
2420 VkDeviceMemory memory,
2421 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002422{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002423 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002424
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002425 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002426}
2427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002428bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002429 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002430 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002431 VkDeviceMemory mem,
2432 VkDeviceSize memOffset,
2433 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002434{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002436
Jeremy Hayes99a96322015-06-26 12:48:09 -06002437
2438
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002439 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002440 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2442 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002445
2446 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002447}
2448
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002449VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002450 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002451 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002452 VkDeviceMemory mem,
2453 VkDeviceSize memOffset)
2454{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002455 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002457 PostBindBufferMemory(device, buffer, mem, memOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002458
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002459 return result;
2460}
2461
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002462bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002463 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 VkImage image,
2465 VkDeviceMemory mem,
2466 VkDeviceSize memOffset,
2467 VkResult result)
2468{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002469
2470
2471
2472
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002473 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002474 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002475 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2477 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002478 }
2479
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480 return true;
2481}
2482
2483VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2484 VkDevice device,
2485 VkImage image,
2486 VkDeviceMemory mem,
2487 VkDeviceSize memOffset)
2488{
2489 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memOffset);
2490
2491 PostBindImageMemory(device, image, mem, memOffset, result);
2492
2493 return result;
2494}
2495
2496bool PostGetBufferMemoryRequirements(
2497 VkDevice device,
2498 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002499 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500{
2501
2502
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002503 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002504 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002505 }
2506
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002507 return true;
2508}
2509
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002510VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002511 VkDevice device,
2512 VkBuffer buffer,
2513 VkMemoryRequirements* pMemoryRequirements)
2514{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002515 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002517 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002518}
2519
2520bool PostGetImageMemoryRequirements(
2521 VkDevice device,
2522 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002523 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002524{
2525
2526
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002527 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002528 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002529 }
2530
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002531 return true;
2532}
2533
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002534VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002535 VkDevice device,
2536 VkImage image,
2537 VkMemoryRequirements* pMemoryRequirements)
2538{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002539 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002540
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002541 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542}
2543
2544bool PostGetImageSparseMemoryRequirements(
2545 VkDevice device,
2546 VkImage image,
2547 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002548 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002549{
2550
2551
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002552 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002554 }
2555
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002556 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002558 if ((pSparseMemoryRequirements->formatProperties.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002559 (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 -06002560 {
2561 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002562 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002563 return false;
2564 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002565 }
2566
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567 return true;
2568}
2569
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002570VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002571 VkDevice device,
2572 VkImage image,
2573 uint32_t* pNumRequirements,
2574 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2575{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002576 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002577
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002578 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002579}
2580
2581bool PostGetPhysicalDeviceSparseImageFormatProperties(
2582 VkPhysicalDevice physicalDevice,
2583 VkFormat format,
2584 VkImageType type,
2585 uint32_t samples,
2586 VkImageUsageFlags usage,
2587 VkImageTiling tiling,
2588 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002589 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002590{
2591
2592 if(format < VK_FORMAT_BEGIN_RANGE ||
2593 format > VK_FORMAT_END_RANGE)
2594 {
2595 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002596 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597 return false;
2598 }
2599
2600 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2601 type > VK_IMAGE_TYPE_END_RANGE)
2602 {
2603 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002604 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return false;
2606 }
2607
2608
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609
2610 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2611 tiling > VK_IMAGE_TILING_END_RANGE)
2612 {
2613 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002614 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002615 return false;
2616 }
2617
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002618 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002620 }
2621
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002622 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002623 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002624 if ((pProperties->aspect &
2625 (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 -06002626 {
2627 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002628 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 return false;
2630 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002631 }
2632
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002633 return true;
2634}
2635
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002636VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637 VkPhysicalDevice physicalDevice,
2638 VkFormat format,
2639 VkImageType type,
2640 uint32_t samples,
2641 VkImageUsageFlags usage,
2642 VkImageTiling tiling,
2643 uint32_t* pNumProperties,
2644 VkSparseImageFormatProperties* pProperties)
2645{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002646 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002648 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002649}
2650
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002651bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002653 uint32_t bindInfoCount,
2654 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002655{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002656 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002657 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 }
2659
2660 return true;
2661}
2662
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002663bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002665 uint32_t bindInfoCount,
2666 const VkBindSparseInfo* pBindInfo,
2667 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002668 VkResult result)
2669{
2670
2671
2672
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002673 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002674 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002675 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2677 return false;
2678 }
2679
2680 return true;
2681}
2682
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002683VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002684 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002685 uint32_t bindInfoCount,
2686 const VkBindSparseInfo* pBindInfo,
2687 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002689 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002690
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002691 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002692
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002693 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002694
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002695 return result;
2696}
2697
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002698bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002699 VkDevice device,
2700 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002701{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002702 if(pCreateInfo != nullptr)
2703 {
2704 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002705 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002707 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002708 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002709 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002710 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002711
2712 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002713}
2714
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002715bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002716 VkDevice device,
2717 VkFence* pFence,
2718 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002719{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002720
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002721 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002722 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002723 }
2724
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002725 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002726 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002727 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2729 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002730 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002731
2732 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002733}
2734
2735VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2736 VkDevice device,
2737 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08002738 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002739 VkFence* pFence)
2740{
2741 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002742
Chia-I Wuf7458c52015-10-26 21:10:41 +08002743 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002744
2745 PostCreateFence(device, pFence, result);
2746
2747 return result;
2748}
2749
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002750bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002751 VkDevice device,
2752 const VkFence* pFences)
2753{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002754 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002755 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002756 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002757
2758 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002759}
2760
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002761bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002762 VkDevice device,
2763 uint32_t fenceCount,
2764 VkResult result)
2765{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766
2767
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002768 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002769 {
2770 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002771 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2772 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002773 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002774
2775 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002776}
2777
2778VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2779 VkDevice device,
2780 uint32_t fenceCount,
2781 const VkFence* pFences)
2782{
2783 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002784
Jeremy Hayes99a96322015-06-26 12:48:09 -06002785 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2786
2787 PostResetFences(device, fenceCount, result);
2788
2789 return result;
2790}
2791
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002792bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002793 VkDevice device,
2794 VkFence fence,
2795 VkResult result)
2796{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002797
Jeremy Hayes99a96322015-06-26 12:48:09 -06002798
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002799 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002800 {
2801 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002802 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2803 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002804 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805
2806 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002807}
2808
2809VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2810 VkDevice device,
2811 VkFence fence)
2812{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002813 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2814
2815 PostGetFenceStatus(device, fence, result);
2816
2817 return result;
2818}
2819
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002820bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821 VkDevice device,
2822 const VkFence* pFences)
2823{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002824 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002826 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002827
2828 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002829}
2830
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002831bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002832 VkDevice device,
2833 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002834 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835 uint64_t timeout,
2836 VkResult result)
2837{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002838
2839
2840
2841
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002842 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002843 {
2844 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2846 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002847 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002848
2849 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002850}
2851
2852VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2853 VkDevice device,
2854 uint32_t fenceCount,
2855 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002856 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002857 uint64_t timeout)
2858{
2859 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002860
Jeremy Hayes99a96322015-06-26 12:48:09 -06002861 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2862
2863 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2864
2865 return result;
2866}
2867
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002868bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869 VkDevice device,
2870 const VkSemaphoreCreateInfo* pCreateInfo)
2871{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002872 if(pCreateInfo != nullptr)
2873 {
2874 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002875 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002877 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002878 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002879 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002881
2882 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883}
2884
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002885bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002886 VkDevice device,
2887 VkSemaphore* pSemaphore,
2888 VkResult result)
2889{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002891 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002892 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893 }
2894
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002895 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002896 {
2897 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002898 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2899 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002900 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002901
2902 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002903}
2904
2905VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2906 VkDevice device,
2907 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08002908 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002909 VkSemaphore* pSemaphore)
2910{
2911 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002912
Chia-I Wuf7458c52015-10-26 21:10:41 +08002913 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002914
2915 PostCreateSemaphore(device, pSemaphore, result);
2916
2917 return result;
2918}
2919
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002920bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 VkDevice device,
2922 const VkEventCreateInfo* pCreateInfo)
2923{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002924 if(pCreateInfo != nullptr)
2925 {
2926 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002928 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002929 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002930 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002931 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002933
2934 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002935}
2936
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002937bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 VkDevice device,
2939 VkEvent* pEvent,
2940 VkResult result)
2941{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002942
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002943 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002944 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945 }
2946
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002947 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948 {
2949 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2951 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002952 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002953
2954 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002955}
2956
2957VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2958 VkDevice device,
2959 const VkEventCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08002960 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002961 VkEvent* pEvent)
2962{
2963 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002964
Chia-I Wuf7458c52015-10-26 21:10:41 +08002965 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966
2967 PostCreateEvent(device, pEvent, result);
2968
2969 return result;
2970}
2971
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002972bool PostGetEventStatus(
2973 VkDevice device,
2974 VkEvent event,
2975 VkResult result)
2976{
2977
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002979 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002980 {
2981 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2983 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002984 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002985
2986 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002987}
2988
2989VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2990 VkDevice device,
2991 VkEvent event)
2992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2994
2995 PostGetEventStatus(device, event, result);
2996
2997 return result;
2998}
2999
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003000bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001 VkDevice device,
3002 VkEvent event,
3003 VkResult result)
3004{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003005
Jeremy Hayes99a96322015-06-26 12:48:09 -06003006
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003007 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 {
3009 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003010 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3011 return false;
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
3017VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
3018 VkDevice device,
3019 VkEvent event)
3020{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3022
3023 PostSetEvent(device, event, result);
3024
3025 return result;
3026}
3027
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003028bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003029 VkDevice device,
3030 VkEvent event,
3031 VkResult result)
3032{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033
Jeremy Hayes99a96322015-06-26 12:48:09 -06003034
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003035 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 {
3037 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003038 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3039 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003040 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003041
3042 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003043}
3044
3045VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3046 VkDevice device,
3047 VkEvent event)
3048{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003049 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3050
3051 PostResetEvent(device, event, result);
3052
3053 return result;
3054}
3055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003057 VkDevice device,
3058 const VkQueryPoolCreateInfo* pCreateInfo)
3059{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003060 if(pCreateInfo != nullptr)
3061 {
3062 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003063 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003064 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003065 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003066 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003067 }
3068 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3069 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3070 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003071 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003072 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003073 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003074 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003076
3077 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078}
3079
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003080bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 VkDevice device,
3082 VkQueryPool* pQueryPool,
3083 VkResult result)
3084{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003086 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088 }
3089
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003090 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 {
3092 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003093 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3094 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003095 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003096
3097 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003098}
3099
3100VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3101 VkDevice device,
3102 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003103 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003104 VkQueryPool* pQueryPool)
3105{
3106 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107
Chia-I Wuf7458c52015-10-26 21:10:41 +08003108 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109
3110 PostCreateQueryPool(device, pQueryPool, result);
3111
3112 return result;
3113}
3114
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003115bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116 VkDevice device,
3117 VkQueryPool queryPool,
3118 uint32_t startQuery,
3119 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003120 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003122 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003123 VkQueryResultFlags flags,
3124 VkResult result)
3125{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127
3128
3129
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003130 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003132 }
3133
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003135 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 {
3137 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003138 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3139 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003140 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003141
3142 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003143}
3144
3145VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3146 VkDevice device,
3147 VkQueryPool queryPool,
3148 uint32_t startQuery,
3149 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003150 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003152 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003153 VkQueryResultFlags flags)
3154{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003155 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 -06003156
Chia-I Wuccc93a72015-10-26 18:36:20 +08003157 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158
3159 return result;
3160}
3161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003162bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163 VkDevice device,
3164 const VkBufferCreateInfo* pCreateInfo)
3165{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003166 if(pCreateInfo != nullptr)
3167 {
3168 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003169 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003170 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003171 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003172 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003174 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3175 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003176 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003178 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003181 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003182 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003183 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003185
3186 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187}
3188
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003189bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003190 VkDevice device,
3191 VkBuffer* pBuffer,
3192 VkResult result)
3193{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003195 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197 }
3198
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003199 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 {
3201 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3203 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003205
3206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003207}
3208
3209VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3210 VkDevice device,
3211 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003212 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003213 VkBuffer* pBuffer)
3214{
3215 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003216
Chia-I Wuf7458c52015-10-26 21:10:41 +08003217 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003218
3219 PostCreateBuffer(device, pBuffer, result);
3220
3221 return result;
3222}
3223
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 VkDevice device,
3226 const VkBufferViewCreateInfo* pCreateInfo)
3227{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003228 if(pCreateInfo != nullptr)
3229 {
3230 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003231 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003232 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003233 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003234 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003235 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003236 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3237 pCreateInfo->format > VK_FORMAT_END_RANGE)
3238 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003240 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003241 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003242 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003243 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003244
3245 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246}
3247
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003248bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003249 VkDevice device,
3250 VkBufferView* pView,
3251 VkResult result)
3252{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003254 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003255 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256 }
3257
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003258 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003259 {
3260 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3262 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003263 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003264
3265 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003266}
3267
3268VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3269 VkDevice device,
3270 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003271 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003272 VkBufferView* pView)
3273{
3274 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003275
Chia-I Wuf7458c52015-10-26 21:10:41 +08003276 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003277
3278 PostCreateBufferView(device, pView, result);
3279
3280 return result;
3281}
3282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 VkDevice device,
3285 const VkImageCreateInfo* pCreateInfo)
3286{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003287 if(pCreateInfo != nullptr)
3288 {
3289 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003290 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003291 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003292 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003293 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003294 }
3295 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3296 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3297 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003298 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003299 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003300 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003301 }
3302 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3303 pCreateInfo->format > VK_FORMAT_END_RANGE)
3304 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003305 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003306 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003307 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 }
3309 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3310 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3311 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003313 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003314 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003315 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003316 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3317 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003318 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003319 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3320 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003321 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003322 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003323 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003325 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003326 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003327
3328 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329}
3330
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003331bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003332 VkDevice device,
3333 VkImage* pImage,
3334 VkResult result)
3335{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003336
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003337 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003338 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003339 }
3340
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003341 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342 {
3343 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003344 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3345 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003346 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003347
3348 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003349}
3350
Jeremy Hayes99a96322015-06-26 12:48:09 -06003351VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3352 VkDevice device,
3353 const VkImageCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003354 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003355 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003356{
3357 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003358
Chia-I Wuf7458c52015-10-26 21:10:41 +08003359 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003360
3361 PostCreateImage(device, pImage, result);
3362
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003363 return result;
3364}
3365
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003366bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367 VkDevice device,
3368 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003369{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003370 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003371 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003372 if ((pSubresource->aspect &
3373 (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 -06003374 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003375 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003376 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003377 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003378 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003379 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003380
3381 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382}
3383
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003384bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003385 VkDevice device,
3386 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003387 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389
Jeremy Hayes99a96322015-06-26 12:48:09 -06003390
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003391 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003392 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003393 }
3394
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003396}
3397
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003398VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003399 VkDevice device,
3400 VkImage image,
3401 const VkImageSubresource* pSubresource,
3402 VkSubresourceLayout* pLayout)
3403{
3404 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003405
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003406 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003407
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003408 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003409}
3410
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003411bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003412 VkDevice device,
3413 const VkImageViewCreateInfo* pCreateInfo)
3414{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003415 if(pCreateInfo != nullptr)
3416 {
3417 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003418 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003419 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003420 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 }
3423 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3424 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3425 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003426 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003427 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003428 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003429 }
3430 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3431 pCreateInfo->format > VK_FORMAT_END_RANGE)
3432 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003433 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003434 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003435 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003436 }
3437 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3438 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3439 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003440 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003441 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003442 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003443 }
3444 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3445 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3446 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003447 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003448 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003449 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450 }
3451 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3452 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3453 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003454 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003455 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003457 }
3458 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3459 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3460 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003461 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003462 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003463 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003464 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003465 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003466
3467 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003468}
3469
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003470bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003471 VkDevice device,
3472 VkImageView* pView,
3473 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003474{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003475
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003476 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478 }
3479
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003480 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003481 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003482 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003483 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3484 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003485 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003486
3487 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003488}
3489
3490VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3491 VkDevice device,
3492 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003493 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003494 VkImageView* pView)
3495{
3496 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003497
Chia-I Wuf7458c52015-10-26 21:10:41 +08003498 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003499
3500 PostCreateImageView(device, pView, result);
3501
3502 return result;
3503}
3504
Michael Lentine03d8e572015-09-15 14:59:14 -05003505bool PreCreateShaderModule(
3506 VkDevice device,
3507 const VkShaderModuleCreateInfo* pCreateInfo)
3508{
3509 if(pCreateInfo) {
3510 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3511 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3512 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3513 return false;
3514 }
3515 if(!pCreateInfo->pCode) {
3516 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3517 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3518 return false;
3519 }
3520 } else {
3521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3522 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3523 return false;
3524 }
3525
3526 return true;
3527}
3528
3529bool PostCreateShaderModule(
3530 VkDevice device,
3531 VkShaderModule* pShaderModule,
3532 VkResult result)
3533{
3534 if(result < VK_SUCCESS) {
3535 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3536 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3537 return false;
3538 }
3539
3540 return true;
3541}
3542
3543VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3544 VkDevice device,
3545 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003546 const VkAllocCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003547 VkShaderModule* pShaderModule)
3548{
3549 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003550 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003551 PostCreateShaderModule(device, pShaderModule, result);
3552 return result;
3553}
3554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003555bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 VkDevice device,
3557 const VkShaderCreateInfo* pCreateInfo)
3558{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003559 if(pCreateInfo != nullptr)
3560 {
3561 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003562 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003563 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003564 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003565 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003566 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003567 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003568 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003569 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003571
3572 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573}
3574
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003575bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 VkDevice device,
3577 VkShader* pShader,
3578 VkResult result)
3579{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003580
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003581 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003582 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 }
3584
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003585 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003586 {
3587 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003588 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3589 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003590 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003591
3592 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003593}
3594
3595VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3596 VkDevice device,
3597 const VkShaderCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003598 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003599 VkShader* pShader)
3600{
3601 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003602
Chia-I Wuf7458c52015-10-26 21:10:41 +08003603 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pAllocator, pShader);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003604
3605 PostCreateShader(device, pShader, result);
3606
3607 return result;
3608}
3609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003610bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003611 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003612 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003613{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003614 if(pCreateInfo != nullptr)
3615 {
3616 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003617 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003618 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003620 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003621 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003622 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003623 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003624 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003625 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003626
3627 return true;
3628}
3629
3630bool PostCreatePipelineCache(
3631 VkDevice device,
3632 VkPipelineCache* pPipelineCache,
3633 VkResult result)
3634{
3635
3636 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003637 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003638 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003639
3640 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003641 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003642 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3644 return false;
3645 }
3646
3647 return true;
3648}
3649
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003650VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003651 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003652 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08003653 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003654 VkPipelineCache* pPipelineCache)
3655{
3656 PreCreatePipelineCache(device, pCreateInfo);
3657
Chia-I Wuf7458c52015-10-26 21:10:41 +08003658 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003659
3660 PostCreatePipelineCache(device, pPipelineCache, result);
3661
3662 return result;
3663}
3664
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003665bool PostGetPipelineCacheData(
3666 VkDevice device,
3667 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003668 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003669 void* pData,
3670 VkResult result)
3671{
3672
3673
Chia-I Wub16facd2015-10-26 19:17:06 +08003674 if(pDataSize != nullptr)
3675 {
3676 }
3677
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003678 if(pData != nullptr)
3679 {
3680 }
3681
3682 if(result < VK_SUCCESS)
3683 {
3684 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3685 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3686 return false;
3687 }
3688
3689 return true;
3690}
3691
3692VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3693 VkDevice device,
3694 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003695 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003696 void* pData)
3697{
Chia-I Wub16facd2015-10-26 19:17:06 +08003698 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003699
Chia-I Wub16facd2015-10-26 19:17:06 +08003700 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003701
3702 return result;
3703}
3704
3705bool PreMergePipelineCaches(
3706 VkDevice device,
3707 const VkPipelineCache* pSrcCaches)
3708{
3709 if(pSrcCaches != nullptr)
3710 {
3711 }
3712
3713 return true;
3714}
3715
3716bool PostMergePipelineCaches(
3717 VkDevice device,
3718 VkPipelineCache destCache,
3719 uint32_t srcCacheCount,
3720 VkResult result)
3721{
3722
3723
3724
3725 if(result < VK_SUCCESS)
3726 {
3727 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3729 return false;
3730 }
3731
3732 return true;
3733}
3734
3735VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3736 VkDevice device,
3737 VkPipelineCache destCache,
3738 uint32_t srcCacheCount,
3739 const VkPipelineCache* pSrcCaches)
3740{
3741 PreMergePipelineCaches(device, pSrcCaches);
3742
3743 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, destCache, srcCacheCount, pSrcCaches);
3744
3745 PostMergePipelineCaches(device, destCache, srcCacheCount, result);
3746
3747 return result;
3748}
3749
3750bool PreCreateGraphicsPipelines(
3751 VkDevice device,
3752 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3753{
3754 if(pCreateInfos != nullptr)
3755 {
3756 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3757 {
3758 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3759 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3760 return false;
3761 }
3762 if(pCreateInfos->pStages != nullptr)
3763 {
3764 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3765 {
3766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3767 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3768 return false;
3769 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003770 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3771 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003772 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003773 {
3774 }
3775 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3776 {
3777 }
3778 }
3779 }
3780 if(pCreateInfos->pVertexInputState != nullptr)
3781 {
3782 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3783 {
3784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3785 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3786 return false;
3787 }
3788 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3789 {
3790 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3791 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3792 {
3793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3794 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3795 return false;
3796 }
3797 }
3798 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3799 {
3800 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3801 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3802 {
3803 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3804 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3805 return false;
3806 }
3807 }
3808 }
3809 if(pCreateInfos->pInputAssemblyState != nullptr)
3810 {
3811 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3812 {
3813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3814 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3815 return false;
3816 }
3817 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3818 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3819 {
3820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3821 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3822 return false;
3823 }
3824 }
3825 if(pCreateInfos->pTessellationState != nullptr)
3826 {
3827 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3828 {
3829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3830 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3831 return false;
3832 }
3833 }
3834 if(pCreateInfos->pViewportState != nullptr)
3835 {
3836 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3837 {
3838 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3839 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3840 return false;
3841 }
3842 }
3843 if(pCreateInfos->pRasterState != nullptr)
3844 {
3845 if(pCreateInfos->pRasterState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
3846 {
3847 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3848 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterState->sType, is an invalid enumerator");
3849 return false;
3850 }
3851 if(pCreateInfos->pRasterState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
3852 pCreateInfos->pRasterState->fillMode > VK_FILL_MODE_END_RANGE)
3853 {
3854 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3855 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterState->fillMode, is an unrecognized enumerator");
3856 return false;
3857 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08003858 if(pCreateInfos->pRasterState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 {
3860 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3861 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterState->cullMode, is an unrecognized enumerator");
3862 return false;
3863 }
3864 if(pCreateInfos->pRasterState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3865 pCreateInfos->pRasterState->frontFace > VK_FRONT_FACE_END_RANGE)
3866 {
3867 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3868 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterState->frontFace, is an unrecognized enumerator");
3869 return false;
3870 }
3871 }
3872 if(pCreateInfos->pMultisampleState != nullptr)
3873 {
3874 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3875 {
3876 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3877 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3878 return false;
3879 }
3880 }
3881 if(pCreateInfos->pDepthStencilState != nullptr)
3882 {
3883 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3884 {
3885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3886 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3887 return false;
3888 }
3889 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3890 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3891 {
3892 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3893 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3894 return false;
3895 }
3896 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3897 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3898 {
3899 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3900 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
3901 return false;
3902 }
3903 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3904 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3905 {
3906 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3907 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
3908 return false;
3909 }
3910 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3911 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3912 {
3913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3914 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
3915 return false;
3916 }
3917 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3918 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3919 {
3920 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3921 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
3922 return false;
3923 }
3924 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3925 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3926 {
3927 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3928 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
3929 return false;
3930 }
3931 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3932 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3933 {
3934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3935 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
3936 return false;
3937 }
3938 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3939 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3940 {
3941 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3942 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
3943 return false;
3944 }
3945 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3946 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3947 {
3948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3949 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
3950 return false;
3951 }
3952 }
3953 if(pCreateInfos->pColorBlendState != nullptr)
3954 {
3955 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3956 {
3957 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3958 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3959 return false;
3960 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003961 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3962 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003963 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3964 {
3965 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3966 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3967 return false;
3968 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003969 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003970 {
3971 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
3972 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
3973 {
3974 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3975 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
3976 return false;
3977 }
3978 if(pCreateInfos->pColorBlendState->pAttachments->destBlendColor < VK_BLEND_BEGIN_RANGE ||
3979 pCreateInfos->pColorBlendState->pAttachments->destBlendColor > VK_BLEND_END_RANGE)
3980 {
3981 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3982 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendColor, is an unrecognized enumerator");
3983 return false;
3984 }
3985 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
3986 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
3987 {
3988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3989 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
3990 return false;
3991 }
3992 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
3993 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
3994 {
3995 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3996 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
3997 return false;
3998 }
3999 if(pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha < VK_BLEND_BEGIN_RANGE ||
4000 pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha > VK_BLEND_END_RANGE)
4001 {
4002 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4003 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->destBlendAlpha, is an unrecognized enumerator");
4004 return false;
4005 }
4006 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
4007 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
4008 {
4009 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4010 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
4011 return false;
4012 }
4013 }
4014 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06004015 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
4016 {
4017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4018 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
4019 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020 }
4021
4022 return true;
4023}
4024
4025bool PostCreateGraphicsPipelines(
4026 VkDevice device,
4027 VkPipelineCache pipelineCache,
4028 uint32_t count,
4029 VkPipeline* pPipelines,
4030 VkResult result)
4031{
4032
4033
4034
4035 if(pPipelines != nullptr)
4036 {
4037 }
4038
4039 if(result < VK_SUCCESS)
4040 {
4041 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4042 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4043 return false;
4044 }
4045
4046 return true;
4047}
4048
4049VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4050 VkDevice device,
4051 VkPipelineCache pipelineCache,
4052 uint32_t count,
4053 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004054 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004055 VkPipeline* pPipelines)
4056{
4057 PreCreateGraphicsPipelines(device, pCreateInfos);
4058
Chia-I Wuf7458c52015-10-26 21:10:41 +08004059 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004060
4061 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4062
4063 return result;
4064}
4065
4066bool PreCreateComputePipelines(
4067 VkDevice device,
4068 const VkComputePipelineCreateInfo* pCreateInfos)
4069{
4070 if(pCreateInfos != nullptr)
4071 {
4072 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4073 {
4074 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4075 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4076 return false;
4077 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004078 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004079 {
4080 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4081 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4082 return false;
4083 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004084 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004085 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004086 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004087 {
4088 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004089 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004090 {
4091 }
4092 }
4093 }
4094
4095 return true;
4096}
4097
4098bool PostCreateComputePipelines(
4099 VkDevice device,
4100 VkPipelineCache pipelineCache,
4101 uint32_t count,
4102 VkPipeline* pPipelines,
4103 VkResult result)
4104{
4105
4106
4107
4108 if(pPipelines != nullptr)
4109 {
4110 }
4111
4112 if(result < VK_SUCCESS)
4113 {
4114 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4115 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4116 return false;
4117 }
4118
4119 return true;
4120}
4121
4122VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4123 VkDevice device,
4124 VkPipelineCache pipelineCache,
4125 uint32_t count,
4126 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004127 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 VkPipeline* pPipelines)
4129{
4130 PreCreateComputePipelines(device, pCreateInfos);
4131
Chia-I Wuf7458c52015-10-26 21:10:41 +08004132 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004133
4134 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4135
4136 return result;
4137}
4138
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004139bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004140 VkDevice device,
4141 const VkPipelineLayoutCreateInfo* pCreateInfo)
4142{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004143 if(pCreateInfo != nullptr)
4144 {
4145 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004146 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004147 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004148 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4149 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004150 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004151 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004152 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004153 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004154 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004155 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004156 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004157 }
4158
4159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004160}
4161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004162bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004163 VkDevice device,
4164 VkPipelineLayout* pPipelineLayout,
4165 VkResult result)
4166{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004167
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004168 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004169 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004170 }
4171
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004172 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004173 {
4174 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004175 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4176 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004177 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004178
4179 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004180}
4181
4182VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4183 VkDevice device,
4184 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004185 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004186 VkPipelineLayout* pPipelineLayout)
4187{
4188 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004189
Chia-I Wuf7458c52015-10-26 21:10:41 +08004190 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004191
4192 PostCreatePipelineLayout(device, pPipelineLayout, result);
4193
4194 return result;
4195}
4196
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004197bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004198 VkDevice device,
4199 const VkSamplerCreateInfo* pCreateInfo)
4200{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004201 if(pCreateInfo != nullptr)
4202 {
4203 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004204 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004205 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004206 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004207 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004208 }
Chia-I Wub99df442015-10-26 16:49:32 +08004209 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4210 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004212 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004213 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004214 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 }
Chia-I Wub99df442015-10-26 16:49:32 +08004216 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4217 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004218 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004219 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004220 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004221 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004222 }
Chia-I Wub99df442015-10-26 16:49:32 +08004223 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4224 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004225 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004226 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004227 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004228 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004229 }
Chia-I Wub99df442015-10-26 16:49:32 +08004230 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4231 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004233 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004234 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004235 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004236 }
Chia-I Wub99df442015-10-26 16:49:32 +08004237 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4238 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004239 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004240 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004241 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004242 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004243 }
Chia-I Wub99df442015-10-26 16:49:32 +08004244 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4245 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004246 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004247 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004248 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004249 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004250 }
4251 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4252 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4253 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004255 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004256 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004257 }
4258 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4259 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4260 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004262 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004263 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004264 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004265 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004266
4267 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268}
4269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004270bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271 VkDevice device,
4272 VkSampler* pSampler,
4273 VkResult result)
4274{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004276 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278 }
4279
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004280 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 {
4282 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004283 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4284 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004285 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004286
4287 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288}
4289
4290VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4291 VkDevice device,
4292 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004293 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004294 VkSampler* pSampler)
4295{
4296 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004297
Chia-I Wuf7458c52015-10-26 21:10:41 +08004298 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004299
4300 PostCreateSampler(device, pSampler, result);
4301
4302 return result;
4303}
4304
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004305bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004306 VkDevice device,
4307 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4308{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004309 if(pCreateInfo != nullptr)
4310 {
4311 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004312 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004313 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004314 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004315 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004316 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004317 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004319 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4320 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004322 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004323 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004324 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004325 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004326 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004327 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004328 }
4329 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004331
4332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333}
4334
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004335bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336 VkDevice device,
4337 VkDescriptorSetLayout* pSetLayout,
4338 VkResult result)
4339{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004341 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343 }
4344
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004345 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346 {
4347 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004348 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4349 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004351
4352 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353}
4354
4355VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4356 VkDevice device,
4357 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004358 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 VkDescriptorSetLayout* pSetLayout)
4360{
4361 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004362
Chia-I Wuf7458c52015-10-26 21:10:41 +08004363 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004364
4365 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4366
4367 return result;
4368}
4369
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004370bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 VkDevice device,
4372 const VkDescriptorPoolCreateInfo* pCreateInfo)
4373{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004374 if(pCreateInfo != nullptr)
4375 {
4376 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004377 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004378 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004379 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004382 if(pCreateInfo->pTypeCounts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004384 if(pCreateInfo->pTypeCounts->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4385 pCreateInfo->pTypeCounts->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004387 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004388 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004389 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004390 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004391 }
4392 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004393
4394 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004395}
4396
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004397bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004398 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004399 uint32_t maxSets,
4400 VkDescriptorPool* pDescriptorPool,
4401 VkResult result)
4402{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004403
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004404 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004406 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408 }
4409
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004410 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004411 {
4412 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004413 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004415 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004416
4417 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418}
4419
4420VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4421 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004422 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004423 const VkAllocCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424 VkDescriptorPool* pDescriptorPool)
4425{
4426 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004427
Chia-I Wuf7458c52015-10-26 21:10:41 +08004428 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004429
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004430 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431
4432 return result;
4433}
4434
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004435bool PostResetDescriptorPool(
4436 VkDevice device,
4437 VkDescriptorPool descriptorPool,
4438 VkResult result)
4439{
4440
Jeremy Hayes99a96322015-06-26 12:48:09 -06004441
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004442 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004443 {
4444 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004445 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4446 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004447 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004448
4449 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004450}
4451
4452VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4453 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004454 VkDescriptorPool descriptorPool,
4455 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004456{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004457 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004458
4459 PostResetDescriptorPool(device, descriptorPool, result);
4460
4461 return result;
4462}
4463
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004464bool PreAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004465 VkDevice device,
4466 const VkDescriptorSetLayout* pSetLayouts)
4467{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004468 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004469 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004470 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004471
4472 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004473}
4474
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004475bool PostAllocDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004476 VkDevice device,
4477 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004478 uint32_t count,
4479 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004480 VkResult result)
4481{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004482
Jeremy Hayes99a96322015-06-26 12:48:09 -06004483
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004484 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004485 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004486 }
4487
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004488 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004489 {
4490 std::string reason = "vkAllocDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004491 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4492 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004493 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004494
4495 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004496}
4497
4498VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(
4499 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004500 const VkDescriptorSetAllocInfo* pAllocInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004501 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004502{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004503 PreAllocDescriptorSets(device, pAllocInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004504
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004505 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocDescriptorSets(device, pAllocInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004506
Chia-I Wud50a7d72015-10-26 20:48:51 +08004507 PostAllocDescriptorSets(device, pAllocInfo->descriptorPool, pAllocInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004508
4509 return result;
4510}
4511
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004512bool PreFreeDescriptorSets(
4513 VkDevice device,
4514 const VkDescriptorSet* pDescriptorSets)
4515{
4516 if(pDescriptorSets != nullptr)
4517 {
4518 }
4519
4520 return true;
4521}
4522
4523bool PostFreeDescriptorSets(
4524 VkDevice device,
4525 VkDescriptorPool descriptorPool,
4526 uint32_t count,
4527 VkResult result)
4528{
4529
4530
4531
4532 if(result < VK_SUCCESS)
4533 {
4534 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4535 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4536 return false;
4537 }
4538
4539 return true;
4540}
4541
4542VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4543 VkDevice device,
4544 VkDescriptorPool descriptorPool,
4545 uint32_t count,
4546 const VkDescriptorSet* pDescriptorSets)
4547{
4548 PreFreeDescriptorSets(device, pDescriptorSets);
4549
4550 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4551
4552 PostFreeDescriptorSets(device, descriptorPool, count, result);
4553
4554 return result;
4555}
4556
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004557bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004558 VkDevice device,
4559 const VkWriteDescriptorSet* pDescriptorWrites,
4560 const VkCopyDescriptorSet* pDescriptorCopies)
4561{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004562 if(pDescriptorWrites != nullptr)
4563 {
4564 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004565 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004566 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004567 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 }
4570 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4571 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4572 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004573 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004574 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004575 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004576 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004577 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4578 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4579 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004580 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004581 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4582 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004583 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004585 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004586 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004587 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004588 }
4589 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004590
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004591 if(pDescriptorCopies != nullptr)
4592 {
4593 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004594 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004595 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004596 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004597 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004598 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004599 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004600
4601 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004602}
4603
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004604VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004605 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004606 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004607 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004608 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004609 const VkCopyDescriptorSet* pDescriptorCopies)
4610{
4611 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004612
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004613 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004614}
4615
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004616bool PreCreateFramebuffer(
4617 VkDevice device,
4618 const VkFramebufferCreateInfo* pCreateInfo)
4619{
4620 if(pCreateInfo != nullptr)
4621 {
4622 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4623 {
4624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4625 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4626 return false;
4627 }
4628 if(pCreateInfo->pAttachments != nullptr)
4629 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004630 }
4631 }
4632
4633 return true;
4634}
4635
4636bool PostCreateFramebuffer(
4637 VkDevice device,
4638 VkFramebuffer* pFramebuffer,
4639 VkResult result)
4640{
4641
4642 if(pFramebuffer != nullptr)
4643 {
4644 }
4645
4646 if(result < VK_SUCCESS)
4647 {
4648 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4649 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4650 return false;
4651 }
4652
4653 return true;
4654}
4655
4656VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4657 VkDevice device,
4658 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004659 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004660 VkFramebuffer* pFramebuffer)
4661{
4662 PreCreateFramebuffer(device, pCreateInfo);
4663
Chia-I Wuf7458c52015-10-26 21:10:41 +08004664 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004665
4666 PostCreateFramebuffer(device, pFramebuffer, result);
4667
4668 return result;
4669}
4670
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004671bool PreCreateRenderPass(
4672 VkDevice device,
4673 const VkRenderPassCreateInfo* pCreateInfo)
4674{
4675 if(pCreateInfo != nullptr)
4676 {
4677 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4678 {
4679 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4680 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4681 return false;
4682 }
4683 if(pCreateInfo->pAttachments != nullptr)
4684 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004685 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4686 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4687 {
4688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4689 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4690 return false;
4691 }
4692 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4693 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4694 {
4695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4696 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4697 return false;
4698 }
4699 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4700 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4701 {
4702 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4703 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4704 return false;
4705 }
4706 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4707 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4708 {
4709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4710 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4711 return false;
4712 }
4713 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4714 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4715 {
4716 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4717 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4718 return false;
4719 }
4720 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4721 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4722 {
4723 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4724 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4725 return false;
4726 }
4727 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4728 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4729 {
4730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4731 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4732 return false;
4733 }
4734 }
4735 if(pCreateInfo->pSubpasses != nullptr)
4736 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004737 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4738 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4739 {
4740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4741 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4742 return false;
4743 }
Cody Northropa505dda2015-08-04 11:16:41 -06004744 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004745 {
Cody Northropa505dda2015-08-04 11:16:41 -06004746 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4747 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004748 {
4749 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004750 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004751 return false;
4752 }
4753 }
Cody Northropa505dda2015-08-04 11:16:41 -06004754 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 {
Cody Northropa505dda2015-08-04 11:16:41 -06004756 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4757 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004758 {
4759 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004760 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004761 return false;
4762 }
4763 }
Cody Northropa505dda2015-08-04 11:16:41 -06004764 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004765 {
Cody Northropa505dda2015-08-04 11:16:41 -06004766 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4767 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004768 {
4769 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004770 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004771 return false;
4772 }
4773 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004774 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4775 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4776 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004777 {
4778 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004779 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004780 return false;
4781 }
Cody Northropa505dda2015-08-04 11:16:41 -06004782 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004783 {
Cody Northropa505dda2015-08-04 11:16:41 -06004784 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4785 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004786 {
4787 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004788 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004789 return false;
4790 }
4791 }
4792 }
4793 if(pCreateInfo->pDependencies != nullptr)
4794 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004795 }
4796 }
4797
4798 return true;
4799}
4800
4801bool PostCreateRenderPass(
4802 VkDevice device,
4803 VkRenderPass* pRenderPass,
4804 VkResult result)
4805{
4806
4807 if(pRenderPass != nullptr)
4808 {
4809 }
4810
4811 if(result < VK_SUCCESS)
4812 {
4813 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4815 return false;
4816 }
4817
4818 return true;
4819}
4820
4821VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4822 VkDevice device,
4823 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004824 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004825 VkRenderPass* pRenderPass)
4826{
4827 PreCreateRenderPass(device, pCreateInfo);
4828
Chia-I Wuf7458c52015-10-26 21:10:41 +08004829 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004830
4831 PostCreateRenderPass(device, pRenderPass, result);
4832
4833 return result;
4834}
4835
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004836bool PostGetRenderAreaGranularity(
4837 VkDevice device,
4838 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004839 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004840{
4841
4842
4843 if(pGranularity != nullptr)
4844 {
4845 }
4846
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004847 return true;
4848}
4849
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004850VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004851 VkDevice device,
4852 VkRenderPass renderPass,
4853 VkExtent2D* pGranularity)
4854{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004855 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004856
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004857 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004858}
4859
4860bool PreCreateCommandPool(
4861 VkDevice device,
4862 const VkCmdPoolCreateInfo* pCreateInfo)
4863{
4864 if(pCreateInfo != nullptr)
4865 {
4866 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_POOL_CREATE_INFO)
4867 {
4868 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4869 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4870 return false;
4871 }
4872 }
4873
4874 return true;
4875}
4876
4877bool PostCreateCommandPool(
4878 VkDevice device,
4879 VkCmdPool* pCmdPool,
4880 VkResult result)
4881{
4882
4883 if(pCmdPool != nullptr)
4884 {
4885 }
4886
4887 if(result < VK_SUCCESS)
4888 {
4889 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4890 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4891 return false;
4892 }
4893
4894 return true;
4895}
4896
4897VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4898 VkDevice device,
4899 const VkCmdPoolCreateInfo* pCreateInfo,
Chia-I Wuf7458c52015-10-26 21:10:41 +08004900 const VkAllocCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004901 VkCmdPool* pCmdPool)
4902{
4903 PreCreateCommandPool(device, pCreateInfo);
4904
Chia-I Wuf7458c52015-10-26 21:10:41 +08004905 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCmdPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004906
4907 PostCreateCommandPool(device, pCmdPool, result);
4908
4909 return result;
4910}
4911
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004912bool PostResetCommandPool(
4913 VkDevice device,
4914 VkCmdPool cmdPool,
4915 VkCmdPoolResetFlags flags,
4916 VkResult result)
4917{
4918
4919
4920
4921 if(result < VK_SUCCESS)
4922 {
4923 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4924 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4925 return false;
4926 }
4927
4928 return true;
4929}
4930
4931VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4932 VkDevice device,
4933 VkCmdPool cmdPool,
4934 VkCmdPoolResetFlags flags)
4935{
4936 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, cmdPool, flags);
4937
4938 PostResetCommandPool(device, cmdPool, flags, result);
4939
4940 return result;
4941}
4942
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004943bool PreCreateCommandBuffer(
4944 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004945 const VkCmdBufferAllocInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004946{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004947 if(pCreateInfo != nullptr)
4948 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004949 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004950 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004951 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004952 "vkAllocCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004953 return false;
4954 }
4955 if(pCreateInfo->level < VK_CMD_BUFFER_LEVEL_BEGIN_RANGE ||
4956 pCreateInfo->level > VK_CMD_BUFFER_LEVEL_END_RANGE)
4957 {
4958 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004959 "vkAllocCommandBuffers parameter, VkCmdBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004960 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004961 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004962 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004963
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004964 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004965}
4966
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004967bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004968 VkDevice device,
4969 VkCmdBuffer* pCmdBuffer,
4970 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004971{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004972
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004973 if(pCmdBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004974 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004975 }
4976
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004977 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004978 {
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004979 std::string reason = "vkAllocCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004980 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4981 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004982 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004983
4984 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985}
4986
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004987VK_LAYER_EXPORT VkResult VKAPI vkAllocCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004989 const VkCmdBufferAllocInfo* pCreateInfo,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004990 VkCmdBuffer* pCmdBuffer)
4991{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004992 PreCreateCommandBuffer(device, pCreateInfo);
4993
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004994 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocCommandBuffers(device, pCreateInfo, pCmdBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004995
4996 PostCreateCommandBuffer(device, pCmdBuffer, result);
4997
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004998 return result;
4999}
5000
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005001bool PreBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002 VkCmdBuffer cmdBuffer,
5003 const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005004{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005005 if(pBeginInfo != nullptr)
5006 {
5007 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005009 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005010 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005011 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005012 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005014
5015 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016}
5017
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005018bool PostBeginCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019 VkCmdBuffer cmdBuffer,
5020 VkResult result)
5021{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005022
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005023 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005024 {
5025 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005026 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5027 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005029
5030 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005031}
5032
5033VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
5034 VkCmdBuffer cmdBuffer,
5035 const VkCmdBufferBeginInfo* pBeginInfo)
5036{
5037 PreBeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005038
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->BeginCommandBuffer(cmdBuffer, pBeginInfo);
5040
5041 PostBeginCommandBuffer(cmdBuffer, result);
5042
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005043 return result;
5044}
5045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005046bool PostEndCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005047 VkCmdBuffer cmdBuffer,
5048 VkResult result)
5049{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005050
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005051 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005052 {
5053 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005054 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5055 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005057
5058 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005059}
5060
5061VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
5062 VkCmdBuffer cmdBuffer)
5063{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005064 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->EndCommandBuffer(cmdBuffer);
5065
5066 PostEndCommandBuffer(cmdBuffer, result);
5067
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005068 return result;
5069}
5070
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005071bool PostResetCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005072 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005073 VkCmdBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005074 VkResult result)
5075{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005076
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005077
5078 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005079 {
5080 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005081 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
5082 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005084
5085 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005086}
5087
5088VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005089 VkCmdBuffer cmdBuffer,
5090 VkCmdBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005091{
Courtney Goeltzenleuchteree5d80b2015-07-10 19:50:17 -06005092 VkResult result = get_dispatch_table(pc_device_table_map, cmdBuffer)->ResetCommandBuffer(cmdBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005093
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005094 PostResetCommandBuffer(cmdBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005095
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005096 return result;
5097}
5098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005099bool PostCmdBindPipeline(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005100 VkCmdBuffer cmdBuffer,
5101 VkPipelineBindPoint pipelineBindPoint,
5102 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005104
5105 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5106 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5107 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005109 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005110 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005111 }
5112
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113
5114 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005115}
5116
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
5118 VkCmdBuffer cmdBuffer,
5119 VkPipelineBindPoint pipelineBindPoint,
5120 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005121{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005122 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5123
5124 PostCmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
5125}
5126
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005127VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCmdBuffer cmdBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005128{
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005129 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetViewport(cmdBuffer, viewportCount, pViewports);
5130}
5131
5132VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCmdBuffer cmdBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
5133{
5134 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetScissor(cmdBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005135}
5136
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005137VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCmdBuffer cmdBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005139 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetLineWidth(cmdBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005140}
5141
Chia-I Wud8c946a2015-10-26 19:08:09 +08005142VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCmdBuffer cmdBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005143{
Chia-I Wud8c946a2015-10-26 19:08:09 +08005144 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBias(cmdBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145}
5146
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005147VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCmdBuffer cmdBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005149 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetBlendConstants(cmdBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005150}
5151
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005152VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCmdBuffer cmdBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005153{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005154 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetDepthBounds(cmdBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005155}
5156
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005157VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005158{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005159 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilCompareMask(cmdBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005160}
5161
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005162VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005163{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005164 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilWriteMask(cmdBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005165}
5166
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005167VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCmdBuffer cmdBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005168{
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06005169 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetStencilReference(cmdBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005170}
5171
5172bool PreCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173 VkCmdBuffer cmdBuffer,
5174 const VkDescriptorSet* pDescriptorSets,
5175 const uint32_t* pDynamicOffsets)
5176{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005177 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005178 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005180
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005181 if(pDynamicOffsets != nullptr)
5182 {
5183 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005184
5185 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005186}
5187
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188bool PostCmdBindDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005189 VkCmdBuffer cmdBuffer,
5190 VkPipelineBindPoint pipelineBindPoint,
5191 VkPipelineLayout layout,
5192 uint32_t firstSet,
5193 uint32_t setCount,
5194 uint32_t dynamicOffsetCount)
5195{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196
5197 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5198 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5199 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005200 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005201 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005202 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005203 }
5204
5205
5206
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005207
5208
5209 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005210}
5211
5212VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
5213 VkCmdBuffer cmdBuffer,
5214 VkPipelineBindPoint pipelineBindPoint,
5215 VkPipelineLayout layout,
5216 uint32_t firstSet,
5217 uint32_t setCount,
5218 const VkDescriptorSet* pDescriptorSets,
5219 uint32_t dynamicOffsetCount,
5220 const uint32_t* pDynamicOffsets)
5221{
5222 PreCmdBindDescriptorSets(cmdBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005223
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
5225
5226 PostCmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
5227}
5228
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005229bool PostCmdBindIndexBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005230 VkCmdBuffer cmdBuffer,
5231 VkBuffer buffer,
5232 VkDeviceSize offset,
5233 VkIndexType indexType)
5234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235
Jeremy Hayes99a96322015-06-26 12:48:09 -06005236
5237
5238 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5239 indexType > VK_INDEX_TYPE_END_RANGE)
5240 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005241 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005242 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005243 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005244 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005245
5246 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005247}
5248
5249VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
5250 VkCmdBuffer cmdBuffer,
5251 VkBuffer buffer,
5252 VkDeviceSize offset,
5253 VkIndexType indexType)
5254{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005255 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5256
5257 PostCmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
5258}
5259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005260bool PreCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261 VkCmdBuffer cmdBuffer,
5262 const VkBuffer* pBuffers,
5263 const VkDeviceSize* pOffsets)
5264{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005265 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005266 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005267 }
5268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005269 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005270 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005271 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005272
5273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005274}
5275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005276bool PostCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277 VkCmdBuffer cmdBuffer,
5278 uint32_t startBinding,
5279 uint32_t bindingCount)
5280{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005281
5282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005283
5284 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005285}
5286
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005287VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005288 VkCmdBuffer cmdBuffer,
5289 uint32_t startBinding,
5290 uint32_t bindingCount,
5291 const VkBuffer* pBuffers,
5292 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005293{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005294 PreCmdBindVertexBuffers(cmdBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005295
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
5297
5298 PostCmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005299}
5300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005301bool PostCmdDraw(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005302 VkCmdBuffer cmdBuffer,
5303 uint32_t firstVertex,
5304 uint32_t vertexCount,
5305 uint32_t firstInstance,
5306 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005307{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308
5309
5310
5311
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005312
5313 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005314}
5315
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316VK_LAYER_EXPORT void VKAPI vkCmdDraw(
5317 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005318 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005319 uint32_t instanceCount,
5320 uint32_t firstVertex,
5321 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005322{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005323 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDraw(cmdBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324
5325 PostCmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005326}
5327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005328bool PostCmdDrawIndexed(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005329 VkCmdBuffer cmdBuffer,
5330 uint32_t firstIndex,
5331 uint32_t indexCount,
5332 int32_t vertexOffset,
5333 uint32_t firstInstance,
5334 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005335{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005336
5337
5338
5339
5340
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005341
5342 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005343}
5344
Jeremy Hayes99a96322015-06-26 12:48:09 -06005345VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
5346 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005348 uint32_t instanceCount,
5349 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005350 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005351 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005352{
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005353 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexed(cmdBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005354
5355 PostCmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
5356}
5357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005358bool PostCmdDrawIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005359 VkCmdBuffer cmdBuffer,
5360 VkBuffer buffer,
5361 VkDeviceSize offset,
5362 uint32_t count,
5363 uint32_t stride)
5364{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005365
5366
5367
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005368
5369
5370 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371}
5372
5373VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
5374 VkCmdBuffer cmdBuffer,
5375 VkBuffer buffer,
5376 VkDeviceSize offset,
5377 uint32_t count,
5378 uint32_t stride)
5379{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005380 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5381
5382 PostCmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
5383}
5384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005385bool PostCmdDrawIndexedIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386 VkCmdBuffer cmdBuffer,
5387 VkBuffer buffer,
5388 VkDeviceSize offset,
5389 uint32_t count,
5390 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005391{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392
5393
5394
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005395
5396
5397 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005398}
5399
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
5401 VkCmdBuffer cmdBuffer,
5402 VkBuffer buffer,
5403 VkDeviceSize offset,
5404 uint32_t count,
5405 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005406{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5408
5409 PostCmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
5410}
5411
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005412bool PostCmdDispatch(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413 VkCmdBuffer cmdBuffer,
5414 uint32_t x,
5415 uint32_t y,
5416 uint32_t z)
5417{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005418
5419
5420
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005421
5422 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005423}
5424
5425VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
5426 VkCmdBuffer cmdBuffer,
5427 uint32_t x,
5428 uint32_t y,
5429 uint32_t z)
5430{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatch(cmdBuffer, x, y, z);
5432
5433 PostCmdDispatch(cmdBuffer, x, y, z);
5434}
5435
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005436bool PostCmdDispatchIndirect(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437 VkCmdBuffer cmdBuffer,
5438 VkBuffer buffer,
5439 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005440{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005441
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005443
5444 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005445}
5446
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
5448 VkCmdBuffer cmdBuffer,
5449 VkBuffer buffer,
5450 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005451{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdDispatchIndirect(cmdBuffer, buffer, offset);
5453
5454 PostCmdDispatchIndirect(cmdBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005455}
5456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457bool PreCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005458 VkCmdBuffer cmdBuffer,
5459 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005460{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005461 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005462 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005464
5465 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466}
5467
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005468bool PostCmdCopyBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005469 VkCmdBuffer cmdBuffer,
5470 VkBuffer srcBuffer,
5471 VkBuffer destBuffer,
5472 uint32_t regionCount)
5473{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474
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
5481VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
5482 VkCmdBuffer cmdBuffer,
5483 VkBuffer srcBuffer,
5484 VkBuffer destBuffer,
5485 uint32_t regionCount,
5486 const VkBufferCopy* pRegions)
5487{
5488 PreCmdCopyBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005489
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
5491
5492 PostCmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount);
5493}
5494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005495bool PreCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005496 VkCmdBuffer cmdBuffer,
5497 const VkImageCopy* pRegions)
5498{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005499 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005501 if ((pRegions->srcSubresource.aspect &
5502 (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 -06005503 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005504 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005505 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005507 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005508 if ((pRegions->destSubresource.aspect &
5509 (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 -06005510 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005511 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005512 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005513 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005514 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005515 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005516
5517 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005518}
5519
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005520bool PostCmdCopyImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005521 VkCmdBuffer cmdBuffer,
5522 VkImage srcImage,
5523 VkImageLayout srcImageLayout,
5524 VkImage destImage,
5525 VkImageLayout destImageLayout,
5526 uint32_t regionCount)
5527{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529
5530 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5531 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5532 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005534 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005535 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005536 }
5537
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538
5539 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5540 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5541 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005542 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005543 "vkCmdCopyImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545 }
5546
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005547
5548 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005549}
5550
5551VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
5552 VkCmdBuffer cmdBuffer,
5553 VkImage srcImage,
5554 VkImageLayout srcImageLayout,
5555 VkImage destImage,
5556 VkImageLayout destImageLayout,
5557 uint32_t regionCount,
5558 const VkImageCopy* pRegions)
5559{
5560 PreCmdCopyImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005561
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
5563
5564 PostCmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
5565}
5566
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005567bool PreCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005568 VkCmdBuffer cmdBuffer,
5569 const VkImageBlit* pRegions)
5570{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005571 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005572 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005573 if ((pRegions->srcSubresource.aspect &
5574 (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 -06005575 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005576 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005577 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005578 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005579 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005580 if ((pRegions->destSubresource.aspect &
5581 (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 -06005582 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005583 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005584 "vkCmdCopyImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005585 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005586 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005587 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588
5589 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590}
5591
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005592bool PostCmdBlitImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593 VkCmdBuffer cmdBuffer,
5594 VkImage srcImage,
5595 VkImageLayout srcImageLayout,
5596 VkImage destImage,
5597 VkImageLayout destImageLayout,
5598 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005599 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005600{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005601
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602
5603 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5604 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5605 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005606 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005607 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005608 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609 }
5610
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611
5612 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5613 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5614 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005615 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005616 "vkCmdBlitImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005617 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005618 }
5619
5620
Chia-I Wub99df442015-10-26 16:49:32 +08005621 if(filter < VK_FILTER_BEGIN_RANGE ||
5622 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005623 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005624 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005625 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005627 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005628
5629 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005630}
5631
5632VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
5633 VkCmdBuffer cmdBuffer,
5634 VkImage srcImage,
5635 VkImageLayout srcImageLayout,
5636 VkImage destImage,
5637 VkImageLayout destImageLayout,
5638 uint32_t regionCount,
5639 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005640 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641{
5642 PreCmdBlitImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005643
Jeremy Hayes99a96322015-06-26 12:48:09 -06005644 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions, filter);
5645
5646 PostCmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, filter);
5647}
5648
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649bool PreCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005650 VkCmdBuffer cmdBuffer,
5651 const VkBufferImageCopy* pRegions)
5652{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005653 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005655 if ((pRegions->imageSubresource.aspect &
5656 (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 -06005657 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005658 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005659 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005660 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005662 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005663
5664 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005665}
5666
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005667bool PostCmdCopyBufferToImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005668 VkCmdBuffer cmdBuffer,
5669 VkBuffer srcBuffer,
5670 VkImage destImage,
5671 VkImageLayout destImageLayout,
5672 uint32_t regionCount)
5673{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005674
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676
5677 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5678 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5679 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005680 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005681 "vkCmdCopyBufferToImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005682 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683 }
5684
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005685
5686 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687}
5688
5689VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
5690 VkCmdBuffer cmdBuffer,
5691 VkBuffer srcBuffer,
5692 VkImage destImage,
5693 VkImageLayout destImageLayout,
5694 uint32_t regionCount,
5695 const VkBufferImageCopy* pRegions)
5696{
5697 PreCmdCopyBufferToImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005698
Jeremy Hayes99a96322015-06-26 12:48:09 -06005699 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
5700
5701 PostCmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount);
5702}
5703
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005704bool PreCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705 VkCmdBuffer cmdBuffer,
5706 const VkBufferImageCopy* pRegions)
5707{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005708 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005710 if ((pRegions->imageSubresource.aspect &
5711 (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 -06005712 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005713 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005714 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005715 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005716 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005717 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005718
5719 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720}
5721
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005722bool PostCmdCopyImageToBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005723 VkCmdBuffer cmdBuffer,
5724 VkImage srcImage,
5725 VkImageLayout srcImageLayout,
5726 VkBuffer destBuffer,
5727 uint32_t regionCount)
5728{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005729
Jeremy Hayes99a96322015-06-26 12:48:09 -06005730
5731 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5732 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5733 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005734 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005735 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005737 }
5738
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005740
5741 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742}
5743
5744VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
5745 VkCmdBuffer cmdBuffer,
5746 VkImage srcImage,
5747 VkImageLayout srcImageLayout,
5748 VkBuffer destBuffer,
5749 uint32_t regionCount,
5750 const VkBufferImageCopy* pRegions)
5751{
5752 PreCmdCopyImageToBuffer(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005753
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
5755
5756 PostCmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount);
5757}
5758
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005759bool PreCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760 VkCmdBuffer cmdBuffer,
5761 const uint32_t* pData)
5762{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005763 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005765 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005766
5767 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768}
5769
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005770bool PostCmdUpdateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 VkCmdBuffer cmdBuffer,
5772 VkBuffer destBuffer,
5773 VkDeviceSize destOffset,
5774 VkDeviceSize dataSize)
5775{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776
5777
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005778
5779
5780 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005781}
5782
5783VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
5784 VkCmdBuffer cmdBuffer,
5785 VkBuffer destBuffer,
5786 VkDeviceSize destOffset,
5787 VkDeviceSize dataSize,
5788 const uint32_t* pData)
5789{
5790 PreCmdUpdateBuffer(cmdBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
5793
5794 PostCmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize);
5795}
5796
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005797bool PostCmdFillBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 VkCmdBuffer cmdBuffer,
5799 VkBuffer destBuffer,
5800 VkDeviceSize destOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005801 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005802 uint32_t data)
5803{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804
5805
5806
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005807
5808
5809 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810}
5811
5812VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
5813 VkCmdBuffer cmdBuffer,
5814 VkBuffer destBuffer,
5815 VkDeviceSize destOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005816 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817 uint32_t data)
5818{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005819 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdFillBuffer(cmdBuffer, destBuffer, destOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005820
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005821 PostCmdFillBuffer(cmdBuffer, destBuffer, destOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005822}
5823
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005824bool PreCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825 VkCmdBuffer cmdBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005826 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827 const VkImageSubresourceRange* pRanges)
5828{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005829 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 }
5832
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005833 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005835 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005836 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005837
5838 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005839}
5840
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005841bool PostCmdClearColorImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005842 VkCmdBuffer cmdBuffer,
5843 VkImage image,
5844 VkImageLayout imageLayout,
5845 uint32_t rangeCount)
5846{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847
Jeremy Hayes99a96322015-06-26 12:48:09 -06005848
5849 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5850 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5851 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005852 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005853 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005854 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005855 }
5856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005857
5858 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859}
5860
5861VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
5862 VkCmdBuffer cmdBuffer,
5863 VkImage image,
5864 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005865 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005866 uint32_t rangeCount,
5867 const VkImageSubresourceRange* pRanges)
5868{
5869 PreCmdClearColorImage(cmdBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005870
Jeremy Hayes99a96322015-06-26 12:48:09 -06005871 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearColorImage(cmdBuffer, image, imageLayout, pColor, rangeCount, pRanges);
5872
5873 PostCmdClearColorImage(cmdBuffer, image, imageLayout, rangeCount);
5874}
5875
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005876bool PreCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005877 VkCmdBuffer cmdBuffer,
5878 const VkImageSubresourceRange* pRanges)
5879{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005880 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005881 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005882 /*
5883 * TODO: How do we validation pRanges->aspectMask?
5884 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5885 * VK_IMAGE_ASPECT_STENCIL_BIT.
5886 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005887 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005888
5889 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005890}
5891
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005892bool PostCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005893 VkCmdBuffer cmdBuffer,
5894 VkImage image,
5895 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005896 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897 uint32_t rangeCount)
5898{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005899
Jeremy Hayes99a96322015-06-26 12:48:09 -06005900
5901 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5902 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5903 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005904 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005905 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005906 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005907 }
5908
5909
5910
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005911
5912 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005913}
5914
Chris Forbesd9be82b2015-06-22 17:21:59 +12005915VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005916 VkCmdBuffer cmdBuffer,
5917 VkImage image,
5918 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005919 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005920 uint32_t rangeCount,
5921 const VkImageSubresourceRange* pRanges)
5922{
Chris Forbesd9be82b2015-06-22 17:21:59 +12005923 PreCmdClearDepthStencilImage(cmdBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005924
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005925 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005926
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005927 PostCmdClearDepthStencilImage(cmdBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928}
5929
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005930bool PreCmdClearAttachments(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005931 VkCmdBuffer cmdBuffer,
5932 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005933 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005934{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005935 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005936 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005937 }
5938
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005939 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005940 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005941 }
5942
5943 return true;
5944}
5945
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005946VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
5947 VkCmdBuffer cmdBuffer,
5948 uint32_t attachmentCount,
5949 const VkClearAttachment* pAttachments,
5950 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005951 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005952{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005953 for (uint32_t i = 0; i < attachmentCount; i++) {
5954 PreCmdClearAttachments(cmdBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005955 }
5956
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005957 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdClearAttachments(cmdBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005958}
5959
5960bool PreCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961 VkCmdBuffer cmdBuffer,
5962 const VkImageResolve* pRegions)
5963{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005964 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005966 if ((pRegions->srcSubresource.aspect &
5967 (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 -06005968 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005969 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005970 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005972 }
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005973 if ((pRegions->destSubresource.aspect &
5974 (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 -06005975 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005976 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005977 "vkCmdResolveImage parameter, VkImageAspect pRegions->destSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005978 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005980 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005981
5982 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005983}
5984
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005985bool PostCmdResolveImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986 VkCmdBuffer cmdBuffer,
5987 VkImage srcImage,
5988 VkImageLayout srcImageLayout,
5989 VkImage destImage,
5990 VkImageLayout destImageLayout,
5991 uint32_t regionCount)
5992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994
5995 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5996 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5997 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005998 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005999 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006000 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001 }
6002
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
6004 if(destImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
6005 destImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
6006 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006007 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006008 "vkCmdResolveImage parameter, VkImageLayout destImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006009 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006010 }
6011
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006012
6013 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006014}
6015
6016VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
6017 VkCmdBuffer cmdBuffer,
6018 VkImage srcImage,
6019 VkImageLayout srcImageLayout,
6020 VkImage destImage,
6021 VkImageLayout destImageLayout,
6022 uint32_t regionCount,
6023 const VkImageResolve* pRegions)
6024{
6025 PreCmdResolveImage(cmdBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006026
Jeremy Hayes99a96322015-06-26 12:48:09 -06006027 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
6028
6029 PostCmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount);
6030}
6031
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006032bool PostCmdSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033 VkCmdBuffer cmdBuffer,
6034 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006035 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006039
6040 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041}
6042
6043VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
6044 VkCmdBuffer cmdBuffer,
6045 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006046 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006048 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006049
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006050 PostCmdSetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051}
6052
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006053bool PostCmdResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054 VkCmdBuffer cmdBuffer,
6055 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006056 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006057{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006060
6061 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006062}
6063
6064VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
6065 VkCmdBuffer cmdBuffer,
6066 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006067 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006068{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006069 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006071 PostCmdResetEvent(cmdBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006072}
6073
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006074bool PreCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075 VkCmdBuffer cmdBuffer,
6076 const VkEvent* pEvents,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006077 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006079 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006080 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006081 }
6082
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006083 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086
6087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088}
6089
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006090bool PostCmdWaitEvents(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006092 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006093 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006094 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095 uint32_t memBarrierCount)
6096{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006098
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099
6100
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006101
6102 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006103}
6104
6105VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
6106 VkCmdBuffer cmdBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107 uint32_t eventCount,
6108 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006109 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006110 VkPipelineStageFlags destStageMask,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006111 uint32_t memBarrierCount,
Courtney Goeltzenleuchterdbd20322015-07-12 12:58:58 -06006112 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113{
6114 PreCmdWaitEvents(cmdBuffer, pEvents, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006115
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006116 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWaitEvents(cmdBuffer, eventCount, pEvents, srcStageMask, destStageMask, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006117
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006118 PostCmdWaitEvents(cmdBuffer, eventCount, srcStageMask, destStageMask, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006119}
6120
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006121bool PreCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006122 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006123 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006125 if(ppMemBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006126 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006127 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006128
6129 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130}
6131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006132bool PostCmdPipelineBarrier(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006134 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006135 VkPipelineStageFlags destStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006136 VkDependencyFlags dependencyFlags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137 uint32_t memBarrierCount)
6138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006139
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006140
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141
6142
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006143
6144 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006145}
6146
6147VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
6148 VkCmdBuffer cmdBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006149 VkPipelineStageFlags srcStageMask,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006150 VkPipelineStageFlags destStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006151 VkDependencyFlags dependencyFlags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006152 uint32_t memBarrierCount,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006153 const void* const* ppMemBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154{
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006155 PreCmdPipelineBarrier(cmdBuffer, ppMemBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006156
Chia-I Wu53534662015-10-26 17:08:33 +08006157 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, dependencyFlags, memBarrierCount, ppMemBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
Chia-I Wu53534662015-10-26 17:08:33 +08006159 PostCmdPipelineBarrier(cmdBuffer, srcStageMask, destStageMask, dependencyFlags, memBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160}
6161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006162bool PostCmdBeginQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006163 VkCmdBuffer cmdBuffer,
6164 VkQueryPool queryPool,
6165 uint32_t slot,
6166 VkQueryControlFlags flags)
6167{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006168
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169
6170
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006171
6172 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173}
6174
6175VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
6176 VkCmdBuffer cmdBuffer,
6177 VkQueryPool queryPool,
6178 uint32_t slot,
6179 VkQueryControlFlags flags)
6180{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006181 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6182
6183 PostCmdBeginQuery(cmdBuffer, queryPool, slot, flags);
6184}
6185
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006186bool PostCmdEndQuery(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187 VkCmdBuffer cmdBuffer,
6188 VkQueryPool queryPool,
6189 uint32_t slot)
6190{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006191
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006193
6194 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195}
6196
6197VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
6198 VkCmdBuffer cmdBuffer,
6199 VkQueryPool queryPool,
6200 uint32_t slot)
6201{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndQuery(cmdBuffer, queryPool, slot);
6203
6204 PostCmdEndQuery(cmdBuffer, queryPool, slot);
6205}
6206
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006207bool PostCmdResetQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006208 VkCmdBuffer cmdBuffer,
6209 VkQueryPool queryPool,
6210 uint32_t startQuery,
6211 uint32_t queryCount)
6212{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006214
6215
6216
6217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218}
6219
6220VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
6221 VkCmdBuffer cmdBuffer,
6222 VkQueryPool queryPool,
6223 uint32_t startQuery,
6224 uint32_t queryCount)
6225{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006226 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6227
6228 PostCmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
6229}
6230
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006231bool PostCmdWriteTimestamp(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232 VkCmdBuffer cmdBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006233 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006234 VkQueryPool queryPool,
6235 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006236{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006238 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006239
6240 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006241}
6242
6243VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
6244 VkCmdBuffer cmdBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006245 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006246 VkQueryPool queryPool,
6247 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006248{
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006249 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006251 PostCmdWriteTimestamp(cmdBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252}
6253
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006254bool PostCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255 VkCmdBuffer cmdBuffer,
6256 VkQueryPool queryPool,
6257 uint32_t startQuery,
6258 uint32_t queryCount,
6259 VkBuffer destBuffer,
6260 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006261 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006262 VkQueryResultFlags flags)
6263{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264
6265
6266
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006267
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268
6269
6270
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006271
6272 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006273}
6274
Jeremy Hayesad367152015-04-17 10:36:53 -06006275VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006276 VkCmdBuffer cmdBuffer,
6277 VkQueryPool queryPool,
6278 uint32_t startQuery,
6279 uint32_t queryCount,
6280 VkBuffer destBuffer,
6281 VkDeviceSize destOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006282 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006284{
Chia-I Wuccc93a72015-10-26 18:36:20 +08006285 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006286
Chia-I Wuccc93a72015-10-26 18:36:20 +08006287 PostCmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006288}
6289
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006290bool PreCmdPushConstants(
6291 VkCmdBuffer cmdBuffer,
6292 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006294 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006295 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006297
6298 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006299}
6300
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006301bool PostCmdPushConstants(
6302 VkCmdBuffer cmdBuffer,
6303 VkPipelineLayout layout,
6304 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006305 uint32_t offset,
6306 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006307{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006308
Jeremy Hayes99a96322015-06-26 12:48:09 -06006309
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006310
6311
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006312
6313 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314}
6315
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006316VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
6317 VkCmdBuffer cmdBuffer,
6318 VkPipelineLayout layout,
6319 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006320 uint32_t offset,
6321 uint32_t size,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006322 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006323{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324 PreCmdPushConstants(cmdBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006325
Chia-I Wud50677e2015-10-26 20:46:14 +08006326 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdPushConstants(cmdBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327
Chia-I Wud50677e2015-10-26 20:46:14 +08006328 PostCmdPushConstants(cmdBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006329}
6330
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006331bool PreCmdBeginRenderPass(
Jeremy Hayes99a96322015-06-26 12:48:09 -06006332 VkCmdBuffer cmdBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006333 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006334{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006335 if(pRenderPassBegin != nullptr)
6336 {
6337 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006338 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006339 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006340 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006341 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006342 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006343 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006344 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006345 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006346 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006347
6348 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006349}
6350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006351bool PostCmdBeginRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006352 VkCmdBuffer cmdBuffer,
6353 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006354{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006355
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006356 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6357 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6358 {
6359 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
6360 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6361 return false;
6362 }
6363
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006364 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006365}
6366
Jeremy Hayes99a96322015-06-26 12:48:09 -06006367VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
6368 VkCmdBuffer cmdBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006369 const VkRenderPassBeginInfo* pRenderPassBegin,
6370 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006371{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006372 PreCmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
6373
Chia-I Wu08accc62015-07-07 11:50:03 +08006374 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdBeginRenderPass(cmdBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006375
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006376 PostCmdBeginRenderPass(cmdBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006377}
6378
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006379bool PostCmdNextSubpass(
Chia-I Wu08accc62015-07-07 11:50:03 +08006380 VkCmdBuffer cmdBuffer,
6381 VkRenderPassContents contents)
6382{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006383
6384 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006385 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006386 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006387 log_msg(mdd(cmdBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006388 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6389 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006390 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006391
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006392 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006393}
6394
6395VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
6396 VkCmdBuffer cmdBuffer,
6397 VkRenderPassContents contents)
6398{
Chia-I Wu08accc62015-07-07 11:50:03 +08006399 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdNextSubpass(cmdBuffer, contents);
6400
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006401 PostCmdNextSubpass(cmdBuffer, contents);
6402}
6403
6404bool PostCmdEndRenderPass(
6405 VkCmdBuffer cmdBuffer)
6406{
6407
6408 return true;
6409}
6410
6411VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
6412 VkCmdBuffer cmdBuffer)
6413{
6414 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdEndRenderPass(cmdBuffer);
6415
6416 PostCmdEndRenderPass(cmdBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006417}
6418
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006419bool PreCmdExecuteCommands(
6420 VkCmdBuffer cmdBuffer,
6421 const VkCmdBuffer* pCmdBuffers)
6422{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006423 if(pCmdBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006424 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006425 }
6426
6427 return true;
6428}
6429
6430bool PostCmdExecuteCommands(
6431 VkCmdBuffer cmdBuffer,
6432 uint32_t cmdBuffersCount)
6433{
6434
6435
6436 return true;
6437}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006438
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006439VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006440 VkCmdBuffer cmdBuffer,
6441 uint32_t cmdBuffersCount,
6442 const VkCmdBuffer* pCmdBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006443{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006444 PreCmdExecuteCommands(cmdBuffer, pCmdBuffers);
6445
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006446 get_dispatch_table(pc_device_table_map, cmdBuffer)->CmdExecuteCommands(cmdBuffer, cmdBuffersCount, pCmdBuffers);
6447
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006448 PostCmdExecuteCommands(cmdBuffer, cmdBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006449}
6450
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006451VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006452{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006453 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006454 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006455 }
6456
Jon Ashburn8fd08252015-05-28 16:25:02 -06006457 /* loader uses this to force layer initialization; device object is wrapped */
6458 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006460 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006461 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006462
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006463 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006464 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006466 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkAllocMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkAllocMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006477 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006478 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006480 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006481 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006482 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006497 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006498 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006499 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006500 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006501 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006502 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006503 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006504 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006505 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006506 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006507 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006508 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006509 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006510 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006511 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006512 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006513 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006514 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006516 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006517 if (!strcmp(funcName, "vkCreateShaderModule"))
6518 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006519 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006520 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006521 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006532 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkAllocDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkAllocDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006535 if (!strcmp(funcName, "vkCmdSetViewport"))
6536 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006537 if (!strcmp(funcName, "vkCmdSetScissor"))
6538 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006539 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6540 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6541 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6542 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6543 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6544 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6545 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6546 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6547 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6548 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6549 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6550 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6551 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6552 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06006553 if (!strcmp(funcName, "vkAllocCommandBuffers"))
6554 return (PFN_vkVoidFunction) vkAllocCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006555 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006556 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006558 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006563 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006564 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006566 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006568 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006572 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006574 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006576 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006586 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006587 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006588 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006589 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006590 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006592 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006593 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006594 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006595 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006596 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006597 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006598 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006599 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006600 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006602 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006604 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006608 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006614 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006615 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006616 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006617 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006618 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006619 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006620 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006621 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006622 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006623 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006624 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006625
Jon Ashburneab34492015-06-01 09:37:38 -06006626 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006627 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006628 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006629 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006630 }
6631}
6632
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006633VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006634{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006635 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006636 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006637 }
6638
Jon Ashburn8fd08252015-05-28 16:25:02 -06006639 /* loader uses this to force layer initialization; instance object is wrapped */
6640 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006641 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006642 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006643 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006644
Jeremy Hayes99a96322015-06-26 12:48:09 -06006645 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006646 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006647 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006648 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006649 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006650 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006652 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006653 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006654 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006655 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006656 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006657 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6658 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6659 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6660 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6661 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6662 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6663 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6664 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006665
Jeremy Hayes99a96322015-06-26 12:48:09 -06006666 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006667 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006668 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006669 return fptr;
6670
Jeremy Hayes99a96322015-06-26 12:48:09 -06006671 {
6672 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6673 return NULL;
6674 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6675 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006676}