blob: 736128db9624d398ca0e5dcdfd776c89d9fee466 [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 |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800290 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
291 VK_FORMAT_FEATURE_BLIT_DST_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 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800349 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600350 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800351 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600352 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800353 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600354 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800355 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600356 }
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 |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800380 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600381 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800382 VK_IMAGE_USAGE_TRANSFER_SRC_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 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800420 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600421 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800422 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600423 }
424 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
425 {
426 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
427 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800428 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600429 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800430 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600431 }
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 |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800507 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600508 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800509 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
510 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600511 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 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800532 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600533 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800534 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600535 }
536 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
537 {
538 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
539 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800540 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600541 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800542 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600543 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800544 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600545 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800546 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600547 }
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{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800566 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_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;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800584 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800586 strings.push_back("VK_MEMORY_HEAP_DEVICE_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
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600654bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
655{
656 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
657 if(enumerator & (~allFlags))
658 {
659 return false;
660 }
661
662 return true;
663}
664
665static
666std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
667{
668 if(!ValidateEnumerator(enumerator))
669 {
670 return "unrecognized enumerator";
671 }
672
673 std::vector<std::string> strings;
674 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
675 {
676 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
677 }
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(VkQueryPipelineStatisticFlagBits const& enumerator)
695{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600696 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
697 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
698 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
699 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
700 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
701 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
702 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
703 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
704 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
705 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
706 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600707 if(enumerator & (~allFlags))
708 {
709 return false;
710 }
711
712 return true;
713}
714
715static
716std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
717{
718 if(!ValidateEnumerator(enumerator))
719 {
720 return "unrecognized enumerator";
721 }
722
723 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600724 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600725 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600726 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600727 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600728 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600729 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600730 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600731 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600732 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600733 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600734 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600735 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600736 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600737 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600739 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600740 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600741 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600742 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600743 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600744 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600745 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600746 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600747 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600748 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600750 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600751 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600752 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600753 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600754 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600755 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600756 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600757 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600758 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600759 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600760 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600761 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600762 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600763 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600764 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_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_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 }
768
769 std::string enumeratorString;
770 for(auto const& string : strings)
771 {
772 enumeratorString += string;
773
774 if(string != strings.back())
775 {
776 enumeratorString += '|';
777 }
778 }
779
780 return enumeratorString;
781}
782
783static
784bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
785{
786 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
787 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
788 VK_QUERY_RESULT_WAIT_BIT |
789 VK_QUERY_RESULT_64_BIT |
790 VK_QUERY_RESULT_DEFAULT);
791 if(enumerator & (~allFlags))
792 {
793 return false;
794 }
795
796 return true;
797}
798
799static
800std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
801{
802 if(!ValidateEnumerator(enumerator))
803 {
804 return "unrecognized enumerator";
805 }
806
807 std::vector<std::string> strings;
808 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
809 {
810 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
811 }
812 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
813 {
814 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
815 }
816 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
817 {
818 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
819 }
820 if(enumerator & VK_QUERY_RESULT_64_BIT)
821 {
822 strings.push_back("VK_QUERY_RESULT_64_BIT");
823 }
824 if(enumerator & VK_QUERY_RESULT_DEFAULT)
825 {
826 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600827 }
828
829 std::string enumeratorString;
830 for(auto const& string : strings)
831 {
832 enumeratorString += string;
833
834 if(string != strings.back())
835 {
836 enumeratorString += '|';
837 }
838 }
839
840 return enumeratorString;
841}
842
843static
844bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
845{
846 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
847 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
848 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
849 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
850 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800851 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600852 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800853 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600854 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600855 if(enumerator & (~allFlags))
856 {
857 return false;
858 }
859
860 return true;
861}
862
863static
864std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
865{
866 if(!ValidateEnumerator(enumerator))
867 {
868 return "unrecognized enumerator";
869 }
870
871 std::vector<std::string> strings;
872 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
873 {
874 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
875 }
876 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
877 {
878 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
879 }
880 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
881 {
882 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
883 }
884 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
885 {
886 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
887 }
888 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
889 {
890 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
891 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800892 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600893 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800894 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600895 }
896 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
897 {
898 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
899 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800900 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600901 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800902 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600903 }
904 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
905 {
906 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
907 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600908
909 std::string enumeratorString;
910 for(auto const& string : strings)
911 {
912 enumeratorString += string;
913
914 if(string != strings.back())
915 {
916 enumeratorString += '|';
917 }
918 }
919
920 return enumeratorString;
921}
922
923static
924bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
925{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600926 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
927 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600928 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600929 if(enumerator & (~allFlags))
930 {
931 return false;
932 }
933
934 return true;
935}
936
937static
938std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
939{
940 if(!ValidateEnumerator(enumerator))
941 {
942 return "unrecognized enumerator";
943 }
944
945 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600946 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
947 {
948 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
949 }
950 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
951 {
952 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
953 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600954 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600955 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600956 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600957 }
958
959 std::string enumeratorString;
960 for(auto const& string : strings)
961 {
962 enumeratorString += string;
963
964 if(string != strings.back())
965 {
966 enumeratorString += '|';
967 }
968 }
969
970 return enumeratorString;
971}
972
973static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600974bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
975{
976 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600977 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
978 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600979 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600980 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600981 if(enumerator & (~allFlags))
982 {
983 return false;
984 }
985
986 return true;
987}
988
989static
990std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
991{
992 if(!ValidateEnumerator(enumerator))
993 {
994 return "unrecognized enumerator";
995 }
996
997 std::vector<std::string> strings;
998 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
999 {
1000 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1001 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001002 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1003 {
1004 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1005 }
1006 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1007 {
1008 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1009 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001010 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1011 {
1012 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1013 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001014 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001015 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001016 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001017 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018
1019 std::string enumeratorString;
1020 for(auto const& string : strings)
1021 {
1022 enumeratorString += string;
1023
1024 if(string != strings.back())
1025 {
1026 enumeratorString += '|';
1027 }
1028 }
1029
1030 return enumeratorString;
1031}
1032
1033static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001034bool ValidateEnumerator(VkChannelFlagBits const& enumerator)
1035{
1036 VkChannelFlagBits allFlags = (VkChannelFlagBits)(VK_CHANNEL_A_BIT |
1037 VK_CHANNEL_B_BIT |
1038 VK_CHANNEL_G_BIT |
1039 VK_CHANNEL_R_BIT);
1040 if(enumerator & (~allFlags))
1041 {
1042 return false;
1043 }
1044
1045 return true;
1046}
1047
1048static
1049std::string EnumeratorString(VkChannelFlagBits const& enumerator)
1050{
1051 if(!ValidateEnumerator(enumerator))
1052 {
1053 return "unrecognized enumerator";
1054 }
1055
1056 std::vector<std::string> strings;
1057 if(enumerator & VK_CHANNEL_A_BIT)
1058 {
1059 strings.push_back("VK_CHANNEL_A_BIT");
1060 }
1061 if(enumerator & VK_CHANNEL_B_BIT)
1062 {
1063 strings.push_back("VK_CHANNEL_B_BIT");
1064 }
1065 if(enumerator & VK_CHANNEL_G_BIT)
1066 {
1067 strings.push_back("VK_CHANNEL_G_BIT");
1068 }
1069 if(enumerator & VK_CHANNEL_R_BIT)
1070 {
1071 strings.push_back("VK_CHANNEL_R_BIT");
1072 }
1073
1074 std::string enumeratorString;
1075 for(auto const& string : strings)
1076 {
1077 enumeratorString += string;
1078
1079 if(string != strings.back())
1080 {
1081 enumeratorString += '|';
1082 }
1083 }
1084
1085 return enumeratorString;
1086}
1087
1088static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001089bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001090{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001091 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1092 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1093 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001094 if(enumerator & (~allFlags))
1095 {
1096 return false;
1097 }
1098
1099 return true;
1100}
1101
1102static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001103std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001104{
1105 if(!ValidateEnumerator(enumerator))
1106 {
1107 return "unrecognized enumerator";
1108 }
1109
1110 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001111 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001113 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1114 }
1115 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1116 {
1117 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1118 }
1119 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1120 {
1121 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001122 }
1123
1124 std::string enumeratorString;
1125 for(auto const& string : strings)
1126 {
1127 enumeratorString += string;
1128
1129 if(string != strings.back())
1130 {
1131 enumeratorString += '|';
1132 }
1133 }
1134
1135 return enumeratorString;
1136}
1137
1138static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001139bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001140{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001141 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1142 VK_SHADER_STAGE_FRAGMENT_BIT |
1143 VK_SHADER_STAGE_GEOMETRY_BIT |
1144 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001145 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1146 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001147 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001148 if(enumerator & (~allFlags))
1149 {
1150 return false;
1151 }
1152
1153 return true;
1154}
1155
1156static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001157std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001158{
1159 if(!ValidateEnumerator(enumerator))
1160 {
1161 return "unrecognized enumerator";
1162 }
1163
1164 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001165 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001166 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001167 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001168 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001169 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001170 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001171 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001172 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001173 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001174 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001175 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1176 }
1177 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1178 {
1179 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1180 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001181 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001182 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001183 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001184 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001185 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001186 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001187 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001188 }
1189 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1190 {
1191 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001192 }
1193
1194 std::string enumeratorString;
1195 for(auto const& string : strings)
1196 {
1197 enumeratorString += string;
1198
1199 if(string != strings.back())
1200 {
1201 enumeratorString += '|';
1202 }
1203 }
1204
1205 return enumeratorString;
1206}
1207
1208static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001209bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001210{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001211 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(VK_PIPELINE_STAGE_ALL_GRAPHICS |
1212 VK_PIPELINE_STAGE_HOST_BIT |
1213 VK_PIPELINE_STAGE_TRANSFER_BIT |
1214 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
1215 VK_PIPELINE_STAGE_ALL_GPU_COMMANDS |
1216 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001218 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1220 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1221 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001222 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001223 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1224 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1225 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1226 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001227 if(enumerator & (~allFlags))
1228 {
1229 return false;
1230 }
1231
1232 return true;
1233}
1234
1235static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001236std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001237{
1238 if(!ValidateEnumerator(enumerator))
1239 {
1240 return "unrecognized enumerator";
1241 }
1242
1243 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001244 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001245 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001247 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001248 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001249 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001250 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001251 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001252 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001253 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001255 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001257 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001258 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001259 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 if(enumerator & VK_PIPELINE_STAGE_ALL_GPU_COMMANDS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001261 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001262 strings.push_back("VK_PIPELINE_STAGE_ALL_GPU_COMMANDS");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001263 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001264 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001265 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001266 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001267 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001268 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001269 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001270 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001271 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001272 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001273 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001274 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001275 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001276 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001277 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001278 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001279 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001280 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001281 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001282 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1283 }
1284 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1285 {
1286 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1287 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001288 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001289 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001290 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001291 }
1292 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1293 {
1294 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1295 }
1296 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1297 {
1298 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1299 }
1300 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1301 {
1302 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1303 }
1304 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1305 {
1306 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001307 }
1308
1309 std::string enumeratorString;
1310 for(auto const& string : strings)
1311 {
1312 enumeratorString += string;
1313
1314 if(string != strings.back())
1315 {
1316 enumeratorString += '|';
1317 }
1318 }
1319
1320 return enumeratorString;
1321}
1322
1323static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001324bool ValidateEnumerator(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001325{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001326 VkMemoryOutputFlagBits allFlags = (VkMemoryOutputFlagBits)(VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1327 VK_MEMORY_OUTPUT_TRANSFER_BIT |
1328 VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT |
1329 VK_MEMORY_OUTPUT_SHADER_WRITE_BIT |
1330 VK_MEMORY_OUTPUT_HOST_WRITE_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001331 if(enumerator & (~allFlags))
1332 {
1333 return false;
1334 }
1335
1336 return true;
1337}
1338
1339static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001340std::string EnumeratorString(VkMemoryOutputFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001341{
1342 if(!ValidateEnumerator(enumerator))
1343 {
1344 return "unrecognized enumerator";
1345 }
1346
1347 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001348 if(enumerator & VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001349 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001350 strings.push_back("VK_MEMORY_OUTPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001351 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001352 if(enumerator & VK_MEMORY_OUTPUT_TRANSFER_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001353 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001354 strings.push_back("VK_MEMORY_OUTPUT_TRANSFER_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001355 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001356 if(enumerator & VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001357 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001358 strings.push_back("VK_MEMORY_OUTPUT_COLOR_ATTACHMENT_BIT");
1359 }
1360 if(enumerator & VK_MEMORY_OUTPUT_SHADER_WRITE_BIT)
1361 {
1362 strings.push_back("VK_MEMORY_OUTPUT_SHADER_WRITE_BIT");
1363 }
1364 if(enumerator & VK_MEMORY_OUTPUT_HOST_WRITE_BIT)
1365 {
1366 strings.push_back("VK_MEMORY_OUTPUT_HOST_WRITE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001367 }
1368
1369 std::string enumeratorString;
1370 for(auto const& string : strings)
1371 {
1372 enumeratorString += string;
1373
1374 if(string != strings.back())
1375 {
1376 enumeratorString += '|';
1377 }
1378 }
1379
1380 return enumeratorString;
1381}
1382
1383static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001384bool ValidateEnumerator(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001385{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001386 VkMemoryInputFlagBits allFlags = (VkMemoryInputFlagBits)(VK_MEMORY_INPUT_TRANSFER_BIT |
1387 VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT |
1388 VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT |
1389 VK_MEMORY_INPUT_SHADER_READ_BIT |
1390 VK_MEMORY_INPUT_UNIFORM_READ_BIT |
1391 VK_MEMORY_INPUT_INDEX_FETCH_BIT |
1392 VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT |
1393 VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT |
1394 VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT |
1395 VK_MEMORY_INPUT_HOST_READ_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001396 if(enumerator & (~allFlags))
1397 {
1398 return false;
1399 }
1400
1401 return true;
1402}
1403
1404static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001405std::string EnumeratorString(VkMemoryInputFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001406{
1407 if(!ValidateEnumerator(enumerator))
1408 {
1409 return "unrecognized enumerator";
1410 }
1411
1412 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001413 if(enumerator & VK_MEMORY_INPUT_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001414 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001415 strings.push_back("VK_MEMORY_INPUT_TRANSFER_BIT");
1416 }
1417 if(enumerator & VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT)
1418 {
1419 strings.push_back("VK_MEMORY_INPUT_DEPTH_STENCIL_ATTACHMENT_BIT");
1420 }
1421 if(enumerator & VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT)
1422 {
1423 strings.push_back("VK_MEMORY_INPUT_COLOR_ATTACHMENT_BIT");
1424 }
1425 if(enumerator & VK_MEMORY_INPUT_SHADER_READ_BIT)
1426 {
1427 strings.push_back("VK_MEMORY_INPUT_SHADER_READ_BIT");
1428 }
1429 if(enumerator & VK_MEMORY_INPUT_UNIFORM_READ_BIT)
1430 {
1431 strings.push_back("VK_MEMORY_INPUT_UNIFORM_READ_BIT");
1432 }
1433 if(enumerator & VK_MEMORY_INPUT_INDEX_FETCH_BIT)
1434 {
1435 strings.push_back("VK_MEMORY_INPUT_INDEX_FETCH_BIT");
1436 }
1437 if(enumerator & VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT)
1438 {
1439 strings.push_back("VK_MEMORY_INPUT_INDIRECT_COMMAND_BIT");
1440 }
1441 if(enumerator & VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT)
1442 {
1443 strings.push_back("VK_MEMORY_INPUT_INPUT_ATTACHMENT_BIT");
1444 }
1445 if(enumerator & VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT)
1446 {
1447 strings.push_back("VK_MEMORY_INPUT_VERTEX_ATTRIBUTE_FETCH_BIT");
1448 }
1449 if(enumerator & VK_MEMORY_INPUT_HOST_READ_BIT)
1450 {
1451 strings.push_back("VK_MEMORY_INPUT_HOST_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001452 }
1453
1454 std::string enumeratorString;
1455 for(auto const& string : strings)
1456 {
1457 enumeratorString += string;
1458
1459 if(string != strings.back())
1460 {
1461 enumeratorString += '|';
1462 }
1463 }
1464
1465 return enumeratorString;
1466}
1467
1468static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001469bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001470{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001471 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1472 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001473 if(enumerator & (~allFlags))
1474 {
1475 return false;
1476 }
1477
1478 return true;
1479}
1480
1481static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001482std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001483{
1484 if(!ValidateEnumerator(enumerator))
1485 {
1486 return "unrecognized enumerator";
1487 }
1488
1489 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001490 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001491 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001492 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001494 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001495 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001496 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001497 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001498
1499 std::string enumeratorString;
1500 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001501 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001502 enumeratorString += string;
1503
1504 if(string != strings.back())
1505 {
1506 enumeratorString += '|';
1507 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001508 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001509
1510 return enumeratorString;
1511}
1512
1513static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001514bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001515{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001516 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001517 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001518 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001519 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001520 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001521
1522 return true;
1523}
1524
1525static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001526std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001527{
1528 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001529 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001530 return "unrecognized enumerator";
1531 }
1532
1533 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001534 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001535 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001536 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001537 }
1538
1539 std::string enumeratorString;
1540 for(auto const& string : strings)
1541 {
1542 enumeratorString += string;
1543
1544 if(string != strings.back())
1545 {
1546 enumeratorString += '|';
1547 }
1548 }
1549
1550 return enumeratorString;
1551}
1552
1553static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001554bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001555{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001556 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1557 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1558 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001559 if(enumerator & (~allFlags))
1560 {
1561 return false;
1562 }
1563
1564 return true;
1565}
1566
1567static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001568std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001569{
1570 if(!ValidateEnumerator(enumerator))
1571 {
1572 return "unrecognized enumerator";
1573 }
1574
1575 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001576 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001577 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001578 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001579 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001580 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001581 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001582 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001583 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001584 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001585 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001586 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001587 }
1588
1589 std::string enumeratorString;
1590 for(auto const& string : strings)
1591 {
1592 enumeratorString += string;
1593
1594 if(string != strings.back())
1595 {
1596 enumeratorString += '|';
1597 }
1598 }
1599
1600 return enumeratorString;
1601}
1602
1603static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001605{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001606 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 if(enumerator & (~allFlags))
1608 {
1609 return false;
1610 }
1611
1612 return true;
1613}
1614
1615static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001616std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001617{
1618 if(!ValidateEnumerator(enumerator))
1619 {
1620 return "unrecognized enumerator";
1621 }
1622
1623 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001624 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001626 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_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
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001643static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001644bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001645{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001646 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1647 VK_IMAGE_ASPECT_STENCIL_BIT |
1648 VK_IMAGE_ASPECT_DEPTH_BIT |
1649 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001650 if(enumerator & (~allFlags))
1651 {
1652 return false;
1653 }
1654
1655 return true;
1656}
1657
1658static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001659std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001660{
1661 if(!ValidateEnumerator(enumerator))
1662 {
1663 return "unrecognized enumerator";
1664 }
1665
1666 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001667 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001668 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001669 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1670 }
1671 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1672 {
1673 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1674 }
1675 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1676 {
1677 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1678 }
1679 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1680 {
1681 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1682 }
1683
1684 std::string enumeratorString;
1685 for(auto const& string : strings)
1686 {
1687 enumeratorString += string;
1688
1689 if(string != strings.back())
1690 {
1691 enumeratorString += '|';
1692 }
1693 }
1694
1695 return enumeratorString;
1696}
1697
1698static
1699bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1700{
1701 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_CONSERVATIVE_BIT);
1702 if(enumerator & (~allFlags))
1703 {
1704 return false;
1705 }
1706
1707 return true;
1708}
1709
1710static
1711std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1712{
1713 if(!ValidateEnumerator(enumerator))
1714 {
1715 return "unrecognized enumerator";
1716 }
1717
1718 std::vector<std::string> strings;
1719 if(enumerator & VK_QUERY_CONTROL_CONSERVATIVE_BIT)
1720 {
1721 strings.push_back("VK_QUERY_CONTROL_CONSERVATIVE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001722 }
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
Jeremy Hayes99a96322015-06-26 12:48:09 -06001738VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1739 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001740 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001741 VkInstance* pInstance)
1742{
1743 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001744 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001745
1746 if (result == VK_SUCCESS) {
1747 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001748 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001749 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001750
1751 InitParamChecker(data);
1752 }
1753
1754 return result;
1755}
1756
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001757VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001758 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001759 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001760{
1761 // Grab the key before the instance is destroyed.
1762 dispatch_key key = get_dispatch_key(instance);
1763 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001764 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001765
1766 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001767 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1768 while (my_data->logging_callback.size() > 0) {
1769 VkDbgMsgCallback callback = my_data->logging_callback.back();
1770 layer_destroy_msg_callback(my_data->report_data, callback);
1771 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772 }
1773
1774 layer_debug_report_destroy_instance(mid(instance));
1775 layer_data_map.erase(pTable);
1776
1777 pc_instance_table_map.erase(key);
1778 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001779}
1780
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001781bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001782 VkInstance instance,
1783 uint32_t* pPhysicalDeviceCount,
1784 VkPhysicalDevice* pPhysicalDevices,
1785 VkResult result)
1786{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001787
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001788 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001789 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001790 }
1791
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001792 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001793 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001794 }
1795
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001796 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001797 {
1798 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001799 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1800 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001801 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001802
1803 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001804}
1805
1806VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1807 VkInstance instance,
1808 uint32_t* pPhysicalDeviceCount,
1809 VkPhysicalDevice* pPhysicalDevices)
1810{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001811 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1812
1813 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1814
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001815 return result;
1816}
1817
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001818bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001819 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001820 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001821{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001822
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001823 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001825 }
1826
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001827 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828}
1829
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001830VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001831 VkPhysicalDevice physicalDevice,
1832 VkPhysicalDeviceFeatures* pFeatures)
1833{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001834 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001835
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001836 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001837}
1838
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001839bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840 VkPhysicalDevice physicalDevice,
1841 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001842 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844
1845 if(format < VK_FORMAT_BEGIN_RANGE ||
1846 format > VK_FORMAT_END_RANGE)
1847 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001848 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001849 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001850 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851 }
1852
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001853 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001854 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001855 }
1856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001857 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001858}
1859
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001860VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001861 VkPhysicalDevice physicalDevice,
1862 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001863 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001864{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001865 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001866
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001867 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001868}
1869
1870bool PostGetPhysicalDeviceImageFormatProperties(
1871 VkPhysicalDevice physicalDevice,
1872 VkFormat format,
1873 VkImageType type,
1874 VkImageTiling tiling,
1875 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001876 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001877 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001878{
1879
1880 if(format < VK_FORMAT_BEGIN_RANGE ||
1881 format > VK_FORMAT_END_RANGE)
1882 {
1883 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1884 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1885 return false;
1886 }
1887
1888 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1889 type > VK_IMAGE_TYPE_END_RANGE)
1890 {
1891 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1892 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1893 return false;
1894 }
1895
1896 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1897 tiling > VK_IMAGE_TILING_END_RANGE)
1898 {
1899 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1900 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1901 return false;
1902 }
1903
1904
1905 if(pImageFormatProperties != nullptr)
1906 {
1907 }
1908
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001909 return true;
1910}
1911
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001912VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001913 VkPhysicalDevice physicalDevice,
1914 VkFormat format,
1915 VkImageType type,
1916 VkImageTiling tiling,
1917 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001918 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001919 VkImageFormatProperties* pImageFormatProperties)
1920{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001921 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001922
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001923 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001924}
1925
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001926bool PostGetPhysicalDeviceProperties(
1927 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001928 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001929{
1930
1931 if(pProperties != nullptr)
1932 {
1933 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1934 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1935 {
1936 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1937 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1938 return false;
1939 }
1940 }
1941
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001942 return true;
1943}
1944
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001945VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001946 VkPhysicalDevice physicalDevice,
1947 VkPhysicalDeviceProperties* pProperties)
1948{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001949 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001950
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001951 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001952}
1953
Cody Northropd0802882015-08-03 17:04:53 -06001954bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001955 VkPhysicalDevice physicalDevice,
1956 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001957 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001958{
1959
Cody Northropd0802882015-08-03 17:04:53 -06001960 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001961 {
1962 }
1963
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001964 if(pQueueProperties != nullptr)
1965 {
1966 }
1967
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001968 return true;
1969}
1970
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06001971VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001972 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06001973 uint32_t* pCount,
1974 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001975{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001976 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001977
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001978 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001979}
1980
1981bool PostGetPhysicalDeviceMemoryProperties(
1982 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001983 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001984{
1985
1986 if(pMemoryProperties != nullptr)
1987 {
1988 }
1989
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001990 return true;
1991}
1992
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001993VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001994 VkPhysicalDevice physicalDevice,
1995 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
1996{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001997 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001999 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002000}
2001
Jeremy Hayes99a96322015-06-26 12:48:09 -06002002VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2003 VkPhysicalDevice physicalDevice,
2004 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002005 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002006 VkDevice* pDevice)
2007{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002008 /*
2009 * NOTE: The loader fills in the ICD's device object in *pDevice.
2010 * Use that object to get the dispatch table.
2011 *
2012 * NOTE: We do not validate physicalDevice or any dispatchable
2013 * object as the first parameter. We couldn't get here if it was wrong!
2014 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002015 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002016 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002017 if(result == VK_SUCCESS)
2018 {
2019 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2020 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2021 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2022 }
2023
2024 return result;
2025}
2026
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002027VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002028 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002029 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002030{
2031 layer_debug_report_destroy_device(device);
2032
2033 dispatch_key key = get_dispatch_key(device);
2034#if DISPATCH_MAP_DEBUG
2035 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2036#endif
2037
Chia-I Wuf7458c52015-10-26 21:10:41 +08002038 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002039 pc_device_table_map.erase(key);
2040 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002041}
2042
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002043bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002044 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002045 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002046 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002047 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002048{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002049
2050
2051
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002052 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002053 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002054 }
2055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002056 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002057}
2058
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002059VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002060 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002061 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002062 uint32_t queueIndex,
2063 VkQueue* pQueue)
2064{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002065 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002066
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002067 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002068}
2069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002070bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002071 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002072 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002073{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002074 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2075 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002076 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002077 return false;
2078 }
2079
2080 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002082 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002083
2084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002085}
2086
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002087bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002089 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002090 VkFence fence,
2091 VkResult result)
2092{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002093
2094
Jeremy Hayes99a96322015-06-26 12:48:09 -06002095
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002096 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002097 {
2098 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002099 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2100 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002102
2103 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104}
2105
2106VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2107 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002108 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002109 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002110 VkFence fence)
2111{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002112 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002113 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002114 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002115
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002116 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002118 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002119
2120 return result;
2121}
2122
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002123bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002124 VkQueue queue,
2125 VkResult result)
2126{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002127
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002128 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129 {
2130 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002131 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2132 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002133 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002134
2135 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002136}
2137
2138VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2139 VkQueue queue)
2140{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002141 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2142
2143 PostQueueWaitIdle(queue, result);
2144
2145 return result;
2146}
2147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002148bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002149 VkDevice device,
2150 VkResult result)
2151{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002152
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002153 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002154 {
2155 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2157 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002158 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002159
2160 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161}
2162
2163VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2164 VkDevice device)
2165{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002166 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2167
2168 PostDeviceWaitIdle(device, result);
2169
2170 return result;
2171}
2172
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002173bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002174 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002175 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002177 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002178 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002179 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002181 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002182 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002183 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002186
2187 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188}
2189
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002190bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002192 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193 VkResult result)
2194{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002195
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002196 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002197 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198 }
2199
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002200 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002201 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002202 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002203 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2204 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002205 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002206
2207 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002208}
2209
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002210VK_LAYER_EXPORT VkResult VKAPI vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002212 const VkMemoryAllocateInfo* pAllocateInfo,
2213 const VkAllocationCallbacks* pAllocator,
2214 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002216 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002217
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002218 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002220 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221
2222 return result;
2223}
2224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002225bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 VkDevice device,
2227 VkDeviceMemory mem,
2228 VkDeviceSize offset,
2229 VkDeviceSize size,
2230 VkMemoryMapFlags flags,
2231 void** ppData,
2232 VkResult result)
2233{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002234
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235
2236
2237
2238
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002239 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002241 }
2242
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002243 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002244 {
2245 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002246 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2247 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002249
2250 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251}
2252
2253VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2254 VkDevice device,
2255 VkDeviceMemory mem,
2256 VkDeviceSize offset,
2257 VkDeviceSize size,
2258 VkMemoryMapFlags flags,
2259 void** ppData)
2260{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002261 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2262
2263 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2264
2265 return result;
2266}
2267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002268bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002269 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002270 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002272 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002273 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002274 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002276 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002277 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002278 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002281
2282 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002283}
2284
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002285bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002286 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002287 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002288 VkResult result)
2289{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002290
2291
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002292 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002293 {
2294 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002295 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2296 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002298
2299 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002300}
2301
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002302VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002303 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002304 uint32_t memoryRangeCount,
2305 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002306{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002308
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002309 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002310
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002311 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002312
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002313 return result;
2314}
2315
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002316bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002317 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002318 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002319{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002320 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002321 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002322 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002325 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002326 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002327 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002329
2330 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331}
2332
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002333bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002334 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002335 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002336 VkResult result)
2337{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002338
2339
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002340 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002341 {
2342 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002343 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2344 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002346
2347 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002348}
2349
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002350VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002351 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002352 uint32_t memoryRangeCount,
2353 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002354{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002355 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002357 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002358
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002359 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002360
Tony Barbourb1250542015-04-16 19:23:13 -06002361 return result;
2362}
2363
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002364bool PostGetDeviceMemoryCommitment(
2365 VkDevice device,
2366 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002367 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002368{
2369
2370
2371 if(pCommittedMemoryInBytes != nullptr)
2372 {
2373 }
2374
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002375 return true;
2376}
2377
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002378VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002379 VkDevice device,
2380 VkDeviceMemory memory,
2381 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002382{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002383 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002384
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002385 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002386}
2387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002388bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002390 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002392 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002393 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002394{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002396
Jeremy Hayes99a96322015-06-26 12:48:09 -06002397
2398
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002399 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002400 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002401 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2402 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2403 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002404 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002405
2406 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002407}
2408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002409VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002410 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002411 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002412 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002413 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002414{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002415 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002416
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002417 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002418
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002419 return result;
2420}
2421
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002422bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002424 VkImage image,
2425 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002426 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002427 VkResult result)
2428{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002429
2430
2431
2432
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002433 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002434 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002435 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2436 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2437 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438 }
2439
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002440 return true;
2441}
2442
2443VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2444 VkDevice device,
2445 VkImage image,
2446 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002447 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002448{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002449 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002450
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002451 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002452
2453 return result;
2454}
2455
2456bool PostGetBufferMemoryRequirements(
2457 VkDevice device,
2458 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002459 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002460{
2461
2462
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002463 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002465 }
2466
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002467 return true;
2468}
2469
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002470VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002471 VkDevice device,
2472 VkBuffer buffer,
2473 VkMemoryRequirements* pMemoryRequirements)
2474{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002475 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002477 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002478}
2479
2480bool PostGetImageMemoryRequirements(
2481 VkDevice device,
2482 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002483 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002484{
2485
2486
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002487 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002488 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002489 }
2490
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002491 return true;
2492}
2493
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002494VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495 VkDevice device,
2496 VkImage image,
2497 VkMemoryRequirements* pMemoryRequirements)
2498{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002499 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002501 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502}
2503
2504bool PostGetImageSparseMemoryRequirements(
2505 VkDevice device,
2506 VkImage image,
2507 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002508 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002509{
2510
2511
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002512 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002513 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002514 }
2515
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002516 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002517 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002518 if ((pSparseMemoryRequirements->formatProperties.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002519 (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 -06002520 {
2521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002522 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002523 return false;
2524 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002525 }
2526
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002527 return true;
2528}
2529
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002530VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002531 VkDevice device,
2532 VkImage image,
2533 uint32_t* pNumRequirements,
2534 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2535{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002536 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002537
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002538 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539}
2540
2541bool PostGetPhysicalDeviceSparseImageFormatProperties(
2542 VkPhysicalDevice physicalDevice,
2543 VkFormat format,
2544 VkImageType type,
2545 uint32_t samples,
2546 VkImageUsageFlags usage,
2547 VkImageTiling tiling,
2548 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002549 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002550{
2551
2552 if(format < VK_FORMAT_BEGIN_RANGE ||
2553 format > VK_FORMAT_END_RANGE)
2554 {
2555 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002556 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557 return false;
2558 }
2559
2560 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2561 type > VK_IMAGE_TYPE_END_RANGE)
2562 {
2563 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002564 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002565 return false;
2566 }
2567
2568
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569
2570 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2571 tiling > VK_IMAGE_TILING_END_RANGE)
2572 {
2573 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002574 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002575 return false;
2576 }
2577
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002578 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002579 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580 }
2581
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002582 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002583 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002584 if ((pProperties->aspect &
2585 (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 -06002586 {
2587 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002588 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002589 return false;
2590 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002591 }
2592
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002593 return true;
2594}
2595
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002596VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597 VkPhysicalDevice physicalDevice,
2598 VkFormat format,
2599 VkImageType type,
2600 uint32_t samples,
2601 VkImageUsageFlags usage,
2602 VkImageTiling tiling,
2603 uint32_t* pNumProperties,
2604 VkSparseImageFormatProperties* pProperties)
2605{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002606 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002607
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002608 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609}
2610
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002611bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002612 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002613 uint32_t bindInfoCount,
2614 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002615{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002616 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002617 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002618 }
2619
2620 return true;
2621}
2622
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002623bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002625 uint32_t bindInfoCount,
2626 const VkBindSparseInfo* pBindInfo,
2627 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002628 VkResult result)
2629{
2630
2631
2632
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002633 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002634 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002635 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002636 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2637 return false;
2638 }
2639
2640 return true;
2641}
2642
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002643VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002644 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002645 uint32_t bindInfoCount,
2646 const VkBindSparseInfo* pBindInfo,
2647 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002649 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002650
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002651 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002653 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002654
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002655 return result;
2656}
2657
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002659 VkDevice device,
2660 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002661{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002662 if(pCreateInfo != nullptr)
2663 {
2664 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002665 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002667 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002668 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002669 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002670 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002671
2672 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002673}
2674
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002675bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002676 VkDevice device,
2677 VkFence* pFence,
2678 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002679{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002680
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002681 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002682 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002683 }
2684
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002685 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002686 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002687 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2689 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002690 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002691
2692 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002693}
2694
2695VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2696 VkDevice device,
2697 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002698 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002699 VkFence* pFence)
2700{
2701 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002702
Chia-I Wuf7458c52015-10-26 21:10:41 +08002703 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002704
2705 PostCreateFence(device, pFence, result);
2706
2707 return result;
2708}
2709
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002710bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002711 VkDevice device,
2712 const VkFence* pFences)
2713{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002714 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002715 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002716 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002717
2718 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002719}
2720
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002721bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002722 VkDevice device,
2723 uint32_t fenceCount,
2724 VkResult result)
2725{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002726
2727
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002728 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002729 {
2730 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002731 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2732 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002733 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002734
2735 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002736}
2737
2738VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2739 VkDevice device,
2740 uint32_t fenceCount,
2741 const VkFence* pFences)
2742{
2743 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002744
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2746
2747 PostResetFences(device, fenceCount, result);
2748
2749 return result;
2750}
2751
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002752bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002753 VkDevice device,
2754 VkFence fence,
2755 VkResult result)
2756{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002757
Jeremy Hayes99a96322015-06-26 12:48:09 -06002758
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002759 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002760 {
2761 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2763 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002764 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002765
2766 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002767}
2768
2769VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2770 VkDevice device,
2771 VkFence fence)
2772{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002773 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2774
2775 PostGetFenceStatus(device, fence, result);
2776
2777 return result;
2778}
2779
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002780bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002781 VkDevice device,
2782 const VkFence* pFences)
2783{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002784 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002785 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002786 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002787
2788 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002789}
2790
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002791bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792 VkDevice device,
2793 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002794 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002795 uint64_t timeout,
2796 VkResult result)
2797{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002798
2799
2800
2801
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002802 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002803 {
2804 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2806 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002807 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002808
2809 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002810}
2811
2812VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2813 VkDevice device,
2814 uint32_t fenceCount,
2815 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002816 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002817 uint64_t timeout)
2818{
2819 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002820
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2822
2823 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2824
2825 return result;
2826}
2827
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002828bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002829 VkDevice device,
2830 const VkSemaphoreCreateInfo* pCreateInfo)
2831{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002832 if(pCreateInfo != nullptr)
2833 {
2834 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002836 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002837 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002839 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002841
2842 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002843}
2844
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002845bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002846 VkDevice device,
2847 VkSemaphore* pSemaphore,
2848 VkResult result)
2849{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002850
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002851 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002852 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002853 }
2854
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002855 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002856 {
2857 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002858 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2859 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002860 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002861
2862 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002863}
2864
2865VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2866 VkDevice device,
2867 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002868 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869 VkSemaphore* pSemaphore)
2870{
2871 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002872
Chia-I Wuf7458c52015-10-26 21:10:41 +08002873 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002874
2875 PostCreateSemaphore(device, pSemaphore, result);
2876
2877 return result;
2878}
2879
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002880bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 VkDevice device,
2882 const VkEventCreateInfo* pCreateInfo)
2883{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002884 if(pCreateInfo != nullptr)
2885 {
2886 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002887 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002889 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002890 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002892 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002893
2894 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895}
2896
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002897bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898 VkDevice device,
2899 VkEvent* pEvent,
2900 VkResult result)
2901{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002902
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002903 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002904 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002905 }
2906
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002907 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002908 {
2909 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002910 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2911 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002912 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002913
2914 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002915}
2916
2917VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2918 VkDevice device,
2919 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002920 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 VkEvent* pEvent)
2922{
2923 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002924
Chia-I Wuf7458c52015-10-26 21:10:41 +08002925 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002926
2927 PostCreateEvent(device, pEvent, result);
2928
2929 return result;
2930}
2931
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002932bool PostGetEventStatus(
2933 VkDevice device,
2934 VkEvent event,
2935 VkResult result)
2936{
2937
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002939 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002940 {
2941 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002942 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2943 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002944 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002945
2946 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002947}
2948
2949VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2950 VkDevice device,
2951 VkEvent event)
2952{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2954
2955 PostGetEventStatus(device, event, result);
2956
2957 return result;
2958}
2959
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002960bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002961 VkDevice device,
2962 VkEvent event,
2963 VkResult result)
2964{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002965
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002967 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968 {
2969 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002970 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002973
2974 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002975}
2976
2977VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
2978 VkDevice device,
2979 VkEvent event)
2980{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2982
2983 PostSetEvent(device, event, result);
2984
2985 return result;
2986}
2987
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002988bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002989 VkDevice device,
2990 VkEvent event,
2991 VkResult result)
2992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002995 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996 {
2997 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002998 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2999 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003001
3002 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003003}
3004
3005VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3006 VkDevice device,
3007 VkEvent event)
3008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003009 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3010
3011 PostResetEvent(device, event, result);
3012
3013 return result;
3014}
3015
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003016bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003017 VkDevice device,
3018 const VkQueryPoolCreateInfo* pCreateInfo)
3019{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003020 if(pCreateInfo != nullptr)
3021 {
3022 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003024 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003025 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003026 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003027 }
3028 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3029 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3030 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003032 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003033 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003034 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003036
3037 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003038}
3039
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003040bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041 VkDevice device,
3042 VkQueryPool* pQueryPool,
3043 VkResult result)
3044{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003045
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003046 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003047 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003048 }
3049
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003050 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003051 {
3052 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003053 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3054 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003055 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056
3057 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058}
3059
3060VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3061 VkDevice device,
3062 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003063 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064 VkQueryPool* pQueryPool)
3065{
3066 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003067
Chia-I Wuf7458c52015-10-26 21:10:41 +08003068 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069
3070 PostCreateQueryPool(device, pQueryPool, result);
3071
3072 return result;
3073}
3074
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003075bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 VkDevice device,
3077 VkQueryPool queryPool,
3078 uint32_t startQuery,
3079 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003080 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003082 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 VkQueryResultFlags flags,
3084 VkResult result)
3085{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003086
Jeremy Hayes99a96322015-06-26 12:48:09 -06003087
3088
3089
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003090 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003092 }
3093
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003095 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096 {
3097 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003098 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3099 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003100 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003101
3102 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003103}
3104
3105VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3106 VkDevice device,
3107 VkQueryPool queryPool,
3108 uint32_t startQuery,
3109 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003110 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003112 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113 VkQueryResultFlags flags)
3114{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003115 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 -06003116
Chia-I Wuccc93a72015-10-26 18:36:20 +08003117 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118
3119 return result;
3120}
3121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003123 VkDevice device,
3124 const VkBufferCreateInfo* pCreateInfo)
3125{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003126 if(pCreateInfo != nullptr)
3127 {
3128 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003130 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003131 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003132 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003134 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3135 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003137 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003138 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003139 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003140 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003141 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003142 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003143 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003145
3146 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003147}
3148
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003149bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003150 VkDevice device,
3151 VkBuffer* pBuffer,
3152 VkResult result)
3153{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003154
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003155 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003156 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003157 }
3158
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003159 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003160 {
3161 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3163 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003164 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003165
3166 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003167}
3168
3169VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3170 VkDevice device,
3171 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003172 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 VkBuffer* pBuffer)
3174{
3175 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003176
Chia-I Wuf7458c52015-10-26 21:10:41 +08003177 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178
3179 PostCreateBuffer(device, pBuffer, result);
3180
3181 return result;
3182}
3183
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003184bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 VkDevice device,
3186 const VkBufferViewCreateInfo* pCreateInfo)
3187{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003188 if(pCreateInfo != nullptr)
3189 {
3190 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003192 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003193 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003194 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3197 pCreateInfo->format > VK_FORMAT_END_RANGE)
3198 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003199 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003200 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003203 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003204
3205 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003206}
3207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003208bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003209 VkDevice device,
3210 VkBufferView* pView,
3211 VkResult result)
3212{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003214 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003216 }
3217
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003218 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 {
3220 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003223 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224
3225 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226}
3227
3228VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3229 VkDevice device,
3230 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003231 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003232 VkBufferView* pView)
3233{
3234 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003235
Chia-I Wuf7458c52015-10-26 21:10:41 +08003236 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003237
3238 PostCreateBufferView(device, pView, result);
3239
3240 return result;
3241}
3242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003243bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244 VkDevice device,
3245 const VkImageCreateInfo* pCreateInfo)
3246{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003247 if(pCreateInfo != nullptr)
3248 {
3249 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003251 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003252 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003253 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254 }
3255 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3256 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3257 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003258 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003259 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003260 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261 }
3262 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3263 pCreateInfo->format > VK_FORMAT_END_RANGE)
3264 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003265 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003266 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003267 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003268 }
3269 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3270 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3271 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003273 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003274 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003275 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003276 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3277 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003278 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3280 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003281 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003283 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003285 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003286 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003287
3288 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289}
3290
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003291bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 VkDevice device,
3293 VkImage* pImage,
3294 VkResult result)
3295{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003296
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003297 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003298 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003299 }
3300
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003301 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003302 {
3303 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003304 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3305 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003306 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003307
3308 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003309}
3310
Jeremy Hayes99a96322015-06-26 12:48:09 -06003311VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3312 VkDevice device,
3313 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003314 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003315 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003316{
3317 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003318
Chia-I Wuf7458c52015-10-26 21:10:41 +08003319 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003320
3321 PostCreateImage(device, pImage, result);
3322
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003323 return result;
3324}
3325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003326bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327 VkDevice device,
3328 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003329{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003330 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003331 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003332 if ((pSubresource->aspect &
3333 (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 -06003334 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003335 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003337 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003338 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003339 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003340
3341 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342}
3343
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003344bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003345 VkDevice device,
3346 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003347 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003348{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003349
Jeremy Hayes99a96322015-06-26 12:48:09 -06003350
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003351 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003352 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003353 }
3354
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003355 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003356}
3357
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003358VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 VkDevice device,
3360 VkImage image,
3361 const VkImageSubresource* pSubresource,
3362 VkSubresourceLayout* pLayout)
3363{
3364 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003365
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003366 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003367
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003368 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003369}
3370
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003371bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372 VkDevice device,
3373 const VkImageViewCreateInfo* pCreateInfo)
3374{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003375 if(pCreateInfo != nullptr)
3376 {
3377 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003378 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003379 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003380 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003381 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 }
3383 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3384 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3385 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003386 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003387 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003388 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 }
3390 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3391 pCreateInfo->format > VK_FORMAT_END_RANGE)
3392 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003394 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003396 }
3397 if(pCreateInfo->channels.r < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3398 pCreateInfo->channels.r > VK_CHANNEL_SWIZZLE_END_RANGE)
3399 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003401 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003402 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003403 }
3404 if(pCreateInfo->channels.g < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3405 pCreateInfo->channels.g > VK_CHANNEL_SWIZZLE_END_RANGE)
3406 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003407 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003408 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003409 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003410 }
3411 if(pCreateInfo->channels.b < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3412 pCreateInfo->channels.b > VK_CHANNEL_SWIZZLE_END_RANGE)
3413 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003414 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003415 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003416 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417 }
3418 if(pCreateInfo->channels.a < VK_CHANNEL_SWIZZLE_BEGIN_RANGE ||
3419 pCreateInfo->channels.a > VK_CHANNEL_SWIZZLE_END_RANGE)
3420 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003421 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003422 "vkCreateImageView parameter, VkChannelSwizzle pCreateInfo->channels.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003425 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003426
3427 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003428}
3429
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003430bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431 VkDevice device,
3432 VkImageView* pView,
3433 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003434{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003435
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003436 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003437 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003438 }
3439
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003440 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003441 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003442 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003443 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3444 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446
3447 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003448}
3449
3450VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3451 VkDevice device,
3452 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003453 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003454 VkImageView* pView)
3455{
3456 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003457
Chia-I Wuf7458c52015-10-26 21:10:41 +08003458 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459
3460 PostCreateImageView(device, pView, result);
3461
3462 return result;
3463}
3464
Michael Lentine03d8e572015-09-15 14:59:14 -05003465bool PreCreateShaderModule(
3466 VkDevice device,
3467 const VkShaderModuleCreateInfo* pCreateInfo)
3468{
3469 if(pCreateInfo) {
3470 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3471 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3472 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3473 return false;
3474 }
3475 if(!pCreateInfo->pCode) {
3476 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3477 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3478 return false;
3479 }
3480 } else {
3481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3482 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3483 return false;
3484 }
3485
3486 return true;
3487}
3488
3489bool PostCreateShaderModule(
3490 VkDevice device,
3491 VkShaderModule* pShaderModule,
3492 VkResult result)
3493{
3494 if(result < VK_SUCCESS) {
3495 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3496 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3497 return false;
3498 }
3499
3500 return true;
3501}
3502
3503VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3504 VkDevice device,
3505 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003506 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003507 VkShaderModule* pShaderModule)
3508{
3509 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003510 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003511 PostCreateShaderModule(device, pShaderModule, result);
3512 return result;
3513}
3514
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003515bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003516 VkDevice device,
3517 const VkShaderCreateInfo* pCreateInfo)
3518{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003519 if(pCreateInfo != nullptr)
3520 {
3521 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003522 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003523 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003524 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003525 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003526 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003527 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003528 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003529 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003530 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003531
3532 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003533}
3534
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003535bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003536 VkDevice device,
3537 VkShader* pShader,
3538 VkResult result)
3539{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003540
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003541 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003542 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003543 }
3544
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003545 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546 {
3547 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003548 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3549 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003550 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003551
3552 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003553}
3554
3555VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3556 VkDevice device,
3557 const VkShaderCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003558 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003559 VkShader* pShader)
3560{
3561 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003562
Chia-I Wuf7458c52015-10-26 21:10:41 +08003563 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pAllocator, pShader);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003564
3565 PostCreateShader(device, pShader, result);
3566
3567 return result;
3568}
3569
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003570bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003571 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003572 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574 if(pCreateInfo != nullptr)
3575 {
3576 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003577 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003578 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003579 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003580 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003582 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003583 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003584 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003585 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003586
3587 return true;
3588}
3589
3590bool PostCreatePipelineCache(
3591 VkDevice device,
3592 VkPipelineCache* pPipelineCache,
3593 VkResult result)
3594{
3595
3596 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003597 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003598 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003599
3600 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003601 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3604 return false;
3605 }
3606
3607 return true;
3608}
3609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003610VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003611 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003612 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003613 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003614 VkPipelineCache* pPipelineCache)
3615{
3616 PreCreatePipelineCache(device, pCreateInfo);
3617
Chia-I Wuf7458c52015-10-26 21:10:41 +08003618 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619
3620 PostCreatePipelineCache(device, pPipelineCache, result);
3621
3622 return result;
3623}
3624
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003625bool PostGetPipelineCacheData(
3626 VkDevice device,
3627 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003628 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003629 void* pData,
3630 VkResult result)
3631{
3632
3633
Chia-I Wub16facd2015-10-26 19:17:06 +08003634 if(pDataSize != nullptr)
3635 {
3636 }
3637
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003638 if(pData != nullptr)
3639 {
3640 }
3641
3642 if(result < VK_SUCCESS)
3643 {
3644 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3645 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3646 return false;
3647 }
3648
3649 return true;
3650}
3651
3652VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3653 VkDevice device,
3654 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003655 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003656 void* pData)
3657{
Chia-I Wub16facd2015-10-26 19:17:06 +08003658 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003659
Chia-I Wub16facd2015-10-26 19:17:06 +08003660 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003661
3662 return result;
3663}
3664
3665bool PreMergePipelineCaches(
3666 VkDevice device,
3667 const VkPipelineCache* pSrcCaches)
3668{
3669 if(pSrcCaches != nullptr)
3670 {
3671 }
3672
3673 return true;
3674}
3675
3676bool PostMergePipelineCaches(
3677 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003678 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679 uint32_t srcCacheCount,
3680 VkResult result)
3681{
3682
3683
3684
3685 if(result < VK_SUCCESS)
3686 {
3687 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3688 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3689 return false;
3690 }
3691
3692 return true;
3693}
3694
3695VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3696 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003697 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003698 uint32_t srcCacheCount,
3699 const VkPipelineCache* pSrcCaches)
3700{
3701 PreMergePipelineCaches(device, pSrcCaches);
3702
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003703 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003704
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003705 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003706
3707 return result;
3708}
3709
3710bool PreCreateGraphicsPipelines(
3711 VkDevice device,
3712 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3713{
3714 if(pCreateInfos != nullptr)
3715 {
3716 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3717 {
3718 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3719 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3720 return false;
3721 }
3722 if(pCreateInfos->pStages != nullptr)
3723 {
3724 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3725 {
3726 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3727 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3728 return false;
3729 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003730 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3731 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003732 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003733 {
3734 }
3735 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3736 {
3737 }
3738 }
3739 }
3740 if(pCreateInfos->pVertexInputState != nullptr)
3741 {
3742 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3743 {
3744 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3745 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3746 return false;
3747 }
3748 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3749 {
3750 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate < VK_VERTEX_INPUT_STEP_RATE_BEGIN_RANGE ||
3751 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate > VK_VERTEX_INPUT_STEP_RATE_END_RANGE)
3752 {
3753 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3754 "vkCreateGraphicsPipelines parameter, VkVertexInputStepRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->stepRate, is an unrecognized enumerator");
3755 return false;
3756 }
3757 }
3758 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3759 {
3760 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3761 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3762 {
3763 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3764 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3765 return false;
3766 }
3767 }
3768 }
3769 if(pCreateInfos->pInputAssemblyState != nullptr)
3770 {
3771 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3772 {
3773 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3774 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3775 return false;
3776 }
3777 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3778 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3779 {
3780 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3781 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3782 return false;
3783 }
3784 }
3785 if(pCreateInfos->pTessellationState != nullptr)
3786 {
3787 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3788 {
3789 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3790 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3791 return false;
3792 }
3793 }
3794 if(pCreateInfos->pViewportState != nullptr)
3795 {
3796 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3797 {
3798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3799 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3800 return false;
3801 }
3802 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003803 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003805 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTER_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003806 {
3807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003808 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 return false;
3810 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003811 if(pCreateInfos->pRasterizationState->fillMode < VK_FILL_MODE_BEGIN_RANGE ||
3812 pCreateInfos->pRasterizationState->fillMode > VK_FILL_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003813 {
3814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003815 "vkCreateGraphicsPipelines parameter, VkFillMode pCreateInfos->pRasterizationState->fillMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003816 return false;
3817 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003818 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003819 {
3820 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003821 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003822 return false;
3823 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003824 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3825 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 {
3827 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003828 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003829 return false;
3830 }
3831 }
3832 if(pCreateInfos->pMultisampleState != nullptr)
3833 {
3834 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3835 {
3836 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3837 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3838 return false;
3839 }
3840 }
3841 if(pCreateInfos->pDepthStencilState != nullptr)
3842 {
3843 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3844 {
3845 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3846 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3847 return false;
3848 }
3849 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3850 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3851 {
3852 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3853 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3854 return false;
3855 }
3856 if(pCreateInfos->pDepthStencilState->front.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3857 pCreateInfos->pDepthStencilState->front.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3858 {
3859 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3860 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilFailOp, is an unrecognized enumerator");
3861 return false;
3862 }
3863 if(pCreateInfos->pDepthStencilState->front.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3864 pCreateInfos->pDepthStencilState->front.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3865 {
3866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3867 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilPassOp, is an unrecognized enumerator");
3868 return false;
3869 }
3870 if(pCreateInfos->pDepthStencilState->front.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3871 pCreateInfos->pDepthStencilState->front.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3872 {
3873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3874 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.stencilDepthFailOp, is an unrecognized enumerator");
3875 return false;
3876 }
3877 if(pCreateInfos->pDepthStencilState->front.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3878 pCreateInfos->pDepthStencilState->front.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3879 {
3880 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3881 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.stencilCompareOp, is an unrecognized enumerator");
3882 return false;
3883 }
3884 if(pCreateInfos->pDepthStencilState->back.stencilFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3885 pCreateInfos->pDepthStencilState->back.stencilFailOp > VK_STENCIL_OP_END_RANGE)
3886 {
3887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3888 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilFailOp, is an unrecognized enumerator");
3889 return false;
3890 }
3891 if(pCreateInfos->pDepthStencilState->back.stencilPassOp < VK_STENCIL_OP_BEGIN_RANGE ||
3892 pCreateInfos->pDepthStencilState->back.stencilPassOp > VK_STENCIL_OP_END_RANGE)
3893 {
3894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3895 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilPassOp, is an unrecognized enumerator");
3896 return false;
3897 }
3898 if(pCreateInfos->pDepthStencilState->back.stencilDepthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3899 pCreateInfos->pDepthStencilState->back.stencilDepthFailOp > VK_STENCIL_OP_END_RANGE)
3900 {
3901 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3902 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.stencilDepthFailOp, is an unrecognized enumerator");
3903 return false;
3904 }
3905 if(pCreateInfos->pDepthStencilState->back.stencilCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3906 pCreateInfos->pDepthStencilState->back.stencilCompareOp > VK_COMPARE_OP_END_RANGE)
3907 {
3908 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3909 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.stencilCompareOp, is an unrecognized enumerator");
3910 return false;
3911 }
3912 }
3913 if(pCreateInfos->pColorBlendState != nullptr)
3914 {
3915 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3916 {
3917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3918 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3919 return false;
3920 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003921 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3922 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3924 {
3925 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3926 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3927 return false;
3928 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003929 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003930 {
3931 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendColor < VK_BLEND_BEGIN_RANGE ||
3932 pCreateInfos->pColorBlendState->pAttachments->srcBlendColor > VK_BLEND_END_RANGE)
3933 {
3934 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3935 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendColor, is an unrecognized enumerator");
3936 return false;
3937 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003938 if(pCreateInfos->pColorBlendState->pAttachments->dstBlendColor < VK_BLEND_BEGIN_RANGE ||
3939 pCreateInfos->pColorBlendState->pAttachments->dstBlendColor > VK_BLEND_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003940 {
3941 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003942 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->dstBlendColor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 return false;
3944 }
3945 if(pCreateInfos->pColorBlendState->pAttachments->blendOpColor < VK_BLEND_OP_BEGIN_RANGE ||
3946 pCreateInfos->pColorBlendState->pAttachments->blendOpColor > VK_BLEND_OP_END_RANGE)
3947 {
3948 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3949 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpColor, is an unrecognized enumerator");
3950 return false;
3951 }
3952 if(pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha < VK_BLEND_BEGIN_RANGE ||
3953 pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha > VK_BLEND_END_RANGE)
3954 {
3955 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3956 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->srcBlendAlpha, is an unrecognized enumerator");
3957 return false;
3958 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003959 if(pCreateInfos->pColorBlendState->pAttachments->dstBlendAlpha < VK_BLEND_BEGIN_RANGE ||
3960 pCreateInfos->pColorBlendState->pAttachments->dstBlendAlpha > VK_BLEND_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003961 {
3962 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003963 "vkCreateGraphicsPipelines parameter, VkBlend pCreateInfos->pColorBlendState->pAttachments->dstBlendAlpha, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003964 return false;
3965 }
3966 if(pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha < VK_BLEND_OP_BEGIN_RANGE ||
3967 pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha > VK_BLEND_OP_END_RANGE)
3968 {
3969 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3970 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->blendOpAlpha, is an unrecognized enumerator");
3971 return false;
3972 }
3973 }
3974 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003975 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3976 {
3977 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3978 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3979 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003980 }
3981
3982 return true;
3983}
3984
3985bool PostCreateGraphicsPipelines(
3986 VkDevice device,
3987 VkPipelineCache pipelineCache,
3988 uint32_t count,
3989 VkPipeline* pPipelines,
3990 VkResult result)
3991{
3992
3993
3994
3995 if(pPipelines != nullptr)
3996 {
3997 }
3998
3999 if(result < VK_SUCCESS)
4000 {
4001 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
4002 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4003 return false;
4004 }
4005
4006 return true;
4007}
4008
4009VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
4010 VkDevice device,
4011 VkPipelineCache pipelineCache,
4012 uint32_t count,
4013 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004014 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004015 VkPipeline* pPipelines)
4016{
4017 PreCreateGraphicsPipelines(device, pCreateInfos);
4018
Chia-I Wuf7458c52015-10-26 21:10:41 +08004019 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020
4021 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4022
4023 return result;
4024}
4025
4026bool PreCreateComputePipelines(
4027 VkDevice device,
4028 const VkComputePipelineCreateInfo* pCreateInfos)
4029{
4030 if(pCreateInfos != nullptr)
4031 {
4032 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4033 {
4034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4035 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4036 return false;
4037 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004038 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004039 {
4040 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4041 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4042 return false;
4043 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004044 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004045 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004046 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004047 {
4048 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004049 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004050 {
4051 }
4052 }
4053 }
4054
4055 return true;
4056}
4057
4058bool PostCreateComputePipelines(
4059 VkDevice device,
4060 VkPipelineCache pipelineCache,
4061 uint32_t count,
4062 VkPipeline* pPipelines,
4063 VkResult result)
4064{
4065
4066
4067
4068 if(pPipelines != nullptr)
4069 {
4070 }
4071
4072 if(result < VK_SUCCESS)
4073 {
4074 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4075 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4076 return false;
4077 }
4078
4079 return true;
4080}
4081
4082VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4083 VkDevice device,
4084 VkPipelineCache pipelineCache,
4085 uint32_t count,
4086 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004087 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 VkPipeline* pPipelines)
4089{
4090 PreCreateComputePipelines(device, pCreateInfos);
4091
Chia-I Wuf7458c52015-10-26 21:10:41 +08004092 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004093
4094 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4095
4096 return result;
4097}
4098
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004099bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100 VkDevice device,
4101 const VkPipelineLayoutCreateInfo* pCreateInfo)
4102{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103 if(pCreateInfo != nullptr)
4104 {
4105 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004106 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004107 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004108 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004110 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004111 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004113 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004114 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004116 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004117 }
4118
4119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004120}
4121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004122bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004123 VkDevice device,
4124 VkPipelineLayout* pPipelineLayout,
4125 VkResult result)
4126{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004127
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004128 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004129 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004130 }
4131
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004132 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 {
4134 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004135 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4136 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004137 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004138
4139 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004140}
4141
4142VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4143 VkDevice device,
4144 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004145 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004146 VkPipelineLayout* pPipelineLayout)
4147{
4148 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004149
Chia-I Wuf7458c52015-10-26 21:10:41 +08004150 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004151
4152 PostCreatePipelineLayout(device, pPipelineLayout, result);
4153
4154 return result;
4155}
4156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004157bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004158 VkDevice device,
4159 const VkSamplerCreateInfo* pCreateInfo)
4160{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004161 if(pCreateInfo != nullptr)
4162 {
4163 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004164 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004165 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004166 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004168 }
Chia-I Wub99df442015-10-26 16:49:32 +08004169 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4170 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004172 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004173 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004175 }
Chia-I Wub99df442015-10-26 16:49:32 +08004176 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4177 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004179 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004180 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004181 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004182 }
Chia-I Wub99df442015-10-26 16:49:32 +08004183 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4184 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004185 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004186 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004187 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004188 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004189 }
Chia-I Wub99df442015-10-26 16:49:32 +08004190 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4191 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004192 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004193 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004194 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004195 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004196 }
Chia-I Wub99df442015-10-26 16:49:32 +08004197 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4198 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004199 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004200 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004201 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004202 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004203 }
Chia-I Wub99df442015-10-26 16:49:32 +08004204 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4205 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004207 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004208 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004209 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004210 }
4211 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4212 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4213 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004214 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004215 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004216 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004217 }
4218 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4219 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4220 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004222 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004223 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004224 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004225 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004226
4227 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004228}
4229
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004230bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004231 VkDevice device,
4232 VkSampler* pSampler,
4233 VkResult result)
4234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004235
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004236 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004237 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004238 }
4239
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004240 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004241 {
4242 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004243 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4244 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004245 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004246
4247 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004248}
4249
4250VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4251 VkDevice device,
4252 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004253 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 VkSampler* pSampler)
4255{
4256 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004257
Chia-I Wuf7458c52015-10-26 21:10:41 +08004258 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259
4260 PostCreateSampler(device, pSampler, result);
4261
4262 return result;
4263}
4264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004265bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004266 VkDevice device,
4267 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4268{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004269 if(pCreateInfo != nullptr)
4270 {
4271 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004272 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004273 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004274 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004275 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004276 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004277 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004279 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4280 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004283 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004284 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004285 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004286 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004287 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004288 }
4289 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004290 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004291
4292 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293}
4294
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004295bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004296 VkDevice device,
4297 VkDescriptorSetLayout* pSetLayout,
4298 VkResult result)
4299{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004300
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004301 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004302 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004303 }
4304
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004305 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004306 {
4307 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004308 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4309 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004311
4312 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004313}
4314
4315VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4316 VkDevice device,
4317 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004318 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 VkDescriptorSetLayout* pSetLayout)
4320{
4321 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004322
Chia-I Wuf7458c52015-10-26 21:10:41 +08004323 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324
4325 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4326
4327 return result;
4328}
4329
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004330bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331 VkDevice device,
4332 const VkDescriptorPoolCreateInfo* pCreateInfo)
4333{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004334 if(pCreateInfo != nullptr)
4335 {
4336 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004337 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004339 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004340 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004342 if(pCreateInfo->pTypeCounts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004344 if(pCreateInfo->pTypeCounts->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4345 pCreateInfo->pTypeCounts->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004347 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004348 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004349 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004351 }
4352 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004353
4354 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004355}
4356
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004357bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 uint32_t maxSets,
4360 VkDescriptorPool* pDescriptorPool,
4361 VkResult result)
4362{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004363
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004364 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004365
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004366 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368 }
4369
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004370 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004371 {
4372 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004373 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004376
4377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004378}
4379
4380VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4381 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004382 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004383 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 VkDescriptorPool* pDescriptorPool)
4385{
4386 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004387
Chia-I Wuf7458c52015-10-26 21:10:41 +08004388 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004390 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391
4392 return result;
4393}
4394
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004395bool PostResetDescriptorPool(
4396 VkDevice device,
4397 VkDescriptorPool descriptorPool,
4398 VkResult result)
4399{
4400
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004402 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004403 {
4404 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004405 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4406 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004408
4409 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004410}
4411
4412VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4413 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004414 VkDescriptorPool descriptorPool,
4415 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004417 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418
4419 PostResetDescriptorPool(device, descriptorPool, result);
4420
4421 return result;
4422}
4423
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004424bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425 VkDevice device,
4426 const VkDescriptorSetLayout* pSetLayouts)
4427{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004428 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004429 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004430 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004431
4432 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004433}
4434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004435bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436 VkDevice device,
4437 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004438 uint32_t count,
4439 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440 VkResult result)
4441{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004442
Jeremy Hayes99a96322015-06-26 12:48:09 -06004443
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004444 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004445 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446 }
4447
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004448 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004450 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004451 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4452 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004453 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004454
4455 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004456}
4457
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004458VK_LAYER_EXPORT VkResult VKAPI vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004459 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004460 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004461 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004462{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004463 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004464
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004465 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004466
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004467 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004468
4469 return result;
4470}
4471
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004472bool PreFreeDescriptorSets(
4473 VkDevice device,
4474 const VkDescriptorSet* pDescriptorSets)
4475{
4476 if(pDescriptorSets != nullptr)
4477 {
4478 }
4479
4480 return true;
4481}
4482
4483bool PostFreeDescriptorSets(
4484 VkDevice device,
4485 VkDescriptorPool descriptorPool,
4486 uint32_t count,
4487 VkResult result)
4488{
4489
4490
4491
4492 if(result < VK_SUCCESS)
4493 {
4494 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4495 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4496 return false;
4497 }
4498
4499 return true;
4500}
4501
4502VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4503 VkDevice device,
4504 VkDescriptorPool descriptorPool,
4505 uint32_t count,
4506 const VkDescriptorSet* pDescriptorSets)
4507{
4508 PreFreeDescriptorSets(device, pDescriptorSets);
4509
4510 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4511
4512 PostFreeDescriptorSets(device, descriptorPool, count, result);
4513
4514 return result;
4515}
4516
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004517bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004518 VkDevice device,
4519 const VkWriteDescriptorSet* pDescriptorWrites,
4520 const VkCopyDescriptorSet* pDescriptorCopies)
4521{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004522 if(pDescriptorWrites != nullptr)
4523 {
4524 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004526 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004527 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004528 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004529 }
4530 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4531 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4532 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004533 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004535 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004537 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4538 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4539 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004540 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004541 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4542 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004544 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004545 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004546 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004548 }
4549 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004550
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004551 if(pDescriptorCopies != nullptr)
4552 {
4553 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004554 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004556 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004557 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004558 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004559 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004560
4561 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004562}
4563
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004564VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004565 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004566 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004567 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004568 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004569 const VkCopyDescriptorSet* pDescriptorCopies)
4570{
4571 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004572
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004573 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004574}
4575
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004576bool PreCreateFramebuffer(
4577 VkDevice device,
4578 const VkFramebufferCreateInfo* pCreateInfo)
4579{
4580 if(pCreateInfo != nullptr)
4581 {
4582 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4583 {
4584 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4585 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4586 return false;
4587 }
4588 if(pCreateInfo->pAttachments != nullptr)
4589 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004590 }
4591 }
4592
4593 return true;
4594}
4595
4596bool PostCreateFramebuffer(
4597 VkDevice device,
4598 VkFramebuffer* pFramebuffer,
4599 VkResult result)
4600{
4601
4602 if(pFramebuffer != nullptr)
4603 {
4604 }
4605
4606 if(result < VK_SUCCESS)
4607 {
4608 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4609 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4610 return false;
4611 }
4612
4613 return true;
4614}
4615
4616VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4617 VkDevice device,
4618 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004619 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004620 VkFramebuffer* pFramebuffer)
4621{
4622 PreCreateFramebuffer(device, pCreateInfo);
4623
Chia-I Wuf7458c52015-10-26 21:10:41 +08004624 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004625
4626 PostCreateFramebuffer(device, pFramebuffer, result);
4627
4628 return result;
4629}
4630
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004631bool PreCreateRenderPass(
4632 VkDevice device,
4633 const VkRenderPassCreateInfo* pCreateInfo)
4634{
4635 if(pCreateInfo != nullptr)
4636 {
4637 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4638 {
4639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4640 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4641 return false;
4642 }
4643 if(pCreateInfo->pAttachments != nullptr)
4644 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004645 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4646 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4647 {
4648 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4649 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4650 return false;
4651 }
4652 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4653 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4654 {
4655 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4656 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4657 return false;
4658 }
4659 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4660 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4661 {
4662 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4663 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4664 return false;
4665 }
4666 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4667 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4668 {
4669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4670 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4671 return false;
4672 }
4673 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4674 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4675 {
4676 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4677 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4678 return false;
4679 }
4680 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4681 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4682 {
4683 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4684 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4685 return false;
4686 }
4687 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4688 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4689 {
4690 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4691 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4692 return false;
4693 }
4694 }
4695 if(pCreateInfo->pSubpasses != nullptr)
4696 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004697 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4698 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4699 {
4700 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4701 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4702 return false;
4703 }
Cody Northropa505dda2015-08-04 11:16:41 -06004704 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004705 {
Cody Northropa505dda2015-08-04 11:16:41 -06004706 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4707 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 {
4709 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004710 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004711 return false;
4712 }
4713 }
Cody Northropa505dda2015-08-04 11:16:41 -06004714 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 {
Cody Northropa505dda2015-08-04 11:16:41 -06004716 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4717 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004718 {
4719 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004720 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004721 return false;
4722 }
4723 }
Cody Northropa505dda2015-08-04 11:16:41 -06004724 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004725 {
Cody Northropa505dda2015-08-04 11:16:41 -06004726 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4727 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004728 {
4729 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004730 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004731 return false;
4732 }
4733 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004734 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4735 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4736 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004737 {
4738 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004739 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004740 return false;
4741 }
Cody Northropa505dda2015-08-04 11:16:41 -06004742 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004743 {
Cody Northropa505dda2015-08-04 11:16:41 -06004744 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4745 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004746 {
4747 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004748 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004749 return false;
4750 }
4751 }
4752 }
4753 if(pCreateInfo->pDependencies != nullptr)
4754 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 }
4756 }
4757
4758 return true;
4759}
4760
4761bool PostCreateRenderPass(
4762 VkDevice device,
4763 VkRenderPass* pRenderPass,
4764 VkResult result)
4765{
4766
4767 if(pRenderPass != nullptr)
4768 {
4769 }
4770
4771 if(result < VK_SUCCESS)
4772 {
4773 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4774 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4775 return false;
4776 }
4777
4778 return true;
4779}
4780
4781VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4782 VkDevice device,
4783 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004784 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785 VkRenderPass* pRenderPass)
4786{
4787 PreCreateRenderPass(device, pCreateInfo);
4788
Chia-I Wuf7458c52015-10-26 21:10:41 +08004789 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004790
4791 PostCreateRenderPass(device, pRenderPass, result);
4792
4793 return result;
4794}
4795
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796bool PostGetRenderAreaGranularity(
4797 VkDevice device,
4798 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004799 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004800{
4801
4802
4803 if(pGranularity != nullptr)
4804 {
4805 }
4806
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807 return true;
4808}
4809
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004810VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004811 VkDevice device,
4812 VkRenderPass renderPass,
4813 VkExtent2D* pGranularity)
4814{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004815 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004816
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004817 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004818}
4819
4820bool PreCreateCommandPool(
4821 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004822 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004823{
4824 if(pCreateInfo != nullptr)
4825 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004826 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827 {
4828 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4829 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4830 return false;
4831 }
4832 }
4833
4834 return true;
4835}
4836
4837bool PostCreateCommandPool(
4838 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004839 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004840 VkResult result)
4841{
4842
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004843 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004844 {
4845 }
4846
4847 if(result < VK_SUCCESS)
4848 {
4849 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4850 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4851 return false;
4852 }
4853
4854 return true;
4855}
4856
4857VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4858 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004859 const VkCommandPoolCreateInfo* pCreateInfo,
4860 const VkAllocationCallbacks* pAllocator,
4861 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004862{
4863 PreCreateCommandPool(device, pCreateInfo);
4864
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004865 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004866
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004867 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868
4869 return result;
4870}
4871
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004872bool PostResetCommandPool(
4873 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004874 VkCommandPool commandPool,
4875 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004876 VkResult result)
4877{
4878
4879
4880
4881 if(result < VK_SUCCESS)
4882 {
4883 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4884 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4885 return false;
4886 }
4887
4888 return true;
4889}
4890
4891VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4892 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004893 VkCommandPool commandPool,
4894 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004895{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004896 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004897
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004898 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899
4900 return result;
4901}
4902
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004903bool PreCreateCommandBuffer(
4904 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004905 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004906{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004907 if(pCreateInfo != nullptr)
4908 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004909 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004910 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004911 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004912 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004913 return false;
4914 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004915 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4916 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004917 {
4918 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004919 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004920 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004921 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004922 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004923
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004924 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004925}
4926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004927bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004928 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004929 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004931{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004932
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004933 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004934 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004935 }
4936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004937 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004938 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004940 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4941 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004942 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004943
4944 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004945}
4946
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004947VK_LAYER_EXPORT VkResult VKAPI vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004948 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004949 const VkCommandBufferAllocateInfo* pCreateInfo,
4950 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004952 PreCreateCommandBuffer(device, pCreateInfo);
4953
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004954 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004956 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004958 return result;
4959}
4960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004962 VkCommandBuffer commandBuffer,
4963 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004964{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004965 if(pBeginInfo != nullptr)
4966 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004967 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004968 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004969 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004970 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004971 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004972 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004974
4975 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004976}
4977
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004978bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004980 VkResult result)
4981{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004982
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004983 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004984 {
4985 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004986 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004987 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004989
4990 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991}
4992
4993VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004994 VkCommandBuffer commandBuffer,
4995 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004997 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005001 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005003 return result;
5004}
5005
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005006bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008 VkResult result)
5009{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005010
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005011 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012 {
5013 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005014 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005015 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005017
5018 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019}
5020
5021VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005022 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005023{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005024 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005025
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005026 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005027
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005028 return result;
5029}
5030
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005031bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 VkCommandBuffer commandBuffer,
5033 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005034 VkResult result)
5035{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005037
5038 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039 {
5040 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005041 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005042 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005043 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005044
5045 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005046}
5047
5048VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005049 VkCommandBuffer commandBuffer,
5050 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005051{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005052 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005053
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005054 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005055
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005056 return result;
5057}
5058
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005059bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005060 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005061 VkPipelineBindPoint pipelineBindPoint,
5062 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005063{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005064
5065 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5066 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5067 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005068 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005069 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005070 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071 }
5072
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005073
5074 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005075}
5076
Jeremy Hayes99a96322015-06-26 12:48:09 -06005077VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005078 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005079 VkPipelineBindPoint pipelineBindPoint,
5080 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005081{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005085}
5086
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005087VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005088{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005089 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005090}
5091
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005092VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005093{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005095}
5096
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005097VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005098{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005099 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005100}
5101
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005102VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005103{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005104 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005105}
5106
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005107VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005109 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005110}
5111
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005112VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005113{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005114 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005115}
5116
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005117VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilCompareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005118{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005119 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, stencilCompareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005120}
5121
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005122VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilWriteMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005124 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, stencilWriteMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125}
5126
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005127VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t stencilReference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005128{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005129 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, stencilReference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005130}
5131
5132bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005133 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005134 const VkDescriptorSet* pDescriptorSets,
5135 const uint32_t* pDynamicOffsets)
5136{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005137 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005138 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005141 if(pDynamicOffsets != nullptr)
5142 {
5143 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005144
5145 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005146}
5147
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005148bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005149 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005150 VkPipelineBindPoint pipelineBindPoint,
5151 VkPipelineLayout layout,
5152 uint32_t firstSet,
5153 uint32_t setCount,
5154 uint32_t dynamicOffsetCount)
5155{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005156
5157 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5158 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5159 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005160 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005161 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005163 }
5164
5165
5166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005167
5168
5169 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170}
5171
5172VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005173 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005174 VkPipelineBindPoint pipelineBindPoint,
5175 VkPipelineLayout layout,
5176 uint32_t firstSet,
5177 uint32_t setCount,
5178 const VkDescriptorSet* pDescriptorSets,
5179 uint32_t dynamicOffsetCount,
5180 const uint32_t* pDynamicOffsets)
5181{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005182 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005183
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005184 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005185
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005186 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005187}
5188
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005189bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005190 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005191 VkBuffer buffer,
5192 VkDeviceSize offset,
5193 VkIndexType indexType)
5194{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196
5197
5198 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5199 indexType > VK_INDEX_TYPE_END_RANGE)
5200 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005201 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005202 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005205
5206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207}
5208
5209VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005210 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005211 VkBuffer buffer,
5212 VkDeviceSize offset,
5213 VkIndexType indexType)
5214{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005215 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005216
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005217 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005218}
5219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005220bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005221 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222 const VkBuffer* pBuffers,
5223 const VkDeviceSize* pOffsets)
5224{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005225 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005227 }
5228
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005229 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005230 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005231 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005232
5233 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234}
5235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005236bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005237 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005238 uint32_t startBinding,
5239 uint32_t bindingCount)
5240{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005241
5242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005243
5244 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005245}
5246
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005247VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005248 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005249 uint32_t startBinding,
5250 uint32_t bindingCount,
5251 const VkBuffer* pBuffers,
5252 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005253{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005254 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005255
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005256 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005257
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005258 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005259}
5260
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005261bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005262 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005263 uint32_t firstVertex,
5264 uint32_t vertexCount,
5265 uint32_t firstInstance,
5266 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005267{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005268
5269
5270
5271
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005272
5273 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005274}
5275
Jeremy Hayes99a96322015-06-26 12:48:09 -06005276VK_LAYER_EXPORT void VKAPI vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005277 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005278 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005279 uint32_t instanceCount,
5280 uint32_t firstVertex,
5281 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005282{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005283 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005284
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005285 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005286}
5287
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005288bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005289 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290 uint32_t firstIndex,
5291 uint32_t indexCount,
5292 int32_t vertexOffset,
5293 uint32_t firstInstance,
5294 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005295{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296
5297
5298
5299
5300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005301
5302 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005303}
5304
Jeremy Hayes99a96322015-06-26 12:48:09 -06005305VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005306 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005307 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005308 uint32_t instanceCount,
5309 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005310 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005311 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005312{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005313 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005314
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005315 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316}
5317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005318bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005319 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005320 VkBuffer buffer,
5321 VkDeviceSize offset,
5322 uint32_t count,
5323 uint32_t stride)
5324{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005325
5326
5327
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005328
5329
5330 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005331}
5332
5333VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005334 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005335 VkBuffer buffer,
5336 VkDeviceSize offset,
5337 uint32_t count,
5338 uint32_t stride)
5339{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005340 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005341
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005342 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005343}
5344
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005345bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005346 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347 VkBuffer buffer,
5348 VkDeviceSize offset,
5349 uint32_t count,
5350 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005351{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005352
5353
5354
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005355
5356
5357 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005358}
5359
Jeremy Hayes99a96322015-06-26 12:48:09 -06005360VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005361 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005362 VkBuffer buffer,
5363 VkDeviceSize offset,
5364 uint32_t count,
5365 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005366{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005367 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005369 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005370}
5371
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005372bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005373 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005374 uint32_t x,
5375 uint32_t y,
5376 uint32_t z)
5377{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005378
5379
5380
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005381
5382 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005383}
5384
5385VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005386 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005387 uint32_t x,
5388 uint32_t y,
5389 uint32_t z)
5390{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005391 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005392
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005393 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005394}
5395
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005396bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005397 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398 VkBuffer buffer,
5399 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005400{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005401
Jeremy Hayes99a96322015-06-26 12:48:09 -06005402
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005403
5404 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005405}
5406
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005408 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005409 VkBuffer buffer,
5410 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005411{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005412 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005414 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005415}
5416
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005417bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005418 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005419 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005420{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005421 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005423 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005424
5425 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005426}
5427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005428bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005429 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005431 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005432 uint32_t regionCount)
5433{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005434
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005437
5438 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005439}
5440
5441VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005442 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005443 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005444 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005445 uint32_t regionCount,
5446 const VkBufferCopy* pRegions)
5447{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005448 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005449
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005450 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005451
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005452 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005453}
5454
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005455bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005456 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005457 const VkImageCopy* pRegions)
5458{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005459 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005460 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005461 if ((pRegions->srcSubresource.aspect &
5462 (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 -06005463 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005464 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005465 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005466 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005467 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005468 if ((pRegions->dstSubresource.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005469 (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 -06005470 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005471 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5472 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005473 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005474 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005475 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005476
5477 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478}
5479
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005480bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005481 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005482 VkImage srcImage,
5483 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005484 VkImage dstImage,
5485 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005486 uint32_t regionCount)
5487{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005488
Jeremy Hayes99a96322015-06-26 12:48:09 -06005489
5490 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5491 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5492 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005493 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005494 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005495 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005496 }
5497
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005499 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5500 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005501 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005502 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5503 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005505 }
5506
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005507
5508 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005509}
5510
5511VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005512 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005513 VkImage srcImage,
5514 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005515 VkImage dstImage,
5516 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005517 uint32_t regionCount,
5518 const VkImageCopy* pRegions)
5519{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005520 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005521
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005522 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005524 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005525}
5526
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005527bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005528 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529 const VkImageBlit* pRegions)
5530{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005531 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005532 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005533 if ((pRegions->srcSubresource.aspect &
5534 (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 -06005535 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005536 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005537 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005538 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005539 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005540 if ((pRegions->dstSubresource.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005541 (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 -06005542 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005543 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5544 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005545 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005547 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005548
5549 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550}
5551
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005552bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005553 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005554 VkImage srcImage,
5555 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005556 VkImage dstImage,
5557 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005558 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005559 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005560{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005561
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562
5563 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5564 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5565 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005566 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005567 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005568 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569 }
5570
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005572 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5573 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005574 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005575 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5576 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005577 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578 }
5579
5580
Chia-I Wub99df442015-10-26 16:49:32 +08005581 if(filter < VK_FILTER_BEGIN_RANGE ||
5582 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005583 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005584 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005585 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005586 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005587 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588
5589 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590}
5591
5592VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005593 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594 VkImage srcImage,
5595 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005596 VkImage dstImage,
5597 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598 uint32_t regionCount,
5599 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005600 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005601{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005602 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005603
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005604 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005605
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005606 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005607}
5608
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005609bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005610 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611 const VkBufferImageCopy* pRegions)
5612{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005613 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005615 if ((pRegions->imageSubresource.aspect &
5616 (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 -06005617 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005618 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005619 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005620 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005621 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005622 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005623
5624 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005625}
5626
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005627bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005628 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005629 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005630 VkImage dstImage,
5631 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005632 uint32_t regionCount)
5633{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005634
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005637 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5638 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005640 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5641 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005642 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 }
5644
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005645
5646 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647}
5648
5649VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005650 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005652 VkImage dstImage,
5653 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654 uint32_t regionCount,
5655 const VkBufferImageCopy* pRegions)
5656{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005657 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005658
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005659 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005661 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005662}
5663
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005664bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005665 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666 const VkBufferImageCopy* pRegions)
5667{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005668 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005669 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005670 if ((pRegions->imageSubresource.aspect &
5671 (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 -06005672 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005673 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005674 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005675 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005677 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005678
5679 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680}
5681
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005682bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005683 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684 VkImage srcImage,
5685 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005686 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687 uint32_t regionCount)
5688{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005689
Jeremy Hayes99a96322015-06-26 12:48:09 -06005690
5691 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5692 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5693 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005694 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005695 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005696 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005697 }
5698
Jeremy Hayes99a96322015-06-26 12:48:09 -06005699
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005700
5701 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702}
5703
5704VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005705 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005706 VkImage srcImage,
5707 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005708 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005709 uint32_t regionCount,
5710 const VkBufferImageCopy* pRegions)
5711{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005712 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005713
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005714 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005715
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005716 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005717}
5718
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005719bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005720 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721 const uint32_t* pData)
5722{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005723 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005725 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005726
5727 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005728}
5729
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005730bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005731 VkCommandBuffer commandBuffer,
5732 VkBuffer dstBuffer,
5733 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734 VkDeviceSize dataSize)
5735{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005736
5737
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005738
5739
5740 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741}
5742
5743VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005744 VkCommandBuffer commandBuffer,
5745 VkBuffer dstBuffer,
5746 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747 VkDeviceSize dataSize,
5748 const uint32_t* pData)
5749{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005750 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005751
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005752 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005754 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005755}
5756
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005757bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005758 VkCommandBuffer commandBuffer,
5759 VkBuffer dstBuffer,
5760 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005761 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005762 uint32_t data)
5763{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764
5765
5766
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005767
5768
5769 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005770}
5771
5772VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005773 VkCommandBuffer commandBuffer,
5774 VkBuffer dstBuffer,
5775 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005776 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005777 uint32_t data)
5778{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005779 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005780
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005781 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005782}
5783
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005784bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005785 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005786 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005787 const VkImageSubresourceRange* pRanges)
5788{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005789 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005790 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005791 }
5792
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005793 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005794 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005795 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005796 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005797
5798 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799}
5800
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005801bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005802 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005803 VkImage image,
5804 VkImageLayout imageLayout,
5805 uint32_t rangeCount)
5806{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005807
Jeremy Hayes99a96322015-06-26 12:48:09 -06005808
5809 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5810 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5811 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005812 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005813 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005814 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005815 }
5816
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005817
5818 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819}
5820
5821VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005822 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005823 VkImage image,
5824 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005825 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005826 uint32_t rangeCount,
5827 const VkImageSubresourceRange* pRanges)
5828{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005829 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005830
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005831 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005833 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834}
5835
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005836bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005837 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005838 const VkImageSubresourceRange* pRanges)
5839{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005840 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005841 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005842 /*
5843 * TODO: How do we validation pRanges->aspectMask?
5844 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5845 * VK_IMAGE_ASPECT_STENCIL_BIT.
5846 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005847 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005848
5849 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005850}
5851
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005852bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005853 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005854 VkImage image,
5855 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005856 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005857 uint32_t rangeCount)
5858{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005859
Jeremy Hayes99a96322015-06-26 12:48:09 -06005860
5861 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5862 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5863 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005864 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005865 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005866 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005867 }
5868
5869
5870
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005871
5872 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873}
5874
Chris Forbesd9be82b2015-06-22 17:21:59 +12005875VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005876 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005877 VkImage image,
5878 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005879 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880 uint32_t rangeCount,
5881 const VkImageSubresourceRange* pRanges)
5882{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005883 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005884
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005885 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005886
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005887 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005888}
5889
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005890bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005891 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005892 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005893 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005894{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005895 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005896 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005897 }
5898
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005899 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005900 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901 }
5902
5903 return true;
5904}
5905
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005906VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005907 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005908 uint32_t attachmentCount,
5909 const VkClearAttachment* pAttachments,
5910 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005911 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005912{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005913 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005914 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915 }
5916
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005917 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918}
5919
5920bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005921 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005922 const VkImageResolve* pRegions)
5923{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005924 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005925 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005926 if ((pRegions->srcSubresource.aspect &
5927 (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 -06005928 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005929 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005930 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005931 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005932 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005933 if ((pRegions->dstSubresource.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005934 (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 -06005935 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005936 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5937 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005938 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005939 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005940 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005941
5942 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005943}
5944
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005945bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005946 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005947 VkImage srcImage,
5948 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005949 VkImage dstImage,
5950 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005951 uint32_t regionCount)
5952{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005953
Jeremy Hayes99a96322015-06-26 12:48:09 -06005954
5955 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5956 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5957 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005958 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005959 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005960 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961 }
5962
Jeremy Hayes99a96322015-06-26 12:48:09 -06005963
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005964 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5965 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005966 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005967 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5968 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005969 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005970 }
5971
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005972
5973 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005974}
5975
5976VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005977 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978 VkImage srcImage,
5979 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005980 VkImage dstImage,
5981 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982 uint32_t regionCount,
5983 const VkImageResolve* pRegions)
5984{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005985 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005986
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005987 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005988
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005989 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005990}
5991
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005992bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005993 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005995 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997
Jeremy Hayes99a96322015-06-26 12:48:09 -06005998
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005999
6000 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001}
6002
6003VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006006 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006008 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006010 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006011}
6012
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006013bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006014 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006016 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018
Jeremy Hayes99a96322015-06-26 12:48:09 -06006019
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006020
6021 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022}
6023
6024VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006025 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006027 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006029 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006031 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006032}
6033
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006034bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006035 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006037 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006039 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006040 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041 }
6042
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006043 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006045 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006046
6047 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006048}
6049
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006050bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006051 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006053 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006054 VkPipelineStageFlags dstStageMask,
6055 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006057
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006058
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059
6060
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006061
6062 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063}
6064
6065VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006066 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067 uint32_t eventCount,
6068 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006069 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 VkPipelineStageFlags dstStageMask,
6071 uint32_t memoryBarrierCount,
6072 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006074 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006075
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006076 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006077
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006078 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079}
6080
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006081bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006082 VkCommandBuffer commandBuffer,
6083 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006085 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006086 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006087 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006088
6089 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006090}
6091
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006092bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006093 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006094 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006095 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006096 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006097 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006099
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006100
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101
6102
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006103
6104 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105}
6106
6107VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006108 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006109 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006110 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006111 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006112 uint32_t memoryBarrierCount,
6113 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006114{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006115 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006116
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006117 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006118
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006119 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120}
6121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006122bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006123 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124 VkQueryPool queryPool,
6125 uint32_t slot,
6126 VkQueryControlFlags flags)
6127{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129
6130
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006131
6132 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006133}
6134
6135VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006136 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006137 VkQueryPool queryPool,
6138 uint32_t slot,
6139 VkQueryControlFlags flags)
6140{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006141 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006143 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144}
6145
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006146bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006147 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006148 VkQueryPool queryPool,
6149 uint32_t slot)
6150{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006151
Jeremy Hayes99a96322015-06-26 12:48:09 -06006152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006153
6154 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155}
6156
6157VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006158 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006159 VkQueryPool queryPool,
6160 uint32_t slot)
6161{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006162 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006163
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006164 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006165}
6166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006167bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006168 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169 VkQueryPool queryPool,
6170 uint32_t startQuery,
6171 uint32_t queryCount)
6172{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006174
6175
6176
6177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178}
6179
6180VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006181 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182 VkQueryPool queryPool,
6183 uint32_t startQuery,
6184 uint32_t queryCount)
6185{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006186 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006188 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189}
6190
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006191bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006192 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006193 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006194 VkQueryPool queryPool,
6195 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006196{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006197
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006198 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006199
6200 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201}
6202
6203VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006204 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006205 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006206 VkQueryPool queryPool,
6207 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006208{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006209 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006210
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006211 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006212}
6213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006214bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006215 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216 VkQueryPool queryPool,
6217 uint32_t startQuery,
6218 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006219 VkBuffer dstBuffer,
6220 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006221 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 VkQueryResultFlags flags)
6223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006224
6225
6226
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006227
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228
6229
6230
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006231
6232 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006233}
6234
Jeremy Hayesad367152015-04-17 10:36:53 -06006235VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006236 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237 VkQueryPool queryPool,
6238 uint32_t startQuery,
6239 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006240 VkBuffer dstBuffer,
6241 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006242 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006244{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006245 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006246
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006247 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006248}
6249
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006250bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006251 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006252 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006253{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006254 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006256 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006257
6258 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006259}
6260
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006261bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006262 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006263 VkPipelineLayout layout,
6264 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006265 uint32_t offset,
6266 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006268
Jeremy Hayes99a96322015-06-26 12:48:09 -06006269
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006270
6271
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006272
6273 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006274}
6275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006276VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006277 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006278 VkPipelineLayout layout,
6279 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006280 uint32_t offset,
6281 uint32_t size,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006282 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006284 PreCmdPushConstants(commandBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006285
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006286 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006287
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006288 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006289}
6290
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006291bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006292 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006293 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006294{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006295 if(pRenderPassBegin != nullptr)
6296 {
6297 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006299 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006300 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006301 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006302 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006303 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006305 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006306 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006307
6308 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006309}
6310
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006311bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006312 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006313 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006314{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006315
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006316 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
6317 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
6318 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006319 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006320 "vkCmdBeginRenderPass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6321 return false;
6322 }
6323
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006324 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006325}
6326
Jeremy Hayes99a96322015-06-26 12:48:09 -06006327VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006328 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006329 const VkRenderPassBeginInfo* pRenderPassBegin,
6330 VkRenderPassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006331{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006332 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006333
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006334 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006335
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006337}
6338
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006339bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006340 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006341 VkRenderPassContents contents)
6342{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006343
6344 if(contents < VK_RENDER_PASS_CONTENTS_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006345 contents > VK_RENDER_PASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006346 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006347 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006348 "vkCmdNextSubpass parameter, VkRenderPassContents contents, is an unrecognized enumerator");
6349 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006350 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006351
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006352 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006353}
6354
6355VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006356 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006357 VkRenderPassContents contents)
6358{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006359 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006360
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006361 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006362}
6363
6364bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006365 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006366{
6367
6368 return true;
6369}
6370
6371VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006372 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006373{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006374 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006375
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006376 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006377}
6378
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006379bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006380 VkCommandBuffer commandBuffer,
6381 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006382{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006383 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006384 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385 }
6386
6387 return true;
6388}
6389
6390bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006391 VkCommandBuffer commandBuffer,
6392 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006393{
6394
6395
6396 return true;
6397}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006398
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006399VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006400 VkCommandBuffer commandBuffer,
6401 uint32_t commandBuffersCount,
6402 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006403{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006404 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006405
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006406 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006407
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006408 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006409}
6410
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006411VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006412{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006413 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006414 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006415 }
6416
Jon Ashburn8fd08252015-05-28 16:25:02 -06006417 /* loader uses this to force layer initialization; device object is wrapped */
6418 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006419 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006420 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006421 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006422
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006423 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006424 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006425 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006426 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006427 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006428 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006429 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006430 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006431 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006432 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006433 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006434 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006435 if (!strcmp(funcName, "vkAllocateMemory"))
6436 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006437 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006438 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006439 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006440 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006441 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006442 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006443 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006444 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006445 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006446 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006447 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006448 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006449 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006450 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006451 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006452 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006453 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006454 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006455 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006456 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006457 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006458 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006460 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006461 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006462 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006463 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006464 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006466 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006477 if (!strcmp(funcName, "vkCreateShaderModule"))
6478 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006479 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006480 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006481 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006482 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006483 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006485 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006493 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6494 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006495 if (!strcmp(funcName, "vkCmdSetViewport"))
6496 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006497 if (!strcmp(funcName, "vkCmdSetScissor"))
6498 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006499 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6500 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6501 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6502 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6503 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6504 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6505 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6506 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6507 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6508 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6509 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6510 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6511 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6512 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006513 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6514 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006515 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006516 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006517 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006518 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006519 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006520 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006532 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006536 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006538 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006539 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006540 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006541 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006542 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006543 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006544 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006545 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006546 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006547 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006548 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006549 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006550 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006552 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006553 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006554 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006555 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006556 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006558 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006563 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006564 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006566 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006568 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006572 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006574 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006576 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006583 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006585
Jon Ashburneab34492015-06-01 09:37:38 -06006586 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006587 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006588 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006589 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006590 }
6591}
6592
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006594{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006595 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006596 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006597 }
6598
Jon Ashburn8fd08252015-05-28 16:25:02 -06006599 /* loader uses this to force layer initialization; instance object is wrapped */
6600 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006601 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006602 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006603 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006604
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006607 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006608 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006614 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006615 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006616 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006617 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6618 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6619 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6620 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6621 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6622 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6623 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6624 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006625
Jeremy Hayes99a96322015-06-26 12:48:09 -06006626 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006627 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006628 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006629 return fptr;
6630
Jeremy Hayes99a96322015-06-26 12:48:09 -06006631 {
6632 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6633 return NULL;
6634 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6635 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006636}