blob: ad1f2e8a5d28158d87a6079bfad8f0ec01247e03 [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)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800451 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600452 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;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800472 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600473 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800474 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600475 }
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
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001034bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001035{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001036 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1037 VK_COLOR_COMPONENT_B_BIT |
1038 VK_COLOR_COMPONENT_G_BIT |
1039 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001040 if(enumerator & (~allFlags))
1041 {
1042 return false;
1043 }
1044
1045 return true;
1046}
1047
1048static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001049std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001050{
1051 if(!ValidateEnumerator(enumerator))
1052 {
1053 return "unrecognized enumerator";
1054 }
1055
1056 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001057 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001058 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001059 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001060 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001061 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001062 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001063 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001064 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001065 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001066 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001067 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001068 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001069 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001070 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072 }
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
Chia-I Wua4594202015-10-27 19:54:37 +08001324bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001325{
Chia-I Wua4594202015-10-27 19:54:37 +08001326 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1327 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1328 VK_ACCESS_INDEX_READ_BIT |
1329 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1330 VK_ACCESS_UNIFORM_READ_BIT |
1331 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1332 VK_ACCESS_SHADER_READ_BIT |
1333 VK_ACCESS_SHADER_WRITE_BIT |
1334 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1335 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1336 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1337 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1338 VK_ACCESS_TRANSFER_READ_BIT |
1339 VK_ACCESS_TRANSFER_WRITE_BIT |
1340 VK_ACCESS_HOST_READ_BIT |
1341 VK_ACCESS_HOST_WRITE_BIT |
1342 VK_ACCESS_MEMORY_READ_BIT |
1343 VK_ACCESS_MEMORY_WRITE_BIT);
1344
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001345 if(enumerator & (~allFlags))
1346 {
1347 return false;
1348 }
1349
1350 return true;
1351}
1352
1353static
Chia-I Wua4594202015-10-27 19:54:37 +08001354std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001355{
1356 if(!ValidateEnumerator(enumerator))
1357 {
1358 return "unrecognized enumerator";
1359 }
1360
1361 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001362 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001363 {
Chia-I Wua4594202015-10-27 19:54:37 +08001364 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001365 }
Chia-I Wua4594202015-10-27 19:54:37 +08001366 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001367 {
Chia-I Wua4594202015-10-27 19:54:37 +08001368 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001369 }
Chia-I Wua4594202015-10-27 19:54:37 +08001370 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001371 {
Chia-I Wua4594202015-10-27 19:54:37 +08001372 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001373 }
Chia-I Wua4594202015-10-27 19:54:37 +08001374 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001375 {
Chia-I Wua4594202015-10-27 19:54:37 +08001376 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001377 }
Chia-I Wua4594202015-10-27 19:54:37 +08001378 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001379 {
Chia-I Wua4594202015-10-27 19:54:37 +08001380 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001381 }
Chia-I Wua4594202015-10-27 19:54:37 +08001382 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001383 {
Chia-I Wua4594202015-10-27 19:54:37 +08001384 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001385 }
Chia-I Wua4594202015-10-27 19:54:37 +08001386 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001387 {
Chia-I Wua4594202015-10-27 19:54:37 +08001388 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001389 }
Chia-I Wua4594202015-10-27 19:54:37 +08001390 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001391 {
Chia-I Wua4594202015-10-27 19:54:37 +08001392 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001393 }
Chia-I Wua4594202015-10-27 19:54:37 +08001394 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001395 {
Chia-I Wua4594202015-10-27 19:54:37 +08001396 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001397 }
Chia-I Wua4594202015-10-27 19:54:37 +08001398 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001399 {
Chia-I Wua4594202015-10-27 19:54:37 +08001400 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001401 }
Chia-I Wua4594202015-10-27 19:54:37 +08001402 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001403 {
Chia-I Wua4594202015-10-27 19:54:37 +08001404 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001405 }
Chia-I Wua4594202015-10-27 19:54:37 +08001406 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001407 {
Chia-I Wua4594202015-10-27 19:54:37 +08001408 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001409 }
Chia-I Wua4594202015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001411 {
Chia-I Wua4594202015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001413 }
Chia-I Wua4594202015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001415 {
Chia-I Wua4594202015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001417 }
Chia-I Wua4594202015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001419 {
Chia-I Wua4594202015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001421 }
Chia-I Wua4594202015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001423 {
Chia-I Wua4594202015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001425 }
Chia-I Wua4594202015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 {
Chia-I Wua4594202015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001429 }
1430
1431 std::string enumeratorString;
1432 for(auto const& string : strings)
1433 {
1434 enumeratorString += string;
1435
1436 if(string != strings.back())
1437 {
1438 enumeratorString += '|';
1439 }
1440 }
1441
1442 return enumeratorString;
1443}
1444
1445static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001446bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001447{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001448 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1449 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001450 if(enumerator & (~allFlags))
1451 {
1452 return false;
1453 }
1454
1455 return true;
1456}
1457
1458static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001459std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001460{
1461 if(!ValidateEnumerator(enumerator))
1462 {
1463 return "unrecognized enumerator";
1464 }
1465
1466 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001467 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001468 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001469 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001470 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001471 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001472 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001473 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001474 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001475
1476 std::string enumeratorString;
1477 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001478 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001479 enumeratorString += string;
1480
1481 if(string != strings.back())
1482 {
1483 enumeratorString += '|';
1484 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001485 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001486
1487 return enumeratorString;
1488}
1489
1490static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001491bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001492{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001493 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001494 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001495 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001496 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001497 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001498
1499 return true;
1500}
1501
1502static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001503std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001504{
1505 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001506 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001507 return "unrecognized enumerator";
1508 }
1509
1510 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001511 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001512 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001513 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001514 }
1515
1516 std::string enumeratorString;
1517 for(auto const& string : strings)
1518 {
1519 enumeratorString += string;
1520
1521 if(string != strings.back())
1522 {
1523 enumeratorString += '|';
1524 }
1525 }
1526
1527 return enumeratorString;
1528}
1529
1530static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001531bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001532{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001533 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1534 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1535 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001536 if(enumerator & (~allFlags))
1537 {
1538 return false;
1539 }
1540
1541 return true;
1542}
1543
1544static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001545std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001546{
1547 if(!ValidateEnumerator(enumerator))
1548 {
1549 return "unrecognized enumerator";
1550 }
1551
1552 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001553 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001554 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001555 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001556 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001557 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001558 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001559 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001560 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001561 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001562 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001563 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001564 }
1565
1566 std::string enumeratorString;
1567 for(auto const& string : strings)
1568 {
1569 enumeratorString += string;
1570
1571 if(string != strings.back())
1572 {
1573 enumeratorString += '|';
1574 }
1575 }
1576
1577 return enumeratorString;
1578}
1579
1580static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001581bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001582{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001583 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001584 if(enumerator & (~allFlags))
1585 {
1586 return false;
1587 }
1588
1589 return true;
1590}
1591
1592static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001593std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001594{
1595 if(!ValidateEnumerator(enumerator))
1596 {
1597 return "unrecognized enumerator";
1598 }
1599
1600 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001601 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001602 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001603 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001604 }
1605
1606 std::string enumeratorString;
1607 for(auto const& string : strings)
1608 {
1609 enumeratorString += string;
1610
1611 if(string != strings.back())
1612 {
1613 enumeratorString += '|';
1614 }
1615 }
1616
1617 return enumeratorString;
1618}
1619
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001620static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001621bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001622{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001623 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1624 VK_IMAGE_ASPECT_STENCIL_BIT |
1625 VK_IMAGE_ASPECT_DEPTH_BIT |
1626 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001627 if(enumerator & (~allFlags))
1628 {
1629 return false;
1630 }
1631
1632 return true;
1633}
1634
1635static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001636std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001637{
1638 if(!ValidateEnumerator(enumerator))
1639 {
1640 return "unrecognized enumerator";
1641 }
1642
1643 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001644 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001645 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001646 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1647 }
1648 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1649 {
1650 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1651 }
1652 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1653 {
1654 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1655 }
1656 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1657 {
1658 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1659 }
1660
1661 std::string enumeratorString;
1662 for(auto const& string : strings)
1663 {
1664 enumeratorString += string;
1665
1666 if(string != strings.back())
1667 {
1668 enumeratorString += '|';
1669 }
1670 }
1671
1672 return enumeratorString;
1673}
1674
1675static
1676bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1677{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001678 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001679 if(enumerator & (~allFlags))
1680 {
1681 return false;
1682 }
1683
1684 return true;
1685}
1686
1687static
1688std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1689{
1690 if(!ValidateEnumerator(enumerator))
1691 {
1692 return "unrecognized enumerator";
1693 }
1694
1695 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001696 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001697 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001698 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001699 }
1700
1701 std::string enumeratorString;
1702 for(auto const& string : strings)
1703 {
1704 enumeratorString += string;
1705
1706 if(string != strings.back())
1707 {
1708 enumeratorString += '|';
1709 }
1710 }
1711
1712 return enumeratorString;
1713}
1714
Jeremy Hayes99a96322015-06-26 12:48:09 -06001715VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1716 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001717 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001718 VkInstance* pInstance)
1719{
1720 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001721 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001722
1723 if (result == VK_SUCCESS) {
1724 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001725 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001726 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001727
1728 InitParamChecker(data);
1729 }
1730
1731 return result;
1732}
1733
Mark Lobodzinski2141f652015-09-07 13:59:43 -06001734VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001735 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001736 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001737{
1738 // Grab the key before the instance is destroyed.
1739 dispatch_key key = get_dispatch_key(instance);
1740 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001741 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001742
1743 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001744 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1745 while (my_data->logging_callback.size() > 0) {
1746 VkDbgMsgCallback callback = my_data->logging_callback.back();
1747 layer_destroy_msg_callback(my_data->report_data, callback);
1748 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001749 }
1750
1751 layer_debug_report_destroy_instance(mid(instance));
1752 layer_data_map.erase(pTable);
1753
1754 pc_instance_table_map.erase(key);
1755 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001756}
1757
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001758bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001759 VkInstance instance,
1760 uint32_t* pPhysicalDeviceCount,
1761 VkPhysicalDevice* pPhysicalDevices,
1762 VkResult result)
1763{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001764
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001765 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001766 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001767 }
1768
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001769 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001771 }
1772
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001773 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001774 {
1775 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001776 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
1777 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001778 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001779
1780 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001781}
1782
1783VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1784 VkInstance instance,
1785 uint32_t* pPhysicalDeviceCount,
1786 VkPhysicalDevice* pPhysicalDevices)
1787{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001788 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1789
1790 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1791
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001792 return result;
1793}
1794
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001795bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001796 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001797 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001798{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001799
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001800 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001801 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001802 }
1803
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001804 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001805}
1806
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001807VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001808 VkPhysicalDevice physicalDevice,
1809 VkPhysicalDeviceFeatures* pFeatures)
1810{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001811 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001813 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001814}
1815
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001816bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817 VkPhysicalDevice physicalDevice,
1818 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001819 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001820{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001821
1822 if(format < VK_FORMAT_BEGIN_RANGE ||
1823 format > VK_FORMAT_END_RANGE)
1824 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001825 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001826 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001827 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001828 }
1829
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001830 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001831 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001832 }
1833
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001834 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001835}
1836
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001837VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838 VkPhysicalDevice physicalDevice,
1839 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001840 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001842 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001844 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001845}
1846
1847bool PostGetPhysicalDeviceImageFormatProperties(
1848 VkPhysicalDevice physicalDevice,
1849 VkFormat format,
1850 VkImageType type,
1851 VkImageTiling tiling,
1852 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001853 VkImageCreateFlags flags,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001854 VkImageFormatProperties* pImageFormatProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001855{
1856
1857 if(format < VK_FORMAT_BEGIN_RANGE ||
1858 format > VK_FORMAT_END_RANGE)
1859 {
1860 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1861 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1862 return false;
1863 }
1864
1865 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1866 type > VK_IMAGE_TYPE_END_RANGE)
1867 {
1868 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1869 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1870 return false;
1871 }
1872
1873 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1874 tiling > VK_IMAGE_TILING_END_RANGE)
1875 {
1876 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1877 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1878 return false;
1879 }
1880
1881
1882 if(pImageFormatProperties != nullptr)
1883 {
1884 }
1885
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001886 return true;
1887}
1888
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001889VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001890 VkPhysicalDevice physicalDevice,
1891 VkFormat format,
1892 VkImageType type,
1893 VkImageTiling tiling,
1894 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001895 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001896 VkImageFormatProperties* pImageFormatProperties)
1897{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001898 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001899
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001900 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001901}
1902
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001903bool PostGetPhysicalDeviceProperties(
1904 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001905 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001906{
1907
1908 if(pProperties != nullptr)
1909 {
1910 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1911 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1912 {
1913 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1914 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1915 return false;
1916 }
1917 }
1918
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001919 return true;
1920}
1921
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001922VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001923 VkPhysicalDevice physicalDevice,
1924 VkPhysicalDeviceProperties* pProperties)
1925{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001926 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001927
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001928 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001929}
1930
Cody Northropd0802882015-08-03 17:04:53 -06001931bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001932 VkPhysicalDevice physicalDevice,
1933 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001934 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001935{
1936
Cody Northropd0802882015-08-03 17:04:53 -06001937 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001938 {
1939 }
1940
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001941 if(pQueueProperties != nullptr)
1942 {
1943 }
1944
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001945 return true;
1946}
1947
Courtney Goeltzenleuchter9a63f442015-10-27 11:19:02 -06001948VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001949 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06001950 uint32_t* pCount,
1951 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001952{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001953 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001954
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001955 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001956}
1957
1958bool PostGetPhysicalDeviceMemoryProperties(
1959 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001960 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001961{
1962
1963 if(pMemoryProperties != nullptr)
1964 {
1965 }
1966
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001967 return true;
1968}
1969
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001970VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001971 VkPhysicalDevice physicalDevice,
1972 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
1973{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001974 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001975
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001976 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001977}
1978
Jeremy Hayes99a96322015-06-26 12:48:09 -06001979VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
1980 VkPhysicalDevice physicalDevice,
1981 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001982 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001983 VkDevice* pDevice)
1984{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06001985 /*
1986 * NOTE: The loader fills in the ICD's device object in *pDevice.
1987 * Use that object to get the dispatch table.
1988 *
1989 * NOTE: We do not validate physicalDevice or any dispatchable
1990 * object as the first parameter. We couldn't get here if it was wrong!
1991 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06001992 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001993 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001994 if(result == VK_SUCCESS)
1995 {
1996 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
1997 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
1998 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
1999 }
2000
2001 return result;
2002}
2003
Mark Lobodzinski2141f652015-09-07 13:59:43 -06002004VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002005 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002006 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002007{
2008 layer_debug_report_destroy_device(device);
2009
2010 dispatch_key key = get_dispatch_key(device);
2011#if DISPATCH_MAP_DEBUG
2012 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2013#endif
2014
Chia-I Wuf7458c52015-10-26 21:10:41 +08002015 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002016 pc_device_table_map.erase(key);
2017 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002018}
2019
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002020bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002021 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002022 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002023 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002024 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002025{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002026
2027
2028
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002030 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002031 }
2032
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002033 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002034}
2035
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002036VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002037 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002038 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002039 uint32_t queueIndex,
2040 VkQueue* pQueue)
2041{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002042 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002043
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002044 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002045}
2046
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002047bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002048 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002049 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002050{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002051 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2052 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002053 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002054 return false;
2055 }
2056
2057 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002058 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002059 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002060
2061 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002062}
2063
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002064bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002065 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002066 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002067 VkFence fence,
2068 VkResult result)
2069{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002070
2071
Jeremy Hayes99a96322015-06-26 12:48:09 -06002072
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002073 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002074 {
2075 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002076 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2077 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002078 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002079
2080 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081}
2082
2083VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2084 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002085 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002086 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002087 VkFence fence)
2088{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002089 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002090 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002091 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002092
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002093 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002094
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002095 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096
2097 return result;
2098}
2099
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002100bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 VkQueue queue,
2102 VkResult result)
2103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002105 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002106 {
2107 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002108 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002111
2112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002113}
2114
2115VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2116 VkQueue queue)
2117{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2119
2120 PostQueueWaitIdle(queue, result);
2121
2122 return result;
2123}
2124
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002125bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002126 VkDevice device,
2127 VkResult result)
2128{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002130 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002131 {
2132 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2134 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002135 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002136
2137 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002138}
2139
2140VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2141 VkDevice device)
2142{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002143 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2144
2145 PostDeviceWaitIdle(device, result);
2146
2147 return result;
2148}
2149
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002150bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002151 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002152 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002153{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002154 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002155 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002156 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002158 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002159 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002160 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002162 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002163
2164 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002165}
2166
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002167bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002168 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002169 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002170 VkResult result)
2171{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002172
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002173 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002174 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002175 }
2176
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002177 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002178 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002179 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002180 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2181 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002183
2184 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002185}
2186
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002187VK_LAYER_EXPORT VkResult VKAPI vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002189 const VkMemoryAllocateInfo* pAllocateInfo,
2190 const VkAllocationCallbacks* pAllocator,
2191 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002192{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002193 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002194
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002195 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002197 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002198
2199 return result;
2200}
2201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002202bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002203 VkDevice device,
2204 VkDeviceMemory mem,
2205 VkDeviceSize offset,
2206 VkDeviceSize size,
2207 VkMemoryMapFlags flags,
2208 void** ppData,
2209 VkResult result)
2210{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211
Jeremy Hayes99a96322015-06-26 12:48:09 -06002212
2213
2214
2215
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002216 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002217 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218 }
2219
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002220 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 {
2222 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002223 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2224 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002226
2227 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228}
2229
2230VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2231 VkDevice device,
2232 VkDeviceMemory mem,
2233 VkDeviceSize offset,
2234 VkDeviceSize size,
2235 VkMemoryMapFlags flags,
2236 void** ppData)
2237{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002238 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2239
2240 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2241
2242 return result;
2243}
2244
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002245bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002247 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002248{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002249 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002250 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002251 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002252 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002254 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002255 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002257 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002258
2259 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002260}
2261
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002262bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002263 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002264 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265 VkResult result)
2266{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002267
2268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002269 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270 {
2271 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002272 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2273 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002275
2276 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002277}
2278
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002279VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002280 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002281 uint32_t memoryRangeCount,
2282 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002283{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002284 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002285
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002286 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002287
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002288 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002289
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002290 return result;
2291}
2292
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002293bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002294 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002295 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002297 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002298 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002299 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002300 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002301 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002302 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002303 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002305 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002306
2307 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308}
2309
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002310bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002311 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002312 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313 VkResult result)
2314{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315
2316
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002317 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 {
2319 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002320 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2321 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002322 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002323
2324 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002325}
2326
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002327VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002329 uint32_t memoryRangeCount,
2330 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002331{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002332 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002333
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002334 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002335
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002336 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002337
Tony Barbourb1250542015-04-16 19:23:13 -06002338 return result;
2339}
2340
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002341bool PostGetDeviceMemoryCommitment(
2342 VkDevice device,
2343 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002344 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002345{
2346
2347
2348 if(pCommittedMemoryInBytes != nullptr)
2349 {
2350 }
2351
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002352 return true;
2353}
2354
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002355VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002356 VkDevice device,
2357 VkDeviceMemory memory,
2358 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002359{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002360 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002361
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002362 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002363}
2364
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002365bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002367 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002369 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002370 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002371{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002372
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002373
Jeremy Hayes99a96322015-06-26 12:48:09 -06002374
2375
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002376 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002377 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002378 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
2379 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2380 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002382
2383 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002384}
2385
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002387 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002388 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002389 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002390 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002391{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002392 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002393
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002394 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002396 return result;
2397}
2398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002399bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002400 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002401 VkImage image,
2402 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002403 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002404 VkResult result)
2405{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002406
2407
2408
2409
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002410 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002411 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002412 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
2413 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2414 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002415 }
2416
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002417 return true;
2418}
2419
2420VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2421 VkDevice device,
2422 VkImage image,
2423 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002424 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002425{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002426 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002427
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002428 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002429
2430 return result;
2431}
2432
2433bool PostGetBufferMemoryRequirements(
2434 VkDevice device,
2435 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002436 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002437{
2438
2439
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002440 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002441 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442 }
2443
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002444 return true;
2445}
2446
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002447VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002448 VkDevice device,
2449 VkBuffer buffer,
2450 VkMemoryRequirements* pMemoryRequirements)
2451{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002452 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002453
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002454 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002455}
2456
2457bool PostGetImageMemoryRequirements(
2458 VkDevice device,
2459 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002460 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002461{
2462
2463
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002464 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002466 }
2467
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002468 return true;
2469}
2470
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002471VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002472 VkDevice device,
2473 VkImage image,
2474 VkMemoryRequirements* pMemoryRequirements)
2475{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002476 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002477
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002478 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002479}
2480
2481bool PostGetImageSparseMemoryRequirements(
2482 VkDevice device,
2483 VkImage image,
2484 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002485 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002486{
2487
2488
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002489 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002490 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002491 }
2492
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002493 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002494 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002495 if ((pSparseMemoryRequirements->formatProperties.aspect &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002496 (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 -06002497 {
2498 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08002499 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002500 return false;
2501 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502 }
2503
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002504 return true;
2505}
2506
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002507VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508 VkDevice device,
2509 VkImage image,
2510 uint32_t* pNumRequirements,
2511 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2512{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002513 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002514
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002515 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516}
2517
2518bool PostGetPhysicalDeviceSparseImageFormatProperties(
2519 VkPhysicalDevice physicalDevice,
2520 VkFormat format,
2521 VkImageType type,
2522 uint32_t samples,
2523 VkImageUsageFlags usage,
2524 VkImageTiling tiling,
2525 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002526 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002527{
2528
2529 if(format < VK_FORMAT_BEGIN_RANGE ||
2530 format > VK_FORMAT_END_RANGE)
2531 {
2532 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002533 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002534 return false;
2535 }
2536
2537 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2538 type > VK_IMAGE_TYPE_END_RANGE)
2539 {
2540 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002541 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542 return false;
2543 }
2544
2545
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002546
2547 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2548 tiling > VK_IMAGE_TILING_END_RANGE)
2549 {
2550 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002551 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002552 return false;
2553 }
2554
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002555 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002556 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557 }
2558
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002559 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002561 if ((pProperties->aspect &
2562 (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 -06002563 {
2564 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002565 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002566 return false;
2567 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002568 }
2569
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002570 return true;
2571}
2572
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002573VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574 VkPhysicalDevice physicalDevice,
2575 VkFormat format,
2576 VkImageType type,
2577 uint32_t samples,
2578 VkImageUsageFlags usage,
2579 VkImageTiling tiling,
2580 uint32_t* pNumProperties,
2581 VkSparseImageFormatProperties* pProperties)
2582{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002583 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002584
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002585 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002586}
2587
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002588bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002589 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002590 uint32_t bindInfoCount,
2591 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002593 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002594 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595 }
2596
2597 return true;
2598}
2599
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002600bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002601 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002602 uint32_t bindInfoCount,
2603 const VkBindSparseInfo* pBindInfo,
2604 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 VkResult result)
2606{
2607
2608
2609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002610 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002611 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002612 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2614 return false;
2615 }
2616
2617 return true;
2618}
2619
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002620VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002622 uint32_t bindInfoCount,
2623 const VkBindSparseInfo* pBindInfo,
2624 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002625{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002626 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002628 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002630 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002631
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002632 return result;
2633}
2634
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002636 VkDevice device,
2637 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002638{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002639 if(pCreateInfo != nullptr)
2640 {
2641 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002642 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002644 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002646 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002647 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648
2649 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002650}
2651
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002653 VkDevice device,
2654 VkFence* pFence,
2655 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002656{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002657
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002658 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002659 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002660 }
2661
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002662 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002663 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002664 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2666 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002667 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002668
2669 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002670}
2671
2672VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2673 VkDevice device,
2674 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002675 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002676 VkFence* pFence)
2677{
2678 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002679
Chia-I Wuf7458c52015-10-26 21:10:41 +08002680 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002681
2682 PostCreateFence(device, pFence, result);
2683
2684 return result;
2685}
2686
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002688 VkDevice device,
2689 const VkFence* pFences)
2690{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002691 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002692 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002693 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002694
2695 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002696}
2697
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002698bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002699 VkDevice device,
2700 uint32_t fenceCount,
2701 VkResult result)
2702{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002703
2704
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002705 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002706 {
2707 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002708 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2709 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002710 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002711
2712 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002713}
2714
2715VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2716 VkDevice device,
2717 uint32_t fenceCount,
2718 const VkFence* pFences)
2719{
2720 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002721
Jeremy Hayes99a96322015-06-26 12:48:09 -06002722 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2723
2724 PostResetFences(device, fenceCount, result);
2725
2726 return result;
2727}
2728
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002729bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002730 VkDevice device,
2731 VkFence fence,
2732 VkResult result)
2733{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002734
Jeremy Hayes99a96322015-06-26 12:48:09 -06002735
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002736 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002737 {
2738 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002739 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2740 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002741 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002742
2743 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002744}
2745
2746VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2747 VkDevice device,
2748 VkFence fence)
2749{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002750 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2751
2752 PostGetFenceStatus(device, fence, result);
2753
2754 return result;
2755}
2756
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002757bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002758 VkDevice device,
2759 const VkFence* pFences)
2760{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002761 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002762 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002763 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002764
2765 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766}
2767
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002768bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002769 VkDevice device,
2770 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002771 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002772 uint64_t timeout,
2773 VkResult result)
2774{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002775
2776
2777
2778
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002779 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002780 {
2781 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002782 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2783 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002784 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002785
2786 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002787}
2788
2789VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2790 VkDevice device,
2791 uint32_t fenceCount,
2792 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002793 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002794 uint64_t timeout)
2795{
2796 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002797
Jeremy Hayes99a96322015-06-26 12:48:09 -06002798 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2799
2800 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2801
2802 return result;
2803}
2804
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002805bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002806 VkDevice device,
2807 const VkSemaphoreCreateInfo* pCreateInfo)
2808{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002809 if(pCreateInfo != nullptr)
2810 {
2811 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002812 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002815 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002816 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002817 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002818
2819 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820}
2821
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002822bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002823 VkDevice device,
2824 VkSemaphore* pSemaphore,
2825 VkResult result)
2826{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002827
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002828 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002829 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002830 }
2831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002832 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833 {
2834 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2836 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838
2839 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840}
2841
2842VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2843 VkDevice device,
2844 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002845 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002846 VkSemaphore* pSemaphore)
2847{
2848 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002849
Chia-I Wuf7458c52015-10-26 21:10:41 +08002850 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002851
2852 PostCreateSemaphore(device, pSemaphore, result);
2853
2854 return result;
2855}
2856
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002857bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002858 VkDevice device,
2859 const VkEventCreateInfo* pCreateInfo)
2860{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002861 if(pCreateInfo != nullptr)
2862 {
2863 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002866 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002867 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002868 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002870
2871 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002872}
2873
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002874bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002875 VkDevice device,
2876 VkEvent* pEvent,
2877 VkResult result)
2878{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002879
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002880 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002882 }
2883
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002884 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002885 {
2886 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002887 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2888 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002889 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002890
2891 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002892}
2893
2894VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2895 VkDevice device,
2896 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002897 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898 VkEvent* pEvent)
2899{
2900 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002901
Chia-I Wuf7458c52015-10-26 21:10:41 +08002902 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002903
2904 PostCreateEvent(device, pEvent, result);
2905
2906 return result;
2907}
2908
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002909bool PostGetEventStatus(
2910 VkDevice device,
2911 VkEvent event,
2912 VkResult result)
2913{
2914
Jeremy Hayes99a96322015-06-26 12:48:09 -06002915
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002916 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002917 {
2918 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002919 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2920 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002922
2923 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002924}
2925
2926VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2927 VkDevice device,
2928 VkEvent event)
2929{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002930 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2931
2932 PostGetEventStatus(device, event, result);
2933
2934 return result;
2935}
2936
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002937bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 VkDevice device,
2939 VkEvent event,
2940 VkResult result)
2941{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002942
Jeremy Hayes99a96322015-06-26 12:48:09 -06002943
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002944 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945 {
2946 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002947 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2948 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002949 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002950
2951 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002952}
2953
2954VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
2955 VkDevice device,
2956 VkEvent event)
2957{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002958 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2959
2960 PostSetEvent(device, event, result);
2961
2962 return result;
2963}
2964
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002965bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966 VkDevice device,
2967 VkEvent event,
2968 VkResult result)
2969{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970
Jeremy Hayes99a96322015-06-26 12:48:09 -06002971
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002972 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973 {
2974 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002975 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
2976 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002977 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002978
2979 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002980}
2981
2982VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
2983 VkDevice device,
2984 VkEvent event)
2985{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002986 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
2987
2988 PostResetEvent(device, event, result);
2989
2990 return result;
2991}
2992
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002993bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994 VkDevice device,
2995 const VkQueryPoolCreateInfo* pCreateInfo)
2996{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002997 if(pCreateInfo != nullptr)
2998 {
2999 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003001 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003002 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003003 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003004 }
3005 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3006 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3007 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003008 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003009 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003010 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003011 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003012 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003013
3014 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003015}
3016
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003017bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003018 VkDevice device,
3019 VkQueryPool* pQueryPool,
3020 VkResult result)
3021{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003023 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003025 }
3026
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003027 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 {
3029 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003030 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3031 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003032 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003033
3034 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035}
3036
3037VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3038 VkDevice device,
3039 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003040 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041 VkQueryPool* pQueryPool)
3042{
3043 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003044
Chia-I Wuf7458c52015-10-26 21:10:41 +08003045 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003046
3047 PostCreateQueryPool(device, pQueryPool, result);
3048
3049 return result;
3050}
3051
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003052bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053 VkDevice device,
3054 VkQueryPool queryPool,
3055 uint32_t startQuery,
3056 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003057 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003059 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003060 VkQueryResultFlags flags,
3061 VkResult result)
3062{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003063
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064
3065
3066
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003067 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069 }
3070
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003072 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073 {
3074 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003075 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3076 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003078
3079 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003080}
3081
3082VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3083 VkDevice device,
3084 VkQueryPool queryPool,
3085 uint32_t startQuery,
3086 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003087 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003089 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003090 VkQueryResultFlags flags)
3091{
Chia-I Wuccc93a72015-10-26 18:36:20 +08003092 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 -06003093
Chia-I Wuccc93a72015-10-26 18:36:20 +08003094 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003095
3096 return result;
3097}
3098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003099bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003100 VkDevice device,
3101 const VkBufferCreateInfo* pCreateInfo)
3102{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003103 if(pCreateInfo != nullptr)
3104 {
3105 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003107 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003108 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003110 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003111 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3112 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003114 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003115 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003116 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003117 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003118 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003119 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003120 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003122
3123 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124}
3125
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003126bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127 VkDevice device,
3128 VkBuffer* pBuffer,
3129 VkResult result)
3130{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003132 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 }
3135
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003136 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003137 {
3138 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003139 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3140 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003142
3143 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144}
3145
3146VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3147 VkDevice device,
3148 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003149 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003150 VkBuffer* pBuffer)
3151{
3152 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003153
Chia-I Wuf7458c52015-10-26 21:10:41 +08003154 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003155
3156 PostCreateBuffer(device, pBuffer, result);
3157
3158 return result;
3159}
3160
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003161bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003162 VkDevice device,
3163 const VkBufferViewCreateInfo* pCreateInfo)
3164{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003165 if(pCreateInfo != nullptr)
3166 {
3167 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003170 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003171 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003172 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3174 pCreateInfo->format > VK_FORMAT_END_RANGE)
3175 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003176 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003177 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003178 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003180 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003181
3182 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003183}
3184
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003185bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 VkDevice device,
3187 VkBufferView* pView,
3188 VkResult result)
3189{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003190
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003191 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003193 }
3194
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003195 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003196 {
3197 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003198 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3199 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003201
3202 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003203}
3204
3205VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3206 VkDevice device,
3207 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003208 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003209 VkBufferView* pView)
3210{
3211 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003212
Chia-I Wuf7458c52015-10-26 21:10:41 +08003213 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003214
3215 PostCreateBufferView(device, pView, result);
3216
3217 return result;
3218}
3219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003220bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 VkDevice device,
3222 const VkImageCreateInfo* pCreateInfo)
3223{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003224 if(pCreateInfo != nullptr)
3225 {
3226 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003227 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003228 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003229 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003230 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003231 }
3232 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3233 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3234 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003235 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003236 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003237 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003238 }
3239 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3240 pCreateInfo->format > VK_FORMAT_END_RANGE)
3241 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003242 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003243 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003244 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 }
3246 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3247 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3248 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003250 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003251 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003252 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003253 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3254 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003255 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3257 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003258 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003259 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003260 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003262 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003263 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003264
3265 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003266}
3267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003268bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003269 VkDevice device,
3270 VkImage* pImage,
3271 VkResult result)
3272{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003273
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003274 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003275 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003276 }
3277
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003278 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003279 {
3280 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003281 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3282 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003283 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003284
3285 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003286}
3287
Jeremy Hayes99a96322015-06-26 12:48:09 -06003288VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3289 VkDevice device,
3290 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003291 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003292 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003293{
3294 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003295
Chia-I Wuf7458c52015-10-26 21:10:41 +08003296 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003297
3298 PostCreateImage(device, pImage, result);
3299
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003300 return result;
3301}
3302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003303bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003304 VkDevice device,
3305 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003306{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003307 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 {
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003309 if ((pSubresource->aspect &
3310 (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 -06003311 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003312 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003313 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspect, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003314 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003315 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003316 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003317
3318 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319}
3320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003321bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003322 VkDevice device,
3323 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003324 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003325{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003326
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003328 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 }
3331
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003333}
3334
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003335VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003336 VkDevice device,
3337 VkImage image,
3338 const VkImageSubresource* pSubresource,
3339 VkSubresourceLayout* pLayout)
3340{
3341 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003343 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003344
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003345 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003346}
3347
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003348bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003349 VkDevice device,
3350 const VkImageViewCreateInfo* pCreateInfo)
3351{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003352 if(pCreateInfo != nullptr)
3353 {
3354 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003355 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003357 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003358 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 }
3360 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3361 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3362 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003363 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003364 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003365 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003366 }
3367 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3368 pCreateInfo->format > VK_FORMAT_END_RANGE)
3369 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003370 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003371 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003372 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003373 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003374 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3375 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003376 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003377 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003378 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003379 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003381 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3382 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003384 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003385 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003386 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003388 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3389 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003390 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003391 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003392 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003394 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003395 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3396 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003398 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003399 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003401 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003402 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003403
3404 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003405}
3406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003407bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003408 VkDevice device,
3409 VkImageView* pView,
3410 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003411{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003412
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003413 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003414 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003415 }
3416
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003417 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003418 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003420 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3421 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003422 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423
3424 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003425}
3426
3427VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3428 VkDevice device,
3429 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003430 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431 VkImageView* pView)
3432{
3433 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003434
Chia-I Wuf7458c52015-10-26 21:10:41 +08003435 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003436
3437 PostCreateImageView(device, pView, result);
3438
3439 return result;
3440}
3441
Michael Lentine03d8e572015-09-15 14:59:14 -05003442bool PreCreateShaderModule(
3443 VkDevice device,
3444 const VkShaderModuleCreateInfo* pCreateInfo)
3445{
3446 if(pCreateInfo) {
3447 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3448 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3449 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3450 return false;
3451 }
3452 if(!pCreateInfo->pCode) {
3453 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3454 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3455 return false;
3456 }
3457 } else {
3458 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3459 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3460 return false;
3461 }
3462
3463 return true;
3464}
3465
3466bool PostCreateShaderModule(
3467 VkDevice device,
3468 VkShaderModule* pShaderModule,
3469 VkResult result)
3470{
3471 if(result < VK_SUCCESS) {
3472 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
3473 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3474 return false;
3475 }
3476
3477 return true;
3478}
3479
3480VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3481 VkDevice device,
3482 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003483 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003484 VkShaderModule* pShaderModule)
3485{
3486 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003487 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003488 PostCreateShaderModule(device, pShaderModule, result);
3489 return result;
3490}
3491
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003492bool PreCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003493 VkDevice device,
3494 const VkShaderCreateInfo* pCreateInfo)
3495{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003496 if(pCreateInfo != nullptr)
3497 {
3498 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003499 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003500 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003501 "vkCreateShader parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003502 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003503 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003504 if(pCreateInfo->pName != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003505 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003506 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003507 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003508
3509 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003510}
3511
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003512bool PostCreateShader(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003513 VkDevice device,
3514 VkShader* pShader,
3515 VkResult result)
3516{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003517
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003518 if(pShader != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003519 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003520 }
3521
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003522 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003523 {
3524 std::string reason = "vkCreateShader parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003525 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3526 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003527 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003528
3529 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003530}
3531
3532VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(
3533 VkDevice device,
3534 const VkShaderCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003535 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003536 VkShader* pShader)
3537{
3538 PreCreateShader(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003539
Chia-I Wuf7458c52015-10-26 21:10:41 +08003540 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShader(device, pCreateInfo, pAllocator, pShader);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003541
3542 PostCreateShader(device, pShader, result);
3543
3544 return result;
3545}
3546
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003547bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003550{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003551 if(pCreateInfo != nullptr)
3552 {
3553 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003554 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003555 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003556 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003557 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003559 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003560 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003561 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003562 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003563
3564 return true;
3565}
3566
3567bool PostCreatePipelineCache(
3568 VkDevice device,
3569 VkPipelineCache* pPipelineCache,
3570 VkResult result)
3571{
3572
3573 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003574 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003575 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003576
3577 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003579 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003580 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3581 return false;
3582 }
3583
3584 return true;
3585}
3586
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003587VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003588 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003589 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003590 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003591 VkPipelineCache* pPipelineCache)
3592{
3593 PreCreatePipelineCache(device, pCreateInfo);
3594
Chia-I Wuf7458c52015-10-26 21:10:41 +08003595 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003596
3597 PostCreatePipelineCache(device, pPipelineCache, result);
3598
3599 return result;
3600}
3601
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602bool PostGetPipelineCacheData(
3603 VkDevice device,
3604 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003605 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003606 void* pData,
3607 VkResult result)
3608{
3609
3610
Chia-I Wub16facd2015-10-26 19:17:06 +08003611 if(pDataSize != nullptr)
3612 {
3613 }
3614
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003615 if(pData != nullptr)
3616 {
3617 }
3618
3619 if(result < VK_SUCCESS)
3620 {
3621 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
3622 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3623 return false;
3624 }
3625
3626 return true;
3627}
3628
3629VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3630 VkDevice device,
3631 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003632 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003633 void* pData)
3634{
Chia-I Wub16facd2015-10-26 19:17:06 +08003635 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003636
Chia-I Wub16facd2015-10-26 19:17:06 +08003637 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003638
3639 return result;
3640}
3641
3642bool PreMergePipelineCaches(
3643 VkDevice device,
3644 const VkPipelineCache* pSrcCaches)
3645{
3646 if(pSrcCaches != nullptr)
3647 {
3648 }
3649
3650 return true;
3651}
3652
3653bool PostMergePipelineCaches(
3654 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003655 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003656 uint32_t srcCacheCount,
3657 VkResult result)
3658{
3659
3660
3661
3662 if(result < VK_SUCCESS)
3663 {
3664 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
3665 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3666 return false;
3667 }
3668
3669 return true;
3670}
3671
3672VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3673 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003674 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003675 uint32_t srcCacheCount,
3676 const VkPipelineCache* pSrcCaches)
3677{
3678 PreMergePipelineCaches(device, pSrcCaches);
3679
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003680 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003681
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003682 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003683
3684 return result;
3685}
3686
3687bool PreCreateGraphicsPipelines(
3688 VkDevice device,
3689 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3690{
3691 if(pCreateInfos != nullptr)
3692 {
3693 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3694 {
3695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3696 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3697 return false;
3698 }
3699 if(pCreateInfos->pStages != nullptr)
3700 {
3701 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3702 {
3703 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3704 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3705 return false;
3706 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003707 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3708 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003709 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003710 {
3711 }
3712 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3713 {
3714 }
3715 }
3716 }
3717 if(pCreateInfos->pVertexInputState != nullptr)
3718 {
3719 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3720 {
3721 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3722 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3723 return false;
3724 }
3725 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3726 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003727 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3728 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003729 {
3730 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003731 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003732 return false;
3733 }
3734 }
3735 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3736 {
3737 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3738 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3739 {
3740 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3741 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3742 return false;
3743 }
3744 }
3745 }
3746 if(pCreateInfos->pInputAssemblyState != nullptr)
3747 {
3748 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3749 {
3750 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3751 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3752 return false;
3753 }
3754 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3755 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3756 {
3757 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3758 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3759 return false;
3760 }
3761 }
3762 if(pCreateInfos->pTessellationState != nullptr)
3763 {
3764 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3765 {
3766 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3767 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3768 return false;
3769 }
3770 }
3771 if(pCreateInfos->pViewportState != nullptr)
3772 {
3773 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3774 {
3775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3776 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3777 return false;
3778 }
3779 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003780 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003782 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003783 {
3784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003785 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003786 return false;
3787 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003788 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3789 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003790 {
3791 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003792 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003793 return false;
3794 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003795 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003796 {
3797 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003798 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003799 return false;
3800 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003801 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3802 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003803 {
3804 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003805 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003806 return false;
3807 }
3808 }
3809 if(pCreateInfos->pMultisampleState != nullptr)
3810 {
3811 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3812 {
3813 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3814 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3815 return false;
3816 }
3817 }
3818 if(pCreateInfos->pDepthStencilState != nullptr)
3819 {
3820 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3821 {
3822 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3823 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3824 return false;
3825 }
3826 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3827 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3828 {
3829 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3830 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3831 return false;
3832 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003833 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3834 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003835 {
3836 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003837 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 return false;
3839 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003840 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3841 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003842 {
3843 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003844 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003845 return false;
3846 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003847 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3848 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003849 {
3850 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003851 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003852 return false;
3853 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003854 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3855 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003856 {
3857 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003858 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 return false;
3860 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003861 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3862 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003863 {
3864 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003865 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 return false;
3867 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003868 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3869 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003870 {
3871 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003872 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 return false;
3874 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003875 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3876 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003877 {
3878 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003879 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003880 return false;
3881 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003882 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3883 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003884 {
3885 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003886 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 return false;
3888 }
3889 }
3890 if(pCreateInfos->pColorBlendState != nullptr)
3891 {
3892 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3893 {
3894 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3895 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3896 return false;
3897 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003898 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3899 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003900 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3901 {
3902 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3903 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3904 return false;
3905 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003906 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003907 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003908 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3909 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910 {
3911 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003912 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003913 return false;
3914 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003915 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3916 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003917 {
3918 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003919 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003920 return false;
3921 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003922 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3923 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003924 {
3925 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003926 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003927 return false;
3928 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003929 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3930 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003931 {
3932 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003933 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003934 return false;
3935 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003936 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3937 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003938 {
3939 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003940 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003941 return false;
3942 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003943 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3944 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003945 {
3946 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003947 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003948 return false;
3949 }
3950 }
3951 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003952 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3953 {
3954 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3955 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3956 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003957 }
3958
3959 return true;
3960}
3961
3962bool PostCreateGraphicsPipelines(
3963 VkDevice device,
3964 VkPipelineCache pipelineCache,
3965 uint32_t count,
3966 VkPipeline* pPipelines,
3967 VkResult result)
3968{
3969
3970
3971
3972 if(pPipelines != nullptr)
3973 {
3974 }
3975
3976 if(result < VK_SUCCESS)
3977 {
3978 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
3979 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
3980 return false;
3981 }
3982
3983 return true;
3984}
3985
3986VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
3987 VkDevice device,
3988 VkPipelineCache pipelineCache,
3989 uint32_t count,
3990 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003991 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003992 VkPipeline* pPipelines)
3993{
3994 PreCreateGraphicsPipelines(device, pCreateInfos);
3995
Chia-I Wuf7458c52015-10-26 21:10:41 +08003996 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003997
3998 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3999
4000 return result;
4001}
4002
4003bool PreCreateComputePipelines(
4004 VkDevice device,
4005 const VkComputePipelineCreateInfo* pCreateInfos)
4006{
4007 if(pCreateInfos != nullptr)
4008 {
4009 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4010 {
4011 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4012 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4013 return false;
4014 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004015 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004016 {
4017 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4018 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4019 return false;
4020 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004021 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004022 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004023 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004024 {
4025 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004026 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004027 {
4028 }
4029 }
4030 }
4031
4032 return true;
4033}
4034
4035bool PostCreateComputePipelines(
4036 VkDevice device,
4037 VkPipelineCache pipelineCache,
4038 uint32_t count,
4039 VkPipeline* pPipelines,
4040 VkResult result)
4041{
4042
4043
4044
4045 if(pPipelines != nullptr)
4046 {
4047 }
4048
4049 if(result < VK_SUCCESS)
4050 {
4051 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
4052 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4053 return false;
4054 }
4055
4056 return true;
4057}
4058
4059VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4060 VkDevice device,
4061 VkPipelineCache pipelineCache,
4062 uint32_t count,
4063 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004064 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004065 VkPipeline* pPipelines)
4066{
4067 PreCreateComputePipelines(device, pCreateInfos);
4068
Chia-I Wuf7458c52015-10-26 21:10:41 +08004069 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004070
4071 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4072
4073 return result;
4074}
4075
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004076bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004077 VkDevice device,
4078 const VkPipelineLayoutCreateInfo* pCreateInfo)
4079{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004080 if(pCreateInfo != nullptr)
4081 {
4082 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004083 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004084 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004085 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4086 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004087 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004089 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004090 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004091 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004092 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004093 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004094 }
4095
4096 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004097}
4098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004099bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100 VkDevice device,
4101 VkPipelineLayout* pPipelineLayout,
4102 VkResult result)
4103{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004105 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004106 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004107 }
4108
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004109 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004110 {
4111 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004112 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4113 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004114 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004115
4116 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004117}
4118
4119VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4120 VkDevice device,
4121 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004122 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004123 VkPipelineLayout* pPipelineLayout)
4124{
4125 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004126
Chia-I Wuf7458c52015-10-26 21:10:41 +08004127 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004128
4129 PostCreatePipelineLayout(device, pPipelineLayout, result);
4130
4131 return result;
4132}
4133
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004134bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004135 VkDevice device,
4136 const VkSamplerCreateInfo* pCreateInfo)
4137{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004138 if(pCreateInfo != nullptr)
4139 {
4140 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004141 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004142 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004143 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004144 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004145 }
Chia-I Wub99df442015-10-26 16:49:32 +08004146 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4147 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004148 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004149 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004150 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004151 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004152 }
Chia-I Wub99df442015-10-26 16:49:32 +08004153 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4154 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004155 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004156 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004157 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004158 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004159 }
Chia-I Wub99df442015-10-26 16:49:32 +08004160 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4161 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004162 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004163 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004164 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004165 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004166 }
Chia-I Wub99df442015-10-26 16:49:32 +08004167 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4168 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004169 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004170 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004171 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004172 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004173 }
Chia-I Wub99df442015-10-26 16:49:32 +08004174 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4175 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004176 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004177 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004178 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004179 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004180 }
Chia-I Wub99df442015-10-26 16:49:32 +08004181 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4182 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004183 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004185 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004187 }
4188 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4189 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4190 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004192 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004193 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004194 }
4195 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4196 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4197 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004198 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004199 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004200 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004201 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004202 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004203
4204 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004205}
4206
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004207bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004208 VkDevice device,
4209 VkSampler* pSampler,
4210 VkResult result)
4211{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004212
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004213 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004214 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 }
4216
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004217 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004218 {
4219 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004220 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4221 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004222 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004223
4224 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004225}
4226
4227VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4228 VkDevice device,
4229 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004230 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004231 VkSampler* pSampler)
4232{
4233 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004234
Chia-I Wuf7458c52015-10-26 21:10:41 +08004235 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004236
4237 PostCreateSampler(device, pSampler, result);
4238
4239 return result;
4240}
4241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004242bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004243 VkDevice device,
4244 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4245{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004246 if(pCreateInfo != nullptr)
4247 {
4248 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004250 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004251 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004253 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004254 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004255 {
Chia-I Wud50a7d72015-10-26 20:48:51 +08004256 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4257 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004258 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004259 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004260 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004261 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004262 }
Chia-I Wud50a7d72015-10-26 20:48:51 +08004263 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004264 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004265 }
4266 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004267 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004268
4269 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004270}
4271
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004272bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004273 VkDevice device,
4274 VkDescriptorSetLayout* pSetLayout,
4275 VkResult result)
4276{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004277
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004278 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280 }
4281
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004282 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004283 {
4284 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004285 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4286 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004287 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004288
4289 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004290}
4291
4292VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4293 VkDevice device,
4294 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004295 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004296 VkDescriptorSetLayout* pSetLayout)
4297{
4298 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004299
Chia-I Wuf7458c52015-10-26 21:10:41 +08004300 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004301
4302 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4303
4304 return result;
4305}
4306
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004307bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004308 VkDevice device,
4309 const VkDescriptorPoolCreateInfo* pCreateInfo)
4310{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004311 if(pCreateInfo != nullptr)
4312 {
4313 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004315 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004316 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004317 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004318 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004319 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004320 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004321 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4322 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004323 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004324 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004325 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004326 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004327 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004328 }
4329 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004330
4331 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004332}
4333
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004334bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336 uint32_t maxSets,
4337 VkDescriptorPool* pDescriptorPool,
4338 VkResult result)
4339{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004340
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004341 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004343 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004344 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345 }
4346
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004347 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004348 {
4349 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004350 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4351 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004352 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004353
4354 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004355}
4356
4357VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4358 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004360 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004361 VkDescriptorPool* pDescriptorPool)
4362{
4363 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004364
Chia-I Wuf7458c52015-10-26 21:10:41 +08004365 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004366
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004367 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004368
4369 return result;
4370}
4371
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004372bool PostResetDescriptorPool(
4373 VkDevice device,
4374 VkDescriptorPool descriptorPool,
4375 VkResult result)
4376{
4377
Jeremy Hayes99a96322015-06-26 12:48:09 -06004378
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004379 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004380 {
4381 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4383 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004385
4386 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004387}
4388
4389VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4390 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004391 VkDescriptorPool descriptorPool,
4392 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004393{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004394 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004395
4396 PostResetDescriptorPool(device, descriptorPool, result);
4397
4398 return result;
4399}
4400
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004401bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004402 VkDevice device,
4403 const VkDescriptorSetLayout* pSetLayouts)
4404{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004405 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004406 {
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
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004412bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004413 VkDevice device,
4414 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004415 uint32_t count,
4416 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004417 VkResult result)
4418{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004419
Jeremy Hayes99a96322015-06-26 12:48:09 -06004420
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004421 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004422 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 }
4424
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004425 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004427 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004428 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4429 return false;
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 +08004435VK_LAYER_EXPORT VkResult VKAPI vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004437 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004438 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004439{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004440 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004441
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004442 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004443
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004444 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004445
4446 return result;
4447}
4448
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004449bool PreFreeDescriptorSets(
4450 VkDevice device,
4451 const VkDescriptorSet* pDescriptorSets)
4452{
4453 if(pDescriptorSets != nullptr)
4454 {
4455 }
4456
4457 return true;
4458}
4459
4460bool PostFreeDescriptorSets(
4461 VkDevice device,
4462 VkDescriptorPool descriptorPool,
4463 uint32_t count,
4464 VkResult result)
4465{
4466
4467
4468
4469 if(result < VK_SUCCESS)
4470 {
4471 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
4472 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4473 return false;
4474 }
4475
4476 return true;
4477}
4478
4479VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4480 VkDevice device,
4481 VkDescriptorPool descriptorPool,
4482 uint32_t count,
4483 const VkDescriptorSet* pDescriptorSets)
4484{
4485 PreFreeDescriptorSets(device, pDescriptorSets);
4486
4487 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4488
4489 PostFreeDescriptorSets(device, descriptorPool, count, result);
4490
4491 return result;
4492}
4493
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004494bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004495 VkDevice device,
4496 const VkWriteDescriptorSet* pDescriptorWrites,
4497 const VkCopyDescriptorSet* pDescriptorCopies)
4498{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004499 if(pDescriptorWrites != nullptr)
4500 {
4501 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004502 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004503 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004504 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004505 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004506 }
4507 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4508 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4509 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004510 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004511 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004512 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004513 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004514 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4515 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4516 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004517 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004518 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4519 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004520 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004521 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004522 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004523 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004524 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004525 }
4526 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004527
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004528 if(pDescriptorCopies != nullptr)
4529 {
4530 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004531 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004532 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004533 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004534 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004535 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004537
4538 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539}
4540
Mark Lobodzinski2141f652015-09-07 13:59:43 -06004541VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004543 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004545 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004546 const VkCopyDescriptorSet* pDescriptorCopies)
4547{
4548 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004549
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004550 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004551}
4552
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004553bool PreCreateFramebuffer(
4554 VkDevice device,
4555 const VkFramebufferCreateInfo* pCreateInfo)
4556{
4557 if(pCreateInfo != nullptr)
4558 {
4559 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4560 {
4561 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4562 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4563 return false;
4564 }
4565 if(pCreateInfo->pAttachments != nullptr)
4566 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004567 }
4568 }
4569
4570 return true;
4571}
4572
4573bool PostCreateFramebuffer(
4574 VkDevice device,
4575 VkFramebuffer* pFramebuffer,
4576 VkResult result)
4577{
4578
4579 if(pFramebuffer != nullptr)
4580 {
4581 }
4582
4583 if(result < VK_SUCCESS)
4584 {
4585 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
4586 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4587 return false;
4588 }
4589
4590 return true;
4591}
4592
4593VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4594 VkDevice device,
4595 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004596 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004597 VkFramebuffer* pFramebuffer)
4598{
4599 PreCreateFramebuffer(device, pCreateInfo);
4600
Chia-I Wuf7458c52015-10-26 21:10:41 +08004601 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004602
4603 PostCreateFramebuffer(device, pFramebuffer, result);
4604
4605 return result;
4606}
4607
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004608bool PreCreateRenderPass(
4609 VkDevice device,
4610 const VkRenderPassCreateInfo* pCreateInfo)
4611{
4612 if(pCreateInfo != nullptr)
4613 {
4614 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4615 {
4616 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4617 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4618 return false;
4619 }
4620 if(pCreateInfo->pAttachments != nullptr)
4621 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004622 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4623 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4624 {
4625 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4626 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4627 return false;
4628 }
4629 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4630 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4631 {
4632 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4633 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4634 return false;
4635 }
4636 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4637 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4638 {
4639 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4640 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4641 return false;
4642 }
4643 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4644 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4645 {
4646 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4647 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4648 return false;
4649 }
4650 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4651 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4652 {
4653 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4654 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4655 return false;
4656 }
4657 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4658 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4659 {
4660 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4661 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4662 return false;
4663 }
4664 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4665 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4666 {
4667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4668 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4669 return false;
4670 }
4671 }
4672 if(pCreateInfo->pSubpasses != nullptr)
4673 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004674 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4675 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4676 {
4677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4678 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4679 return false;
4680 }
Cody Northropa505dda2015-08-04 11:16:41 -06004681 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004682 {
Cody Northropa505dda2015-08-04 11:16:41 -06004683 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4684 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004685 {
4686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004687 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004688 return false;
4689 }
4690 }
Cody Northropa505dda2015-08-04 11:16:41 -06004691 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004692 {
Cody Northropa505dda2015-08-04 11:16:41 -06004693 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4694 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004695 {
4696 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004697 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004698 return false;
4699 }
4700 }
Cody Northropa505dda2015-08-04 11:16:41 -06004701 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004702 {
Cody Northropa505dda2015-08-04 11:16:41 -06004703 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4704 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004705 {
4706 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004707 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 return false;
4709 }
4710 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004711 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4712 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4713 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004714 {
4715 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004716 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004717 return false;
4718 }
Cody Northropa505dda2015-08-04 11:16:41 -06004719 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004720 {
Cody Northropa505dda2015-08-04 11:16:41 -06004721 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4722 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004723 {
4724 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004725 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004726 return false;
4727 }
4728 }
4729 }
4730 if(pCreateInfo->pDependencies != nullptr)
4731 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004732 }
4733 }
4734
4735 return true;
4736}
4737
4738bool PostCreateRenderPass(
4739 VkDevice device,
4740 VkRenderPass* pRenderPass,
4741 VkResult result)
4742{
4743
4744 if(pRenderPass != nullptr)
4745 {
4746 }
4747
4748 if(result < VK_SUCCESS)
4749 {
4750 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
4751 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4752 return false;
4753 }
4754
4755 return true;
4756}
4757
4758VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4759 VkDevice device,
4760 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004761 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004762 VkRenderPass* pRenderPass)
4763{
4764 PreCreateRenderPass(device, pCreateInfo);
4765
Chia-I Wuf7458c52015-10-26 21:10:41 +08004766 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004767
4768 PostCreateRenderPass(device, pRenderPass, result);
4769
4770 return result;
4771}
4772
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004773bool PostGetRenderAreaGranularity(
4774 VkDevice device,
4775 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004776 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004777{
4778
4779
4780 if(pGranularity != nullptr)
4781 {
4782 }
4783
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004784 return true;
4785}
4786
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004787VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004788 VkDevice device,
4789 VkRenderPass renderPass,
4790 VkExtent2D* pGranularity)
4791{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004792 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004793
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004794 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004795}
4796
4797bool PreCreateCommandPool(
4798 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004799 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004800{
4801 if(pCreateInfo != nullptr)
4802 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004803 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004804 {
4805 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4806 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4807 return false;
4808 }
4809 }
4810
4811 return true;
4812}
4813
4814bool PostCreateCommandPool(
4815 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004816 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004817 VkResult result)
4818{
4819
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004820 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004821 {
4822 }
4823
4824 if(result < VK_SUCCESS)
4825 {
4826 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4827 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4828 return false;
4829 }
4830
4831 return true;
4832}
4833
4834VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4835 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004836 const VkCommandPoolCreateInfo* pCreateInfo,
4837 const VkAllocationCallbacks* pAllocator,
4838 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004839{
4840 PreCreateCommandPool(device, pCreateInfo);
4841
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004842 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004843
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004844 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004845
4846 return result;
4847}
4848
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849bool PostResetCommandPool(
4850 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004851 VkCommandPool commandPool,
4852 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004853 VkResult result)
4854{
4855
4856
4857
4858 if(result < VK_SUCCESS)
4859 {
4860 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
4861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4862 return false;
4863 }
4864
4865 return true;
4866}
4867
4868VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4869 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004870 VkCommandPool commandPool,
4871 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004872{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004873 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004874
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004875 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004876
4877 return result;
4878}
4879
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004880bool PreCreateCommandBuffer(
4881 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004882 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004883{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004884 if(pCreateInfo != nullptr)
4885 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004886 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004887 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004889 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004890 return false;
4891 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004892 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4893 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004894 {
4895 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004896 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004897 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004898 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004899 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004900
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004901 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004902}
4903
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004904bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004905 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004906 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004907 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004908{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004909
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004910 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004911 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004912 }
4913
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004914 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004915 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004916 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", reason.c_str());
4918 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004919 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004920
4921 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004922}
4923
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004924VK_LAYER_EXPORT VkResult VKAPI vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004925 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004926 const VkCommandBufferAllocateInfo* pCreateInfo,
4927 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004928{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004929 PreCreateCommandBuffer(device, pCreateInfo);
4930
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004931 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004932
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004933 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004934
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004935 return result;
4936}
4937
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004938bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 VkCommandBuffer commandBuffer,
4940 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004941{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004942 if(pBeginInfo != nullptr)
4943 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004944 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004945 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004946 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004947 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004948 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004949 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004950 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004951
4952 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953}
4954
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004955bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004956 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957 VkResult result)
4958{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004959
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004960 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004961 {
4962 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004963 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 -06004964 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004965 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004966
4967 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004968}
4969
4970VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004971 VkCommandBuffer commandBuffer,
4972 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004974 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004975
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004976 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004977
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004978 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004979
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004980 return result;
4981}
4982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004983bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004984 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985 VkResult result)
4986{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004987
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004988 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004989 {
4990 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004991 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 -06004992 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004994
4995 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996}
4997
4998VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005001 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005003 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005004
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005005 return result;
5006}
5007
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005008bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005009 VkCommandBuffer commandBuffer,
5010 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005011 VkResult result)
5012{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005013
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005014
5015 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 {
5017 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005018 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 -06005019 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005020 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005021
5022 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005023}
5024
5025VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005026 VkCommandBuffer commandBuffer,
5027 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005029 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005030
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005031 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005032
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005033 return result;
5034}
5035
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005036bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005038 VkPipelineBindPoint pipelineBindPoint,
5039 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005040{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005041
5042 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5043 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5044 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005045 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005046 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005047 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005048 }
5049
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005050
5051 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005052}
5053
Jeremy Hayes99a96322015-06-26 12:48:09 -06005054VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005055 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056 VkPipelineBindPoint pipelineBindPoint,
5057 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005058{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005059 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005060
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005061 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005062}
5063
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005064VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005065{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005066 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005067}
5068
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005069VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005070{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005071 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005072}
5073
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005074VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005075{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005076 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005077}
5078
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005079VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005080{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005081 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005082}
5083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005084VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005085{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005086 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005087}
5088
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005089VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005090{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005091 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005092}
5093
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005094VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005095{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005096 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005097}
5098
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005099VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005100{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005101 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005102}
5103
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005104VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005105{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005106 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005107}
5108
5109bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005110 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005111 const VkDescriptorSet* pDescriptorSets,
5112 const uint32_t* pDynamicOffsets)
5113{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005114 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005115 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005116 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005117
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005118 if(pDynamicOffsets != nullptr)
5119 {
5120 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005121
5122 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005123}
5124
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005125bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005126 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005127 VkPipelineBindPoint pipelineBindPoint,
5128 VkPipelineLayout layout,
5129 uint32_t firstSet,
5130 uint32_t setCount,
5131 uint32_t dynamicOffsetCount)
5132{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005133
5134 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5135 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5136 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005137 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005138 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005139 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005140 }
5141
5142
5143
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005144
5145
5146 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005147}
5148
5149VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005150 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005151 VkPipelineBindPoint pipelineBindPoint,
5152 VkPipelineLayout layout,
5153 uint32_t firstSet,
5154 uint32_t setCount,
5155 const VkDescriptorSet* pDescriptorSets,
5156 uint32_t dynamicOffsetCount,
5157 const uint32_t* pDynamicOffsets)
5158{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005159 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005160
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005161 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005162
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005163 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005164}
5165
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005166bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168 VkBuffer buffer,
5169 VkDeviceSize offset,
5170 VkIndexType indexType)
5171{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005172
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173
5174
5175 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5176 indexType > VK_INDEX_TYPE_END_RANGE)
5177 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005178 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005179 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005180 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005181 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005182
5183 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005184}
5185
5186VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005187 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005188 VkBuffer buffer,
5189 VkDeviceSize offset,
5190 VkIndexType indexType)
5191{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005192 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005193
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005194 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195}
5196
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005197bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005198 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005199 const VkBuffer* pBuffers,
5200 const VkDeviceSize* pOffsets)
5201{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005202 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005203 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005204 }
5205
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005206 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005209
5210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005211}
5212
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005213bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005214 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005215 uint32_t startBinding,
5216 uint32_t bindingCount)
5217{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005218
5219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005220
5221 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005222}
5223
Courtney Goeltzenleuchterf68ad722015-04-16 13:38:46 -06005224VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005225 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005226 uint32_t startBinding,
5227 uint32_t bindingCount,
5228 const VkBuffer* pBuffers,
5229 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005230{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005231 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005232
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005233 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005234
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005235 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005236}
5237
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005238bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005239 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005240 uint32_t firstVertex,
5241 uint32_t vertexCount,
5242 uint32_t firstInstance,
5243 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005244{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005245
5246
5247
5248
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005249
5250 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005251}
5252
Jeremy Hayes99a96322015-06-26 12:48:09 -06005253VK_LAYER_EXPORT void VKAPI vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005254 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005255 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005256 uint32_t instanceCount,
5257 uint32_t firstVertex,
5258 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005259{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005260 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005261
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005262 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005263}
5264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005265bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005266 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005267 uint32_t firstIndex,
5268 uint32_t indexCount,
5269 int32_t vertexOffset,
5270 uint32_t firstInstance,
5271 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005272{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005273
5274
5275
5276
5277
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005278
5279 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005280}
5281
Jeremy Hayes99a96322015-06-26 12:48:09 -06005282VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005283 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005284 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005285 uint32_t instanceCount,
5286 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005287 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005288 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005289{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005290 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005291
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005292 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005293}
5294
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005295bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005296 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005297 VkBuffer buffer,
5298 VkDeviceSize offset,
5299 uint32_t count,
5300 uint32_t stride)
5301{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005302
5303
5304
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005305
5306
5307 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308}
5309
5310VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005311 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005312 VkBuffer buffer,
5313 VkDeviceSize offset,
5314 uint32_t count,
5315 uint32_t stride)
5316{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005317 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005318
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005319 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005320}
5321
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005322bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005323 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005324 VkBuffer buffer,
5325 VkDeviceSize offset,
5326 uint32_t count,
5327 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005328{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005329
5330
5331
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005332
5333
5334 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005335}
5336
Jeremy Hayes99a96322015-06-26 12:48:09 -06005337VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005338 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005339 VkBuffer buffer,
5340 VkDeviceSize offset,
5341 uint32_t count,
5342 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005343{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005344 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005345
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005346 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347}
5348
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005349bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005350 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005351 uint32_t x,
5352 uint32_t y,
5353 uint32_t z)
5354{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005355
5356
5357
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005358
5359 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005360}
5361
5362VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005363 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005364 uint32_t x,
5365 uint32_t y,
5366 uint32_t z)
5367{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005368 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005369
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005370 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371}
5372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005373bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005374 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 VkBuffer buffer,
5376 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005377{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005378
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005380
5381 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005382}
5383
Jeremy Hayes99a96322015-06-26 12:48:09 -06005384VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005385 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005386 VkBuffer buffer,
5387 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005388{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005389 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005390
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005391 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005392}
5393
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005394bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005395 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005396 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005397{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005398 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005399 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005401
5402 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005403}
5404
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005405bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005406 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005407 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005408 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005409 uint32_t regionCount)
5410{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005411
Jeremy Hayes99a96322015-06-26 12:48:09 -06005412
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005414
5415 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005416}
5417
5418VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005421 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005422 uint32_t regionCount,
5423 const VkBufferCopy* pRegions)
5424{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005425 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005426
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005427 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005428
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005429 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430}
5431
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005432bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005433 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005434 const VkImageCopy* pRegions)
5435{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005436 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005438 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005439 (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 -06005440 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005441 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005442 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005443 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005444 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005445 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005446 (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 -06005447 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005448 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005449 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005450 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005451 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005452 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005453
5454 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005455}
5456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005457bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005458 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459 VkImage srcImage,
5460 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005461 VkImage dstImage,
5462 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 uint32_t regionCount)
5464{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005465
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466
5467 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5468 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5469 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005470 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005471 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005472 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473 }
5474
Jeremy Hayes99a96322015-06-26 12:48:09 -06005475
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005476 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5477 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005479 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5480 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005481 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005482 }
5483
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005484
5485 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005486}
5487
5488VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005489 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005490 VkImage srcImage,
5491 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005492 VkImage dstImage,
5493 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494 uint32_t regionCount,
5495 const VkImageCopy* pRegions)
5496{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005497 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005498
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005499 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005501 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502}
5503
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005504bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005505 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005506 const VkImageBlit* pRegions)
5507{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005508 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005509 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005510 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005511 (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 -06005512 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005513 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005514 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005515 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005516 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005517 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005518 (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 -06005519 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005520 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005521 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005522 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005524 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005525
5526 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005527}
5528
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005529bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005530 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531 VkImage srcImage,
5532 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005533 VkImage dstImage,
5534 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005535 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005536 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005537{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538
Jeremy Hayes99a96322015-06-26 12:48:09 -06005539
5540 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5541 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5542 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005543 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005544 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005545 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005546 }
5547
Jeremy Hayes99a96322015-06-26 12:48:09 -06005548
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005549 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5550 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005552 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5553 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005554 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005555 }
5556
5557
Chia-I Wub99df442015-10-26 16:49:32 +08005558 if(filter < VK_FILTER_BEGIN_RANGE ||
5559 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005560 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005561 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005562 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005563 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005565
5566 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005567}
5568
5569VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005570 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571 VkImage srcImage,
5572 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005573 VkImage dstImage,
5574 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005575 uint32_t regionCount,
5576 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005577 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005578{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005579 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005580
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005581 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005582
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005583 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005584}
5585
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005586bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005587 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005588 const VkBufferImageCopy* pRegions)
5589{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005590 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005591 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005592 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005593 (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 -06005594 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005595 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005596 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005597 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005599 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005600
5601 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005602}
5603
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005604bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005605 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005606 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005607 VkImage dstImage,
5608 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609 uint32_t regionCount)
5610{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612
Jeremy Hayes99a96322015-06-26 12:48:09 -06005613
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005614 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5615 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005617 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5618 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005619 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620 }
5621
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005622
5623 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624}
5625
5626VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005627 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005629 VkImage dstImage,
5630 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005631 uint32_t regionCount,
5632 const VkBufferImageCopy* pRegions)
5633{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005634 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005635
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005636 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005638 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639}
5640
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005641bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005642 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 const VkBufferImageCopy* pRegions)
5644{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005645 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005646 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005647 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005648 (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 -06005649 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005650 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005651 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005652 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005653 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005654 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005655
5656 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657}
5658
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005659bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005660 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005661 VkImage srcImage,
5662 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664 uint32_t regionCount)
5665{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666
Jeremy Hayes99a96322015-06-26 12:48:09 -06005667
5668 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5669 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5670 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005671 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005672 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005673 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005674 }
5675
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005677
5678 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005679}
5680
5681VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005682 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005683 VkImage srcImage,
5684 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005685 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005686 uint32_t regionCount,
5687 const VkBufferImageCopy* pRegions)
5688{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005689 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005690
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005691 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005692
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005693 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694}
5695
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005696bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005697 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698 const uint32_t* pData)
5699{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005700 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005701 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005703
5704 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705}
5706
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005707bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005708 VkCommandBuffer commandBuffer,
5709 VkBuffer dstBuffer,
5710 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711 VkDeviceSize dataSize)
5712{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713
5714
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005715
5716
5717 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005718}
5719
5720VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005721 VkCommandBuffer commandBuffer,
5722 VkBuffer dstBuffer,
5723 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005724 VkDeviceSize dataSize,
5725 const uint32_t* pData)
5726{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005727 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005728
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005729 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005730
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005731 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732}
5733
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005734bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005735 VkCommandBuffer commandBuffer,
5736 VkBuffer dstBuffer,
5737 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005738 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739 uint32_t data)
5740{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741
5742
5743
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005744
5745
5746 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747}
5748
5749VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005750 VkCommandBuffer commandBuffer,
5751 VkBuffer dstBuffer,
5752 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005753 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005754 uint32_t data)
5755{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005756 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005757
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005758 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005759}
5760
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005761bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005762 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005763 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764 const VkImageSubresourceRange* pRanges)
5765{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005766 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768 }
5769
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005770 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005771 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005772 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005773 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005774
5775 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776}
5777
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005778bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005779 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005780 VkImage image,
5781 VkImageLayout imageLayout,
5782 uint32_t rangeCount)
5783{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005784
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785
5786 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5787 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5788 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005789 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005790 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005791 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792 }
5793
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005794
5795 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796}
5797
5798VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005799 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005800 VkImage image,
5801 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005802 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005803 uint32_t rangeCount,
5804 const VkImageSubresourceRange* pRanges)
5805{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005806 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005807
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005808 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005809
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005810 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005811}
5812
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005813bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005814 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005815 const VkImageSubresourceRange* pRanges)
5816{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005817 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005818 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005819 /*
5820 * TODO: How do we validation pRanges->aspectMask?
5821 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5822 * VK_IMAGE_ASPECT_STENCIL_BIT.
5823 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005824 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005825
5826 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005827}
5828
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005829bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005830 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005831 VkImage image,
5832 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005833 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 uint32_t rangeCount)
5835{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005836
Jeremy Hayes99a96322015-06-26 12:48:09 -06005837
5838 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5839 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5840 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005841 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005842 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005843 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844 }
5845
5846
5847
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005848
5849 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005850}
5851
Chris Forbesd9be82b2015-06-22 17:21:59 +12005852VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
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 const VkImageSubresourceRange* pRanges)
5859{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005860 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005861
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005862 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005863
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005864 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865}
5866
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005867bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005868 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005869 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005870 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005871{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005872 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005873 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005874 }
5875
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005876 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005878 }
5879
5880 return true;
5881}
5882
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005883VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005884 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005885 uint32_t attachmentCount,
5886 const VkClearAttachment* pAttachments,
5887 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005888 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005889{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005890 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005891 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005892 }
5893
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005895}
5896
5897bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005898 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005899 const VkImageResolve* pRegions)
5900{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005901 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005902 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005903 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005904 (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 -06005905 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005906 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005907 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005908 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005909 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005910 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005911 (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 -06005912 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005913 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005914 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005915 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005916 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005917 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918
5919 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005920}
5921
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005922bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005923 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005924 VkImage srcImage,
5925 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005926 VkImage dstImage,
5927 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928 uint32_t regionCount)
5929{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005930
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931
5932 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5933 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5934 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005935 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005936 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005937 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005938 }
5939
Jeremy Hayes99a96322015-06-26 12:48:09 -06005940
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005941 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5942 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005943 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005944 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5945 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005946 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005947 }
5948
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005949
5950 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005951}
5952
5953VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005954 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005955 VkImage srcImage,
5956 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005957 VkImage dstImage,
5958 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959 uint32_t regionCount,
5960 const VkImageResolve* pRegions)
5961{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005962 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005963
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005964 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005966 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005967}
5968
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005969bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005970 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005972 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005973{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005974
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005976
5977 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005978}
5979
5980VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005981 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005982 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005983 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005985 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005986
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005987 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005988}
5989
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005990bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005991 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005992 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06005993 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005995
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005997
5998 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005999}
6000
6001VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006002 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006004 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006006 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006008 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009}
6010
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006011bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006012 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006013 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006014 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006016 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018 }
6019
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006020 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006021 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006023
6024 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006025}
6026
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006027bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006028 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006030 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006031 VkPipelineStageFlags dstStageMask,
6032 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006035
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036
6037
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006038
6039 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006040}
6041
6042VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006043 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044 uint32_t eventCount,
6045 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006046 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006047 VkPipelineStageFlags dstStageMask,
6048 uint32_t memoryBarrierCount,
6049 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006050{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006051 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006052
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006053 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006055 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056}
6057
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006058bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006059 VkCommandBuffer commandBuffer,
6060 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006061{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006062 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006064 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006065
6066 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067}
6068
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006069bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006070 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006071 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006072 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006073 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006074 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006075{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006076
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006077
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078
6079
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006080
6081 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006082}
6083
6084VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006085 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006086 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006087 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006088 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006089 uint32_t memoryBarrierCount,
6090 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006092 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006093
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006096 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097}
6098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006099bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006100 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101 VkQueryPool queryPool,
6102 uint32_t slot,
6103 VkQueryControlFlags flags)
6104{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105
Jeremy Hayes99a96322015-06-26 12:48:09 -06006106
6107
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006108
6109 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110}
6111
6112VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006113 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006114 VkQueryPool queryPool,
6115 uint32_t slot,
6116 VkQueryControlFlags flags)
6117{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006119
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006120 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006121}
6122
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006123bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006124 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125 VkQueryPool queryPool,
6126 uint32_t slot)
6127{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006130
6131 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006132}
6133
6134VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006135 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006136 VkQueryPool queryPool,
6137 uint32_t slot)
6138{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006139 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006141 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006142}
6143
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006144bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006145 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006146 VkQueryPool queryPool,
6147 uint32_t startQuery,
6148 uint32_t queryCount)
6149{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006151
6152
6153
6154 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155}
6156
6157VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006158 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006159 VkQueryPool queryPool,
6160 uint32_t startQuery,
6161 uint32_t queryCount)
6162{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006163 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006165 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006166}
6167
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006168bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006169 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006170 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006171 VkQueryPool queryPool,
6172 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006173{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006174
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006175 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006176
6177 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178}
6179
6180VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006181 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006182 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006183 VkQueryPool queryPool,
6184 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006185{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006186 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006187
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006188 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189}
6190
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006191bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006192 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193 VkQueryPool queryPool,
6194 uint32_t startQuery,
6195 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006196 VkBuffer dstBuffer,
6197 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006198 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006199 VkQueryResultFlags flags)
6200{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006201
6202
6203
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006204
Jeremy Hayes99a96322015-06-26 12:48:09 -06006205
6206
6207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006208
6209 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006210}
6211
Jeremy Hayesad367152015-04-17 10:36:53 -06006212VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006213 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006214 VkQueryPool queryPool,
6215 uint32_t startQuery,
6216 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006217 VkBuffer dstBuffer,
6218 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006219 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006220 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006221{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006222 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006224 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006225}
6226
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006227bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006228 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006229 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006231 if(values != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006232 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006234
6235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006236}
6237
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006238bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006239 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006240 VkPipelineLayout layout,
6241 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006242 uint32_t offset,
6243 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006244{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245
Jeremy Hayes99a96322015-06-26 12:48:09 -06006246
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006247
6248
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006249
6250 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251}
6252
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006253VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006254 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006255 VkPipelineLayout layout,
6256 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006257 uint32_t offset,
6258 uint32_t size,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006259 const void* values)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006260{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006261 PreCmdPushConstants(commandBuffer, values);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006262
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006263 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006265 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006266}
6267
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006268bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006269 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006270 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006271{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006272 if(pRenderPassBegin != nullptr)
6273 {
6274 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006276 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006277 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006278 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006279 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006280 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006281 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006282 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006283 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006284
6285 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006286}
6287
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006288bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006289 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006290 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006291{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006292
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006293 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6294 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006295 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006296 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006297 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006298 return false;
6299 }
6300
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006301 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006302}
6303
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006305 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006306 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006307 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006308{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006309 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006310
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006311 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006312
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006313 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006314}
6315
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006316bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006317 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006318 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006319{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006320
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006321 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6322 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006323 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006324 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006325 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006326 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006327 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006329 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006330}
6331
6332VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006333 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006334 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006335{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006336 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006337
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006338 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006339}
6340
6341bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006342 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006343{
6344
6345 return true;
6346}
6347
6348VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006349 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006350{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006351 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006352
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006353 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006354}
6355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006356bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006357 VkCommandBuffer commandBuffer,
6358 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006359{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006360 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006361 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006362 }
6363
6364 return true;
6365}
6366
6367bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006368 VkCommandBuffer commandBuffer,
6369 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370{
6371
6372
6373 return true;
6374}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006375
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006376VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006377 VkCommandBuffer commandBuffer,
6378 uint32_t commandBuffersCount,
6379 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006380{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006381 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006382
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006383 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006384
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006385 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006386}
6387
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006388VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006389{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006390 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006391 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006392 }
6393
Jon Ashburn8fd08252015-05-28 16:25:02 -06006394 /* loader uses this to force layer initialization; device object is wrapped */
6395 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006396 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006397 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006398 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006399
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006400 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006401 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006402 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006403 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006404 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006405 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006406 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006407 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006408 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006409 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006410 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006411 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006412 if (!strcmp(funcName, "vkAllocateMemory"))
6413 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006414 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006415 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006416 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006417 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006418 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006419 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006420 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006421 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006422 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006423 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006424 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006425 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006426 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006427 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006428 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006429 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006431 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006432 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006433 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006434 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006435 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006436 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006437 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006438 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006439 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006440 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006441 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006442 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006443 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006444 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006445 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006446 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006447 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006450 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006451 return (PFN_vkVoidFunction) vkCreateImageView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452 if (!strcmp(funcName, "vkCreateShader"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkCreateShader;
Michael Lentine03d8e572015-09-15 14:59:14 -05006454 if (!strcmp(funcName, "vkCreateShaderModule"))
6455 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006456 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006458 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006462 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006463 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006464 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006466 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006470 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6471 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006472 if (!strcmp(funcName, "vkCmdSetViewport"))
6473 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006474 if (!strcmp(funcName, "vkCmdSetScissor"))
6475 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006476 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6477 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6478 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6479 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6480 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6481 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6482 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6483 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6484 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6485 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6486 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6487 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6488 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6489 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006490 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6491 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006504 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006506 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006520 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006521 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006522 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006524 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006525 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006526 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006560 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006562
Jon Ashburneab34492015-06-01 09:37:38 -06006563 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006565 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006567 }
6568}
6569
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006571{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006572 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006573 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006574 }
6575
Jon Ashburn8fd08252015-05-28 16:25:02 -06006576 /* loader uses this to force layer initialization; instance object is wrapped */
6577 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006580 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006581
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006592 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006594 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6595 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6596 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6597 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6598 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6599 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6600 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6601 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006602
Jeremy Hayes99a96322015-06-26 12:48:09 -06006603 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006604 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006606 return fptr;
6607
Jeremy Hayes99a96322015-06-26 12:48:09 -06006608 {
6609 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6610 return NULL;
6611 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6612 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006613}