blob: 528a73d51e5073e8243069c5a7880ff08795bf25 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchter8a17da52015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine6715e522015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included
14 * in all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 * DEALINGS IN THE SOFTWARE.
Courtney Goeltzenleuchter96cd7952015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060026 */
27
28#include <stdio.h>
29#include <stdlib.h>
30#include <string.h>
31
32#include <iostream>
33#include <string>
34#include <sstream>
Mark Lobodzinski3723c512015-05-26 10:58:40 -050035#include <unordered_map>
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060036#include <vector>
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060037
Tobin Ehlis7a51d902015-07-03 10:34:49 -060038#include "vk_loader_platform.h"
Tobin Ehlis2d1d9702015-07-03 09:42:57 -060039#include "vk_layer.h"
Tobin Ehlis56d204a2015-07-03 10:15:26 -060040#include "vk_layer_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060041#include "vk_enum_validate_helper.h"
42#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060043
Tobin Ehlis56d204a2015-07-03 10:15:26 -060044#include "vk_layer_table.h"
45#include "vk_layer_data.h"
46#include "vk_layer_logging.h"
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -060047#include "vk_layer_extension_utils.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060048
Cody Northrop73bb6572015-09-28 15:09:32 -060049struct layer_data {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060050 debug_report_data *report_data;
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060051 std::vector<VkDbgMsgCallback> logging_callback;
Cody Northrop73bb6572015-09-28 15:09:32 -060052
53 layer_data() :
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060054 report_data(nullptr)
Cody Northrop73bb6572015-09-28 15:09:32 -060055 {};
56};
Mark Lobodzinski3723c512015-05-26 10:58:40 -050057
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060058static std::unordered_map<void*, layer_data*> layer_data_map;
59static device_table_map pc_device_table_map;
60static instance_table_map pc_instance_table_map;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060061
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060062// "my instance data"
63debug_report_data *mid(VkInstance object)
Tony Barbour426b9052015-06-24 16:06:58 -060064{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060065 dispatch_key key = get_dispatch_key(object);
Tobin Ehlis8354e022015-09-01 11:46:36 -060066 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060067#if DISPATCH_MAP_DEBUG
68 fprintf(stderr, "MID: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
69#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060070 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060071
72 return data->report_data;
73}
74
75// "my device data"
Jeremy Hayesc27938e2015-07-09 17:11:25 -060076debug_report_data *mdd(void* object)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060077{
78 dispatch_key key = get_dispatch_key(object);
79 layer_data *data = get_my_data_ptr(key, layer_data_map);
80#if DISPATCH_MAP_DEBUG
81 fprintf(stderr, "MDD: map: %p, object: %p, key: %p, data: %p\n", &layer_data_map, object, key, data);
82#endif
Courtney Goeltzenleuchtereb456c62015-07-17 10:20:11 -060083 assert(data != NULL);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060084 return data->report_data;
85}
86
87static void InitParamChecker(layer_data *data)
88{
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060089 VkDbgMsgCallback callback;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -060090 uint32_t report_flags = getLayerOptionFlags("ParamCheckerReportFlags", 0);
91
92 uint32_t debug_action = 0;
93 getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &debug_action);
94 if(debug_action & VK_DBG_LAYER_ACTION_LOG_MSG)
95 {
96 FILE *log_output = NULL;
97 const char* option_str = getLayerOption("ParamCheckerLogFilename");
Tobin Ehlisb4b6e7c2015-09-15 09:55:54 -060098 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -060099 layer_create_msg_callback(data->report_data, report_flags, log_callback, (void *) log_output, &callback);
100 data->logging_callback.push_back(callback);
101 }
102
103 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
104 layer_create_msg_callback(data->report_data, report_flags, win32_debug_output_msg, NULL, &callback);
105 data->logging_callback.push_back(callback);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600106 }
107}
108
109VK_LAYER_EXPORT VkResult VKAPI vkDbgCreateMsgCallback(
110 VkInstance instance,
111 VkFlags msgFlags,
112 const PFN_vkDbgMsgCallback pfnMsgCallback,
113 void* pUserData,
114 VkDbgMsgCallback* pMsgCallback)
115{
116 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
117 VkResult result = pTable->DbgCreateMsgCallback(instance, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
118
119 if (result == VK_SUCCESS)
120 {
121 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
122 result = layer_create_msg_callback(data->report_data, msgFlags, pfnMsgCallback, pUserData, pMsgCallback);
123 }
124
125 return result;
126}
127
128VK_LAYER_EXPORT VkResult VKAPI vkDbgDestroyMsgCallback(
129 VkInstance instance,
130 VkDbgMsgCallback msgCallback)
131{
132 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
133 VkResult result = pTable->DbgDestroyMsgCallback(instance, msgCallback);
134
135 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
136 layer_destroy_msg_callback(data->report_data, msgCallback);
137
138 return result;
139}
140
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600141static const VkLayerProperties pc_global_layers[] = {
142 {
143 "ParamChecker",
144 VK_API_VERSION,
145 VK_MAKE_VERSION(0, 1, 0),
146 "Validation layer: ParamChecker",
147 }
148};
Tony Barbour426b9052015-06-24 16:06:58 -0600149
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600150VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600151 const char *pLayerName,
152 uint32_t *pCount,
153 VkExtensionProperties* pProperties)
Jon Ashburneb2728b2015-04-10 14:33:07 -0600154{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600155 /* ParamChecker does not have any global extensions */
156 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
Jon Ashburneb2728b2015-04-10 14:33:07 -0600157}
158
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600159VK_LAYER_EXPORT VkResult VKAPI vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600160 uint32_t *pCount,
161 VkLayerProperties* pProperties)
Tony Barbour426b9052015-06-24 16:06:58 -0600162{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600163 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
164 pc_global_layers,
165 pCount, pProperties);
Tony Barbour426b9052015-06-24 16:06:58 -0600166}
167
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600168VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600169 VkPhysicalDevice physicalDevice,
170 const char* pLayerName,
171 uint32_t* pCount,
172 VkExtensionProperties* pProperties)
Jeremy Hayescf469132015-04-17 10:36:53 -0600173{
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600174 /* ParamChecker does not have any physical device extensions */
Jon Ashburnaff81ff2015-11-02 17:37:20 -0700175 if (pLayerName == NULL) {
176 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
177 physicalDevice,
178 NULL,
179 pCount,
180 pProperties);
181 } else {
182 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
183 }
Jeremy Hayescf469132015-04-17 10:36:53 -0600184}
185
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -0600186VK_LAYER_EXPORT VkResult VKAPI vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -0600187 VkPhysicalDevice physicalDevice,
188 uint32_t* pCount,
189 VkLayerProperties* pProperties)
190{
191 /* ParamChecker's physical device layers are the same as global */
192 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
193 pCount, pProperties);
194}
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600195
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600196// Version: 0.138.2
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600197
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600198static
199std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600200{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600201 switch(enumerator)
202 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600203 case VK_RESULT_MAX_ENUM:
204 {
205 return "VK_RESULT_MAX_ENUM";
206 break;
207 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600208 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600209 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600210 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600211 break;
212 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600213 case VK_ERROR_INCOMPATIBLE_DRIVER:
214 {
215 return "VK_ERROR_INCOMPATIBLE_DRIVER";
216 break;
217 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600218 case VK_ERROR_MEMORY_MAP_FAILED:
219 {
220 return "VK_ERROR_MEMORY_MAP_FAILED";
221 break;
222 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600223 case VK_INCOMPLETE:
224 {
225 return "VK_INCOMPLETE";
226 break;
227 }
228 case VK_ERROR_OUT_OF_HOST_MEMORY:
229 {
230 return "VK_ERROR_OUT_OF_HOST_MEMORY";
231 break;
232 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600233 case VK_ERROR_INITIALIZATION_FAILED:
234 {
235 return "VK_ERROR_INITIALIZATION_FAILED";
236 break;
237 }
238 case VK_NOT_READY:
239 {
240 return "VK_NOT_READY";
241 break;
242 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600243 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
244 {
245 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
246 break;
247 }
248 case VK_EVENT_SET:
249 {
250 return "VK_EVENT_SET";
251 break;
252 }
253 case VK_TIMEOUT:
254 {
255 return "VK_TIMEOUT";
256 break;
257 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600258 case VK_EVENT_RESET:
259 {
260 return "VK_EVENT_RESET";
261 break;
262 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600263 case VK_SUCCESS:
264 {
265 return "VK_SUCCESS";
266 break;
267 }
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600268 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600269 {
Courtney Goeltzenleuchterac544f32015-09-14 18:01:17 -0600270 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600271 break;
272 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600273 case VK_ERROR_DEVICE_LOST:
274 {
275 return "VK_ERROR_DEVICE_LOST";
276 break;
277 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600278 default:
279 {
280 return "unrecognized enumerator";
281 break;
282 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600283 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600284}
285
286static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600287bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
288{
Courtney Goeltzenleuchter75295792015-09-10 16:25:49 -0600289 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600290 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
291 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
292 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
293 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
294 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
295 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
296 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
297 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
298 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600299 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800300 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
301 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600302 if(enumerator & (~allFlags))
303 {
304 return false;
305 }
306
307 return true;
308}
309
310static
311std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
312{
313 if(!ValidateEnumerator(enumerator))
314 {
315 return "unrecognized enumerator";
316 }
317
318 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600319 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
320 {
321 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
322 }
323 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
324 {
325 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
326 }
327 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
328 {
329 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
330 }
331 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
332 {
333 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
334 }
335 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
336 {
337 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
338 }
339 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
340 {
341 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
342 }
343 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
344 {
345 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
346 }
347 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
348 {
349 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
350 }
351 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
352 {
353 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
354 }
355 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
356 {
357 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
358 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800359 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600360 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800361 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600362 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800363 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600364 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800365 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop9e8b03f2015-08-18 14:58:29 -0600366 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600367
368 std::string enumeratorString;
369 for(auto const& string : strings)
370 {
371 enumeratorString += string;
372
373 if(string != strings.back())
374 {
375 enumeratorString += '|';
376 }
377 }
378
379 return enumeratorString;
380}
381
382static
383bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
384{
385 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600386 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600387 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
388 VK_IMAGE_USAGE_STORAGE_BIT |
389 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800390 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600391 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800392 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600393 if(enumerator & (~allFlags))
394 {
395 return false;
396 }
397
398 return true;
399}
400
401static
402std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
403{
404 if(!ValidateEnumerator(enumerator))
405 {
406 return "unrecognized enumerator";
407 }
408
409 std::vector<std::string> strings;
410 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
411 {
412 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
413 }
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600414 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600415 {
Courtney Goeltzenleuchterc3b8eea2015-09-10 14:14:11 -0600416 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600417 }
418 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
419 {
420 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
421 }
422 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
423 {
424 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
425 }
426 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
427 {
428 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
429 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800430 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600431 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800432 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600433 }
434 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
435 {
436 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
437 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800438 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600439 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800440 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600441 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600442
443 std::string enumeratorString;
444 for(auto const& string : strings)
445 {
446 enumeratorString += string;
447
448 if(string != strings.back())
449 {
450 enumeratorString += '|';
451 }
452 }
453
454 return enumeratorString;
455}
456
457static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600458bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
459{
Chia-I Wub21a51a2015-10-26 20:33:12 +0800460 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wuc51b1212015-10-27 19:25:11 +0800461 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600462 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu7e470702015-10-26 17:24:52 +0800463 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600464 VK_QUEUE_GRAPHICS_BIT);
465 if(enumerator & (~allFlags))
466 {
467 return false;
468 }
469
470 return true;
471}
472
473static
474std::string EnumeratorString(VkQueueFlagBits const& enumerator)
475{
476 if(!ValidateEnumerator(enumerator))
477 {
478 return "unrecognized enumerator";
479 }
480
481 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +0800482 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600483 {
Chia-I Wuc51b1212015-10-27 19:25:11 +0800484 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600485 }
486 if(enumerator & VK_QUEUE_COMPUTE_BIT)
487 {
488 strings.push_back("VK_QUEUE_COMPUTE_BIT");
489 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800490 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600491 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800492 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600493 }
494 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
495 {
496 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
497 }
498
499 std::string enumeratorString;
500 for(auto const& string : strings)
501 {
502 enumeratorString += string;
503
504 if(string != strings.back())
505 {
506 enumeratorString += '|';
507 }
508 }
509
510 return enumeratorString;
511}
512
513static
514bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
515{
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600516 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800517 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600518 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800519 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
520 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600521 if(enumerator & (~allFlags))
522 {
523 return false;
524 }
525
526 return true;
527}
528
529static
530std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
531{
532 if(!ValidateEnumerator(enumerator))
533 {
534 return "unrecognized enumerator";
535 }
536
537 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600538 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
539 {
540 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
541 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800542 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600543 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800544 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600545 }
546 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
547 {
548 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
549 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800550 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600551 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800552 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600553 }
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800554 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600555 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800556 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600557 }
558
559 std::string enumeratorString;
560 for(auto const& string : strings)
561 {
562 enumeratorString += string;
563
564 if(string != strings.back())
565 {
566 enumeratorString += '|';
567 }
568 }
569
570 return enumeratorString;
571}
572
573static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600574bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600575{
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800576 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600577 if(enumerator & (~allFlags))
578 {
579 return false;
580 }
581
582 return true;
583}
584
585static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600586std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600587{
588 if(!ValidateEnumerator(enumerator))
589 {
590 return "unrecognized enumerator";
591 }
592
593 std::vector<std::string> strings;
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800594 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600595 {
Chia-I Wu27d8ed92015-10-27 18:53:22 +0800596 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600597 }
598
599 std::string enumeratorString;
600 for(auto const& string : strings)
601 {
602 enumeratorString += string;
603
604 if(string != strings.back())
605 {
606 enumeratorString += '|';
607 }
608 }
609
610 return enumeratorString;
611}
612
613static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600614bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
615{
Chia-I Wu7e470702015-10-26 17:24:52 +0800616 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
617 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
618 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600619 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600620 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600621 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600622 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600623
624 return true;
625}
626
627static
628std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
629{
630 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600631 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600632 return "unrecognized enumerator";
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600633 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600634
635 std::vector<std::string> strings;
Chia-I Wu7e470702015-10-26 17:24:52 +0800636 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600637 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800638 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600639 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800640 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600641 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800642 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600643 }
Chia-I Wu7e470702015-10-26 17:24:52 +0800644 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600645 {
Chia-I Wu7e470702015-10-26 17:24:52 +0800646 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600647 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600648
649 std::string enumeratorString;
650 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600651 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600652 enumeratorString += string;
653
654 if(string != strings.back())
655 {
656 enumeratorString += '|';
657 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600658 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600659
660 return enumeratorString;
661}
662
663static
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600664bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
665{
666 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
667 if(enumerator & (~allFlags))
668 {
669 return false;
670 }
671
672 return true;
673}
674
675static
676std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
677{
678 if(!ValidateEnumerator(enumerator))
679 {
680 return "unrecognized enumerator";
681 }
682
683 std::vector<std::string> strings;
684 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
685 {
686 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
687 }
688
689 std::string enumeratorString;
690 for(auto const& string : strings)
691 {
692 enumeratorString += string;
693
694 if(string != strings.back())
695 {
696 enumeratorString += '|';
697 }
698 }
699
700 return enumeratorString;
701}
702
703static
704bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
705{
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600706 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
707 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
708 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
709 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
710 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
711 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
712 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
713 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
714 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
715 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
716 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600717 if(enumerator & (~allFlags))
718 {
719 return false;
720 }
721
722 return true;
723}
724
725static
726std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
727{
728 if(!ValidateEnumerator(enumerator))
729 {
730 return "unrecognized enumerator";
731 }
732
733 std::vector<std::string> strings;
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600734 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600735 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600736 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600737 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600738 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600739 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600740 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600741 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600742 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600743 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600744 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600745 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600746 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600747 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600748 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600749 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600750 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600751 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600752 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600753 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600754 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600755 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600756 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600757 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600758 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600759 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600760 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600761 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600762 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600763 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600764 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600765 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600766 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600767 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600768 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600769 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600770 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600771 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600772 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600773 }
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600774 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600775 {
Courtney Goeltzenleuchterb93427c2015-10-15 16:57:32 -0600776 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -0600777 }
778
779 std::string enumeratorString;
780 for(auto const& string : strings)
781 {
782 enumeratorString += string;
783
784 if(string != strings.back())
785 {
786 enumeratorString += '|';
787 }
788 }
789
790 return enumeratorString;
791}
792
793static
794bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
795{
796 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
797 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
798 VK_QUERY_RESULT_WAIT_BIT |
799 VK_QUERY_RESULT_64_BIT |
800 VK_QUERY_RESULT_DEFAULT);
801 if(enumerator & (~allFlags))
802 {
803 return false;
804 }
805
806 return true;
807}
808
809static
810std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
811{
812 if(!ValidateEnumerator(enumerator))
813 {
814 return "unrecognized enumerator";
815 }
816
817 std::vector<std::string> strings;
818 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
819 {
820 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
821 }
822 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
823 {
824 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
825 }
826 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
827 {
828 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
829 }
830 if(enumerator & VK_QUERY_RESULT_64_BIT)
831 {
832 strings.push_back("VK_QUERY_RESULT_64_BIT");
833 }
834 if(enumerator & VK_QUERY_RESULT_DEFAULT)
835 {
836 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600837 }
838
839 std::string enumeratorString;
840 for(auto const& string : strings)
841 {
842 enumeratorString += string;
843
844 if(string != strings.back())
845 {
846 enumeratorString += '|';
847 }
848 }
849
850 return enumeratorString;
851}
852
853static
854bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
855{
856 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
857 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
858 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
859 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
860 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800861 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600862 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu1f851912015-10-27 18:04:07 +0800863 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northropfe27ad52015-08-25 15:39:48 -0600864 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600865 if(enumerator & (~allFlags))
866 {
867 return false;
868 }
869
870 return true;
871}
872
873static
874std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
875{
876 if(!ValidateEnumerator(enumerator))
877 {
878 return "unrecognized enumerator";
879 }
880
881 std::vector<std::string> strings;
882 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
883 {
884 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
885 }
886 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
887 {
888 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
889 }
890 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
891 {
892 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
893 }
894 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
895 {
896 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
897 }
898 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
899 {
900 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
901 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800902 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600903 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800904 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600905 }
906 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
907 {
908 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
909 }
Chia-I Wu1f851912015-10-27 18:04:07 +0800910 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600911 {
Chia-I Wu1f851912015-10-27 18:04:07 +0800912 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600913 }
914 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
915 {
916 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
917 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600918
919 std::string enumeratorString;
920 for(auto const& string : strings)
921 {
922 enumeratorString += string;
923
924 if(string != strings.back())
925 {
926 enumeratorString += '|';
927 }
928 }
929
930 return enumeratorString;
931}
932
933static
934bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
935{
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600936 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
937 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600938 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600939 if(enumerator & (~allFlags))
940 {
941 return false;
942 }
943
944 return true;
945}
946
947static
948std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
949{
950 if(!ValidateEnumerator(enumerator))
951 {
952 return "unrecognized enumerator";
953 }
954
955 std::vector<std::string> strings;
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600956 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
957 {
958 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
959 }
960 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
961 {
962 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
963 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600964 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600965 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600966 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600967 }
968
969 std::string enumeratorString;
970 for(auto const& string : strings)
971 {
972 enumeratorString += string;
973
974 if(string != strings.back())
975 {
976 enumeratorString += '|';
977 }
978 }
979
980 return enumeratorString;
981}
982
983static
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600984bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
985{
986 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayesc27938e2015-07-09 17:11:25 -0600987 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
988 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600989 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -0600990 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600991 if(enumerator & (~allFlags))
992 {
993 return false;
994 }
995
996 return true;
997}
998
999static
1000std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1001{
1002 if(!ValidateEnumerator(enumerator))
1003 {
1004 return "unrecognized enumerator";
1005 }
1006
1007 std::vector<std::string> strings;
1008 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1009 {
1010 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1011 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001012 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1013 {
1014 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1015 }
1016 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1017 {
1018 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1019 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001020 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1021 {
1022 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1023 }
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001024 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001025 {
Courtney Goeltzenleuchterc6d66ec2015-09-10 17:00:22 -06001026 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001027 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001028
1029 std::string enumeratorString;
1030 for(auto const& string : strings)
1031 {
1032 enumeratorString += string;
1033
1034 if(string != strings.back())
1035 {
1036 enumeratorString += '|';
1037 }
1038 }
1039
1040 return enumeratorString;
1041}
1042
1043static
Chia-I Wuc51b1212015-10-27 19:25:11 +08001044bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001045{
Chia-I Wuc51b1212015-10-27 19:25:11 +08001046 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1047 VK_COLOR_COMPONENT_B_BIT |
1048 VK_COLOR_COMPONENT_G_BIT |
1049 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001050 if(enumerator & (~allFlags))
1051 {
1052 return false;
1053 }
1054
1055 return true;
1056}
1057
1058static
Chia-I Wuc51b1212015-10-27 19:25:11 +08001059std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001060{
1061 if(!ValidateEnumerator(enumerator))
1062 {
1063 return "unrecognized enumerator";
1064 }
1065
1066 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +08001067 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001068 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001069 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001070 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001071 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001072 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001073 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001074 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001075 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001076 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001077 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001078 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08001079 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001080 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001081 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001082 }
1083
1084 std::string enumeratorString;
1085 for(auto const& string : strings)
1086 {
1087 enumeratorString += string;
1088
1089 if(string != strings.back())
1090 {
1091 enumeratorString += '|';
1092 }
1093 }
1094
1095 return enumeratorString;
1096}
1097
1098static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001099bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001100{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001101 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1102 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1103 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001104 if(enumerator & (~allFlags))
1105 {
1106 return false;
1107 }
1108
1109 return true;
1110}
1111
1112static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001113std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001114{
1115 if(!ValidateEnumerator(enumerator))
1116 {
1117 return "unrecognized enumerator";
1118 }
1119
1120 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001121 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001122 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001123 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1124 }
1125 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1126 {
1127 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1128 }
1129 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1130 {
1131 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001132 }
1133
1134 std::string enumeratorString;
1135 for(auto const& string : strings)
1136 {
1137 enumeratorString += string;
1138
1139 if(string != strings.back())
1140 {
1141 enumeratorString += '|';
1142 }
1143 }
1144
1145 return enumeratorString;
1146}
1147
1148static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001149bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001150{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001151 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1152 VK_SHADER_STAGE_FRAGMENT_BIT |
1153 VK_SHADER_STAGE_GEOMETRY_BIT |
1154 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001155 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1156 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001157 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001158 if(enumerator & (~allFlags))
1159 {
1160 return false;
1161 }
1162
1163 return true;
1164}
1165
1166static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001167std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001168{
1169 if(!ValidateEnumerator(enumerator))
1170 {
1171 return "unrecognized enumerator";
1172 }
1173
1174 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001175 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001176 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001177 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001178 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001179 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001180 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001181 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001182 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001183 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001184 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001185 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1186 }
1187 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1188 {
1189 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1190 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001191 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001192 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001193 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001194 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001195 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001196 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001197 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001198 }
1199 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1200 {
1201 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001202 }
1203
1204 std::string enumeratorString;
1205 for(auto const& string : strings)
1206 {
1207 enumeratorString += string;
1208
1209 if(string != strings.back())
1210 {
1211 enumeratorString += '|';
1212 }
1213 }
1214
1215 return enumeratorString;
1216}
1217
1218static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001219bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001220{
Chia-I Wucba6cea2015-10-31 00:31:16 +08001221 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
1222 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT|
1223 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001224 VK_PIPELINE_STAGE_HOST_BIT |
1225 VK_PIPELINE_STAGE_TRANSFER_BIT |
1226 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Chia-I Wucba6cea2015-10-31 00:31:16 +08001227 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001228 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001229 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001230 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001231 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1232 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1233 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001234 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001235 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1236 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1237 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1238 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001239 if(enumerator & (~allFlags))
1240 {
1241 return false;
1242 }
1243
1244 return true;
1245}
1246
1247static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001248std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001249{
1250 if(!ValidateEnumerator(enumerator))
1251 {
1252 return "unrecognized enumerator";
1253 }
1254
1255 std::vector<std::string> strings;
Chia-I Wucba6cea2015-10-31 00:31:16 +08001256 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001257 {
Chia-I Wucba6cea2015-10-31 00:31:16 +08001258 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1259 }
1260 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1261 {
1262 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001263 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001264 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001265 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001266 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001267 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001268 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001269 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001270 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001271 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001272 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001273 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001274 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001275 }
Chia-I Wucba6cea2015-10-31 00:31:16 +08001276 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001277 {
Chia-I Wucba6cea2015-10-31 00:31:16 +08001278 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001279 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001280 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001281 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001282 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001283 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001284 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001285 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001286 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001287 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001288 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001289 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001290 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001291 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001292 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001293 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001294 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001295 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001296 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001297 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001298 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1299 }
1300 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1301 {
1302 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1303 }
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001304 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001305 {
Courtney Goeltzenleuchterc6fd2262015-10-15 17:35:38 -06001306 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001307 }
1308 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1309 {
1310 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1311 }
1312 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1313 {
1314 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1315 }
1316 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1317 {
1318 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1319 }
1320 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1321 {
1322 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001323 }
1324
1325 std::string enumeratorString;
1326 for(auto const& string : strings)
1327 {
1328 enumeratorString += string;
1329
1330 if(string != strings.back())
1331 {
1332 enumeratorString += '|';
1333 }
1334 }
1335
1336 return enumeratorString;
1337}
1338
1339static
Chia-I Wu989de842015-10-27 19:54:37 +08001340bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001341{
Chia-I Wu989de842015-10-27 19:54:37 +08001342 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1343 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1344 VK_ACCESS_INDEX_READ_BIT |
1345 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1346 VK_ACCESS_UNIFORM_READ_BIT |
1347 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1348 VK_ACCESS_SHADER_READ_BIT |
1349 VK_ACCESS_SHADER_WRITE_BIT |
1350 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1351 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1352 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1353 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1354 VK_ACCESS_TRANSFER_READ_BIT |
1355 VK_ACCESS_TRANSFER_WRITE_BIT |
1356 VK_ACCESS_HOST_READ_BIT |
1357 VK_ACCESS_HOST_WRITE_BIT |
1358 VK_ACCESS_MEMORY_READ_BIT |
1359 VK_ACCESS_MEMORY_WRITE_BIT);
1360
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001361 if(enumerator & (~allFlags))
1362 {
1363 return false;
1364 }
1365
1366 return true;
1367}
1368
1369static
Chia-I Wu989de842015-10-27 19:54:37 +08001370std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001371{
1372 if(!ValidateEnumerator(enumerator))
1373 {
1374 return "unrecognized enumerator";
1375 }
1376
1377 std::vector<std::string> strings;
Chia-I Wu989de842015-10-27 19:54:37 +08001378 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001379 {
Chia-I Wu989de842015-10-27 19:54:37 +08001380 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001381 }
Chia-I Wu989de842015-10-27 19:54:37 +08001382 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001383 {
Chia-I Wu989de842015-10-27 19:54:37 +08001384 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001385 }
Chia-I Wu989de842015-10-27 19:54:37 +08001386 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001387 {
Chia-I Wu989de842015-10-27 19:54:37 +08001388 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001389 }
Chia-I Wu989de842015-10-27 19:54:37 +08001390 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001391 {
Chia-I Wu989de842015-10-27 19:54:37 +08001392 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001393 }
Chia-I Wu989de842015-10-27 19:54:37 +08001394 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001395 {
Chia-I Wu989de842015-10-27 19:54:37 +08001396 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001397 }
Chia-I Wu989de842015-10-27 19:54:37 +08001398 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001399 {
Chia-I Wu989de842015-10-27 19:54:37 +08001400 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001401 }
Chia-I Wu989de842015-10-27 19:54:37 +08001402 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001403 {
Chia-I Wu989de842015-10-27 19:54:37 +08001404 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001405 }
Chia-I Wu989de842015-10-27 19:54:37 +08001406 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001407 {
Chia-I Wu989de842015-10-27 19:54:37 +08001408 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001409 }
Chia-I Wu989de842015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001411 {
Chia-I Wu989de842015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001413 }
Chia-I Wu989de842015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001415 {
Chia-I Wu989de842015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001417 }
Chia-I Wu989de842015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001419 {
Chia-I Wu989de842015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001421 }
Chia-I Wu989de842015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001423 {
Chia-I Wu989de842015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001425 }
Chia-I Wu989de842015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001427 {
Chia-I Wu989de842015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001429 }
Chia-I Wu989de842015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001431 {
Chia-I Wu989de842015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001433 }
Chia-I Wu989de842015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001435 {
Chia-I Wu989de842015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001437 }
Chia-I Wu989de842015-10-27 19:54:37 +08001438 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001439 {
Chia-I Wu989de842015-10-27 19:54:37 +08001440 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001441 }
Chia-I Wu989de842015-10-27 19:54:37 +08001442 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001443 {
Chia-I Wu989de842015-10-27 19:54:37 +08001444 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001445 }
1446
1447 std::string enumeratorString;
1448 for(auto const& string : strings)
1449 {
1450 enumeratorString += string;
1451
1452 if(string != strings.back())
1453 {
1454 enumeratorString += '|';
1455 }
1456 }
1457
1458 return enumeratorString;
1459}
1460
1461static
Chia-I Wu1f851912015-10-27 18:04:07 +08001462bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001463{
Chia-I Wu1f851912015-10-27 18:04:07 +08001464 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1465 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001466 if(enumerator & (~allFlags))
1467 {
1468 return false;
1469 }
1470
1471 return true;
1472}
1473
1474static
Chia-I Wu1f851912015-10-27 18:04:07 +08001475std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001476{
1477 if(!ValidateEnumerator(enumerator))
1478 {
1479 return "unrecognized enumerator";
1480 }
1481
1482 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001483 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001484 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001485 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001486 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001487 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001488 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001489 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001490 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001491
1492 std::string enumeratorString;
1493 for(auto const& string : strings)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001494 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001495 enumeratorString += string;
1496
1497 if(string != strings.back())
1498 {
1499 enumeratorString += '|';
1500 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001501 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001502
1503 return enumeratorString;
1504}
1505
1506static
Chia-I Wu1f851912015-10-27 18:04:07 +08001507bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001508{
Chia-I Wu1f851912015-10-27 18:04:07 +08001509 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001510 if(enumerator & (~allFlags))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001511 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001512 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001513 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001514
1515 return true;
1516}
1517
1518static
Chia-I Wu1f851912015-10-27 18:04:07 +08001519std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001520{
1521 if(!ValidateEnumerator(enumerator))
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001522 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001523 return "unrecognized enumerator";
1524 }
1525
1526 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001527 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001528 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001529 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001530 }
1531
1532 std::string enumeratorString;
1533 for(auto const& string : strings)
1534 {
1535 enumeratorString += string;
1536
1537 if(string != strings.back())
1538 {
1539 enumeratorString += '|';
1540 }
1541 }
1542
1543 return enumeratorString;
1544}
1545
1546static
Chia-I Wu1f851912015-10-27 18:04:07 +08001547bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001548{
Chia-I Wu1f851912015-10-27 18:04:07 +08001549 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1550 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1551 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001552 if(enumerator & (~allFlags))
1553 {
1554 return false;
1555 }
1556
1557 return true;
1558}
1559
1560static
Chia-I Wu1f851912015-10-27 18:04:07 +08001561std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001562{
1563 if(!ValidateEnumerator(enumerator))
1564 {
1565 return "unrecognized enumerator";
1566 }
1567
1568 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001569 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001570 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001571 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001572 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001573 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001574 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001575 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001576 }
Chia-I Wu1f851912015-10-27 18:04:07 +08001577 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001578 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001579 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001580 }
1581
1582 std::string enumeratorString;
1583 for(auto const& string : strings)
1584 {
1585 enumeratorString += string;
1586
1587 if(string != strings.back())
1588 {
1589 enumeratorString += '|';
1590 }
1591 }
1592
1593 return enumeratorString;
1594}
1595
1596static
Chia-I Wu1f851912015-10-27 18:04:07 +08001597bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001598{
Chia-I Wu1f851912015-10-27 18:04:07 +08001599 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001600 if(enumerator & (~allFlags))
1601 {
1602 return false;
1603 }
1604
1605 return true;
1606}
1607
1608static
Chia-I Wu1f851912015-10-27 18:04:07 +08001609std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001610{
1611 if(!ValidateEnumerator(enumerator))
1612 {
1613 return "unrecognized enumerator";
1614 }
1615
1616 std::vector<std::string> strings;
Chia-I Wu1f851912015-10-27 18:04:07 +08001617 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001618 {
Chia-I Wu1f851912015-10-27 18:04:07 +08001619 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001620 }
1621
1622 std::string enumeratorString;
1623 for(auto const& string : strings)
1624 {
1625 enumeratorString += string;
1626
1627 if(string != strings.back())
1628 {
1629 enumeratorString += '|';
1630 }
1631 }
1632
1633 return enumeratorString;
1634}
1635
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001636static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001637bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001638{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001639 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1640 VK_IMAGE_ASPECT_STENCIL_BIT |
1641 VK_IMAGE_ASPECT_DEPTH_BIT |
1642 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001643 if(enumerator & (~allFlags))
1644 {
1645 return false;
1646 }
1647
1648 return true;
1649}
1650
1651static
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001652std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001653{
1654 if(!ValidateEnumerator(enumerator))
1655 {
1656 return "unrecognized enumerator";
1657 }
1658
1659 std::vector<std::string> strings;
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001660 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001661 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001662 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1663 }
1664 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1665 {
1666 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1667 }
1668 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1669 {
1670 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1671 }
1672 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1673 {
1674 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1675 }
1676
1677 std::string enumeratorString;
1678 for(auto const& string : strings)
1679 {
1680 enumeratorString += string;
1681
1682 if(string != strings.back())
1683 {
1684 enumeratorString += '|';
1685 }
1686 }
1687
1688 return enumeratorString;
1689}
1690
1691static
1692bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1693{
Chia-I Wuc51b1212015-10-27 19:25:11 +08001694 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001695 if(enumerator & (~allFlags))
1696 {
1697 return false;
1698 }
1699
1700 return true;
1701}
1702
1703static
1704std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1705{
1706 if(!ValidateEnumerator(enumerator))
1707 {
1708 return "unrecognized enumerator";
1709 }
1710
1711 std::vector<std::string> strings;
Chia-I Wuc51b1212015-10-27 19:25:11 +08001712 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001713 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08001714 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001715 }
1716
1717 std::string enumeratorString;
1718 for(auto const& string : strings)
1719 {
1720 enumeratorString += string;
1721
1722 if(string != strings.back())
1723 {
1724 enumeratorString += '|';
1725 }
1726 }
1727
1728 return enumeratorString;
1729}
1730
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001731VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(
1732 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08001733 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001734 VkInstance* pInstance)
1735{
1736 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001737 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001738
1739 if (result == VK_SUCCESS) {
1740 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wu763a7492015-10-26 20:48:51 +08001741 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchter24d5abb2015-07-07 11:02:42 -06001742 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001743
1744 InitParamChecker(data);
1745 }
1746
1747 return result;
1748}
1749
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06001750VK_LAYER_EXPORT void VKAPI vkDestroyInstance(
Chia-I Wu69f40122015-10-26 21:10:41 +08001751 VkInstance instance,
Chia-I Wu1f851912015-10-27 18:04:07 +08001752 const VkAllocationCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001753{
1754 // Grab the key before the instance is destroyed.
1755 dispatch_key key = get_dispatch_key(instance);
1756 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wu69f40122015-10-26 21:10:41 +08001757 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001758
1759 // Clean up logging callback, if any
Courtney Goeltzenleuchterb57dd742015-10-05 15:59:45 -06001760 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1761 while (my_data->logging_callback.size() > 0) {
1762 VkDbgMsgCallback callback = my_data->logging_callback.back();
1763 layer_destroy_msg_callback(my_data->report_data, callback);
1764 my_data->logging_callback.pop_back();
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001765 }
1766
1767 layer_debug_report_destroy_instance(mid(instance));
1768 layer_data_map.erase(pTable);
1769
1770 pc_instance_table_map.erase(key);
1771 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001772}
1773
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001774bool PostEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001775 VkInstance instance,
1776 uint32_t* pPhysicalDeviceCount,
1777 VkPhysicalDevice* pPhysicalDevices,
1778 VkResult result)
1779{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001780
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001781 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001782 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001783 }
1784
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001785 if(pPhysicalDevices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001786 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001787 }
1788
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001789 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001790 {
1791 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08001792 log_msg(mid(instance), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001793 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001794 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001795
1796 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001797}
1798
1799VK_LAYER_EXPORT VkResult VKAPI vkEnumeratePhysicalDevices(
1800 VkInstance instance,
1801 uint32_t* pPhysicalDeviceCount,
1802 VkPhysicalDevice* pPhysicalDevices)
1803{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001804 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1805
1806 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1807
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001808 return result;
1809}
1810
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001811bool PostGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001812 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001813 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001814{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001815
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001816 if(pFeatures != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001817 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001818 }
1819
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001820 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001821}
1822
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001823VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFeatures(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001824 VkPhysicalDevice physicalDevice,
1825 VkPhysicalDeviceFeatures* pFeatures)
1826{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001827 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001828
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001829 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001830}
1831
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06001832bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001833 VkPhysicalDevice physicalDevice,
1834 VkFormat format,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001835 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001836{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001837
1838 if(format < VK_FORMAT_BEGIN_RANGE ||
1839 format > VK_FORMAT_END_RANGE)
1840 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001841 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001842 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001843 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001844 }
1845
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001846 if(pFormatProperties != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001847 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001848 }
1849
Jeremy Hayesc27938e2015-07-09 17:11:25 -06001850 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001851}
1852
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001853VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceFormatProperties(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001854 VkPhysicalDevice physicalDevice,
1855 VkFormat format,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001856 VkFormatProperties* pFormatProperties)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001857{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001858 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001859
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001860 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001861}
1862
1863bool PostGetPhysicalDeviceImageFormatProperties(
1864 VkPhysicalDevice physicalDevice,
1865 VkFormat format,
1866 VkImageType type,
1867 VkImageTiling tiling,
1868 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001869 VkImageCreateFlags flags,
Chia-I Wu5202c542015-10-31 00:31:16 +08001870 VkImageFormatProperties* pImageFormatProperties,
1871 VkResult result)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001872{
1873
1874 if(format < VK_FORMAT_BEGIN_RANGE ||
1875 format > VK_FORMAT_END_RANGE)
1876 {
1877 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1878 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1879 return false;
1880 }
1881
1882 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1883 type > VK_IMAGE_TYPE_END_RANGE)
1884 {
1885 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1886 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1887 return false;
1888 }
1889
1890 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1891 tiling > VK_IMAGE_TILING_END_RANGE)
1892 {
1893 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1894 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1895 return false;
1896 }
1897
1898
1899 if(pImageFormatProperties != nullptr)
1900 {
1901 }
1902
Chia-I Wu5202c542015-10-31 00:31:16 +08001903 if(result < VK_SUCCESS)
1904 {
1905 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08001906 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu5202c542015-10-31 00:31:16 +08001907 return false;
1908 }
1909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001910 return true;
1911}
1912
Chia-I Wu5202c542015-10-31 00:31:16 +08001913VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001914 VkPhysicalDevice physicalDevice,
1915 VkFormat format,
1916 VkImageType type,
1917 VkImageTiling tiling,
1918 VkImageUsageFlags usage,
Courtney Goeltzenleuchter83c95f82015-09-10 13:44:12 -06001919 VkImageCreateFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001920 VkImageFormatProperties* pImageFormatProperties)
1921{
Chia-I Wu5202c542015-10-31 00:31:16 +08001922 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001923
Chia-I Wu5202c542015-10-31 00:31:16 +08001924 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1925
1926 return result;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001927}
1928
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001929bool PostGetPhysicalDeviceProperties(
1930 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001931 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001932{
1933
1934 if(pProperties != nullptr)
1935 {
1936 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1937 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1938 {
1939 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
1940 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1941 return false;
1942 }
1943 }
1944
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001945 return true;
1946}
1947
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001948VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001949 VkPhysicalDevice physicalDevice,
1950 VkPhysicalDeviceProperties* pProperties)
1951{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001952 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001953
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001954 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001955}
1956
Cody Northropef72e2a2015-08-03 17:04:53 -06001957bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001958 VkPhysicalDevice physicalDevice,
1959 uint32_t* pCount,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001960 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001961{
1962
Cody Northropef72e2a2015-08-03 17:04:53 -06001963 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001964 {
1965 }
1966
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001967 if(pQueueProperties != nullptr)
1968 {
1969 }
1970
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001971 return true;
1972}
1973
Courtney Goeltzenleuchter8148af02015-10-27 11:19:02 -06001974VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001975 VkPhysicalDevice physicalDevice,
Cody Northropef72e2a2015-08-03 17:04:53 -06001976 uint32_t* pCount,
1977 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001978{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001979 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001980
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001981 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001982}
1983
1984bool PostGetPhysicalDeviceMemoryProperties(
1985 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001986 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001987{
1988
1989 if(pMemoryProperties != nullptr)
1990 {
1991 }
1992
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001993 return true;
1994}
1995
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06001996VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001997 VkPhysicalDevice physicalDevice,
1998 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
1999{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002000 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002001
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002002 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002003}
2004
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002005VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(
2006 VkPhysicalDevice physicalDevice,
2007 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002008 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002009 VkDevice* pDevice)
2010{
Courtney Goeltzenleuchterf0044992015-09-08 17:42:57 -06002011 /*
2012 * NOTE: The loader fills in the ICD's device object in *pDevice.
2013 * Use that object to get the dispatch table.
2014 *
2015 * NOTE: We do not validate physicalDevice or any dispatchable
2016 * object as the first parameter. We couldn't get here if it was wrong!
2017 */
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06002018 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wu69f40122015-10-26 21:10:41 +08002019 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002020 if(result == VK_SUCCESS)
2021 {
2022 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2023 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2024 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2025 }
2026
2027 return result;
2028}
2029
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06002030VK_LAYER_EXPORT void VKAPI vkDestroyDevice(
Chia-I Wu69f40122015-10-26 21:10:41 +08002031 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002032 const VkAllocationCallbacks* pAllocator)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002033{
2034 layer_debug_report_destroy_device(device);
2035
2036 dispatch_key key = get_dispatch_key(device);
2037#if DISPATCH_MAP_DEBUG
2038 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2039#endif
2040
Chia-I Wu69f40122015-10-26 21:10:41 +08002041 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002042 pc_device_table_map.erase(key);
2043 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002044}
2045
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002046bool PostGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002047 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002048 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002049 uint32_t queueIndex,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002050 VkQueue* pQueue)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002051{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002052
2053
2054
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002055 if(pQueue != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002056 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002057 }
2058
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002059 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002060}
2061
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002062VK_LAYER_EXPORT void VKAPI vkGetDeviceQueue(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002063 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002064 uint32_t queueFamilyIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002065 uint32_t queueIndex,
2066 VkQueue* pQueue)
2067{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002068 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002069
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002070 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002071}
2072
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002073bool PreQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002074 VkQueue queue,
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002075 const VkSubmitInfo* submit)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002076{
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002077 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
2078 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu483e7702015-10-26 17:20:32 +08002079 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wu6ec33a02015-10-26 20:37:06 +08002080 return false;
2081 }
2082
2083 if(submit->pCommandBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002084 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002086
2087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002088}
2089
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002090bool PostQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002091 VkQueue queue,
Chia-I Wu763a7492015-10-26 20:48:51 +08002092 uint32_t commandBufferCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002093 VkFence fence,
2094 VkResult result)
2095{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002096
2097
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002098
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002099 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002100 {
2101 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002102 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002103 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002104 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002105
2106 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002107}
2108
2109VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(
2110 VkQueue queue,
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002111 uint32_t submitCount,
Chia-I Wu483e7702015-10-26 17:20:32 +08002112 const VkSubmitInfo* pSubmits,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002113 VkFence fence)
2114{
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002115 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu483e7702015-10-26 17:20:32 +08002116 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002117 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002118
Chia-I Wu483e7702015-10-26 17:20:32 +08002119 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002120
Courtney Goeltzenleuchter3ec31622015-10-20 18:04:07 -06002121 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002122
2123 return result;
2124}
2125
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002126bool PostQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002127 VkQueue queue,
2128 VkResult result)
2129{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002130
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002131 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002132 {
2133 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002134 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002135 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002136 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002137
2138 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002139}
2140
2141VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(
2142 VkQueue queue)
2143{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002144 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2145
2146 PostQueueWaitIdle(queue, result);
2147
2148 return result;
2149}
2150
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002151bool PostDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002152 VkDevice device,
2153 VkResult result)
2154{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002155
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002156 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002157 {
2158 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002159 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002160 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002161 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002164}
2165
2166VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(
2167 VkDevice device)
2168{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002169 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2170
2171 PostDeviceWaitIdle(device, result);
2172
2173 return result;
2174}
2175
Chia-I Wu1f851912015-10-27 18:04:07 +08002176bool PreAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002177 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002178 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002179{
Chia-I Wu1f851912015-10-27 18:04:07 +08002180 if(pAllocateInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002181 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002182 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002183 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002184 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002185 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002186 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002187 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002188 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002189
2190 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002191}
2192
Chia-I Wu1f851912015-10-27 18:04:07 +08002193bool PostAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002194 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002195 VkDeviceMemory* pMemory,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002196 VkResult result)
2197{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002198
Chia-I Wu1f851912015-10-27 18:04:07 +08002199 if(pMemory != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002200 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002201 }
2202
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002203 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002204 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002205 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002206 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002207 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002208 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002209
2210 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002211}
2212
Chia-I Wu1f851912015-10-27 18:04:07 +08002213VK_LAYER_EXPORT VkResult VKAPI vkAllocateMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002214 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002215 const VkMemoryAllocateInfo* pAllocateInfo,
2216 const VkAllocationCallbacks* pAllocator,
2217 VkDeviceMemory* pMemory)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002218{
Chia-I Wu1f851912015-10-27 18:04:07 +08002219 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002220
Chia-I Wu1f851912015-10-27 18:04:07 +08002221 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002222
Chia-I Wu1f851912015-10-27 18:04:07 +08002223 PostAllocateMemory(device, pMemory, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002224
2225 return result;
2226}
2227
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002228bool PostMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002229 VkDevice device,
2230 VkDeviceMemory mem,
2231 VkDeviceSize offset,
2232 VkDeviceSize size,
2233 VkMemoryMapFlags flags,
2234 void** ppData,
2235 VkResult result)
2236{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002237
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002238
2239
2240
2241
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002242 if(ppData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002243 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002244 }
2245
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002246 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002247 {
2248 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002249 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002250 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002251 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002252
2253 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002254}
2255
2256VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(
2257 VkDevice device,
2258 VkDeviceMemory mem,
2259 VkDeviceSize offset,
2260 VkDeviceSize size,
2261 VkMemoryMapFlags flags,
2262 void** ppData)
2263{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002264 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2265
2266 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2267
2268 return result;
2269}
2270
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002271bool PreFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002272 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002273 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002274{
Chia-I Wu1f851912015-10-27 18:04:07 +08002275 if(pMemoryRanges != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002276 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002277 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002278 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002279 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002280 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002281 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002282 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002283 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002284
2285 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002286}
2287
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002288bool PostFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002289 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002290 uint32_t memoryRangeCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002291 VkResult result)
2292{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002293
2294
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002295 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002296 {
2297 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002298 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002299 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002300 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002301
2302 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002303}
2304
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002305VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002306 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002307 uint32_t memoryRangeCount,
2308 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbour859ceab2015-04-16 19:23:13 -06002309{
Chia-I Wu1f851912015-10-27 18:04:07 +08002310 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002311
Chia-I Wu1f851912015-10-27 18:04:07 +08002312 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbour859ceab2015-04-16 19:23:13 -06002313
Chia-I Wu1f851912015-10-27 18:04:07 +08002314 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002315
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002316 return result;
2317}
2318
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002319bool PreInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002320 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002321 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002322{
Chia-I Wu1f851912015-10-27 18:04:07 +08002323 if(pMemoryRanges != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002324 {
Chia-I Wu1f851912015-10-27 18:04:07 +08002325 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002326 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002327 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08002328 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002329 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002330 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002331 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002332
2333 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002334}
2335
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002336bool PostInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002337 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002338 uint32_t memoryRangeCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002339 VkResult result)
2340{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002341
2342
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002343 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002344 {
2345 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002346 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002347 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002348 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002349
2350 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002351}
2352
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002353VK_LAYER_EXPORT VkResult VKAPI vkInvalidateMappedMemoryRanges(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002354 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08002355 uint32_t memoryRangeCount,
2356 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002357{
Chia-I Wu1f851912015-10-27 18:04:07 +08002358 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002359
Chia-I Wu1f851912015-10-27 18:04:07 +08002360 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchtera569a502015-04-29 17:16:21 -06002361
Chia-I Wu1f851912015-10-27 18:04:07 +08002362 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002363
Tony Barbour859ceab2015-04-16 19:23:13 -06002364 return result;
2365}
2366
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002367bool PostGetDeviceMemoryCommitment(
2368 VkDevice device,
2369 VkDeviceMemory memory,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002370 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002371{
2372
2373
2374 if(pCommittedMemoryInBytes != nullptr)
2375 {
2376 }
2377
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002378 return true;
2379}
2380
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002381VK_LAYER_EXPORT void VKAPI vkGetDeviceMemoryCommitment(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002382 VkDevice device,
2383 VkDeviceMemory memory,
2384 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002385{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002386 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002387
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002388 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterd040c5c2015-07-09 21:57:28 -06002389}
2390
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002391bool PostBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002392 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002393 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002394 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002395 VkDeviceSize memoryOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002396 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002397{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002398
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002399
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002400
2401
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002402 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002403 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002404 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002405 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002406 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002407 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002408
2409 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002410}
2411
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002412VK_LAYER_EXPORT VkResult VKAPI vkBindBufferMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002413 VkDevice device,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002414 VkBuffer buffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002415 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002416 VkDeviceSize memoryOffset)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002417{
Chia-I Wu1f851912015-10-27 18:04:07 +08002418 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002419
Chia-I Wu1f851912015-10-27 18:04:07 +08002420 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002421
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002422 return result;
2423}
2424
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002425bool PostBindImageMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002426 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002427 VkImage image,
2428 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002429 VkDeviceSize memoryOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002430 VkResult result)
2431{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002432
2433
2434
2435
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002436 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002437 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002438 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002439 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002440 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002441 }
2442
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002443 return true;
2444}
2445
2446VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemory(
2447 VkDevice device,
2448 VkImage image,
2449 VkDeviceMemory mem,
Chia-I Wu1f851912015-10-27 18:04:07 +08002450 VkDeviceSize memoryOffset)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002451{
Chia-I Wu1f851912015-10-27 18:04:07 +08002452 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002453
Chia-I Wu1f851912015-10-27 18:04:07 +08002454 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002455
2456 return result;
2457}
2458
2459bool PostGetBufferMemoryRequirements(
2460 VkDevice device,
2461 VkBuffer buffer,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002462 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002463{
2464
2465
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002466 if(pMemoryRequirements != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002467 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002468 }
2469
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002470 return true;
2471}
2472
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002473VK_LAYER_EXPORT void VKAPI vkGetBufferMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002474 VkDevice device,
2475 VkBuffer buffer,
2476 VkMemoryRequirements* pMemoryRequirements)
2477{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002478 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002479
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002480 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002481}
2482
2483bool PostGetImageMemoryRequirements(
2484 VkDevice device,
2485 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002486 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002487{
2488
2489
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002490 if(pMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002491 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002492 }
2493
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002494 return true;
2495}
2496
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002497VK_LAYER_EXPORT void VKAPI vkGetImageMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002498 VkDevice device,
2499 VkImage image,
2500 VkMemoryRequirements* pMemoryRequirements)
2501{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002502 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002503
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002504 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002505}
2506
2507bool PostGetImageSparseMemoryRequirements(
2508 VkDevice device,
2509 VkImage image,
2510 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002511 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002512{
2513
2514
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002515 if(pNumRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002516 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002517 }
2518
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002519 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002520 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08002521 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002522 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002523 {
2524 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08002525 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002526 return false;
2527 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002528 }
2529
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002530 return true;
2531}
2532
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002533VK_LAYER_EXPORT void VKAPI vkGetImageSparseMemoryRequirements(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002534 VkDevice device,
2535 VkImage image,
2536 uint32_t* pNumRequirements,
2537 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2538{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002539 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002540
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002541 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002542}
2543
2544bool PostGetPhysicalDeviceSparseImageFormatProperties(
2545 VkPhysicalDevice physicalDevice,
2546 VkFormat format,
2547 VkImageType type,
Chia-I Wu3138d6a2015-10-31 00:31:16 +08002548 VkSampleCountFlagBits samples,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002549 VkImageUsageFlags usage,
2550 VkImageTiling tiling,
2551 uint32_t* pNumProperties,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002552 VkSparseImageFormatProperties* pProperties)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002553{
2554
2555 if(format < VK_FORMAT_BEGIN_RANGE ||
2556 format > VK_FORMAT_END_RANGE)
2557 {
2558 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002559 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002560 return false;
2561 }
2562
2563 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2564 type > VK_IMAGE_TYPE_END_RANGE)
2565 {
2566 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002567 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002568 return false;
2569 }
2570
2571
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002572
2573 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2574 tiling > VK_IMAGE_TILING_END_RANGE)
2575 {
2576 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002577 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002578 return false;
2579 }
2580
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002581 if(pNumProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002582 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002583 }
2584
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002585 if(pProperties != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002586 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08002587 if ((pProperties->aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06002588 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002589 {
2590 log_msg(mdd(physicalDevice), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08002591 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002592 return false;
2593 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002594 }
2595
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002596 return true;
2597}
2598
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002599VK_LAYER_EXPORT void VKAPI vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002600 VkPhysicalDevice physicalDevice,
2601 VkFormat format,
2602 VkImageType type,
Chia-I Wu3138d6a2015-10-31 00:31:16 +08002603 VkSampleCountFlagBits samples,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002604 VkImageUsageFlags usage,
2605 VkImageTiling tiling,
2606 uint32_t* pNumProperties,
2607 VkSparseImageFormatProperties* pProperties)
2608{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002609 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002610
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06002611 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002612}
2613
Chia-I Wu06809d52015-10-26 16:55:27 +08002614bool PreQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002615 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002616 uint32_t bindInfoCount,
2617 const VkBindSparseInfo* pBindInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002618{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002619 if(pBindInfo != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002620 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002621 }
2622
2623 return true;
2624}
2625
Chia-I Wu06809d52015-10-26 16:55:27 +08002626bool PostQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002627 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002628 uint32_t bindInfoCount,
2629 const VkBindSparseInfo* pBindInfo,
2630 VkFence fence,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002631 VkResult result)
2632{
2633
2634
2635
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002636 if(result < VK_SUCCESS)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002637 {
Chia-I Wu06809d52015-10-26 16:55:27 +08002638 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002639 log_msg(mdd(queue), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002640 return false;
2641 }
2642
2643 return true;
2644}
2645
Chia-I Wu06809d52015-10-26 16:55:27 +08002646VK_LAYER_EXPORT VkResult VKAPI vkQueueBindSparse(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002647 VkQueue queue,
Chia-I Wu06809d52015-10-26 16:55:27 +08002648 uint32_t bindInfoCount,
2649 const VkBindSparseInfo* pBindInfo,
2650 VkFence fence)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002651{
Chia-I Wu06809d52015-10-26 16:55:27 +08002652 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002653
Chia-I Wu06809d52015-10-26 16:55:27 +08002654 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002655
Chia-I Wu06809d52015-10-26 16:55:27 +08002656 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002657
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002658 return result;
2659}
2660
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002661bool PreCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002662 VkDevice device,
2663 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002664{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002665 if(pCreateInfo != nullptr)
2666 {
2667 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002668 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002669 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002670 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002671 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002672 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002673 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002674
2675 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002676}
2677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002678bool PostCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002679 VkDevice device,
2680 VkFence* pFence,
2681 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002682{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002683
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002684 if(pFence != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002685 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002686 }
2687
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002688 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002689 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002690 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002691 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002692 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002693 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002694
2695 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002696}
2697
2698VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(
2699 VkDevice device,
2700 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002701 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002702 VkFence* pFence)
2703{
2704 PreCreateFence(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002705
Chia-I Wu69f40122015-10-26 21:10:41 +08002706 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002707
2708 PostCreateFence(device, pFence, result);
2709
2710 return result;
2711}
2712
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002713bool PreResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002714 VkDevice device,
2715 const VkFence* pFences)
2716{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002717 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002718 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002719 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002720
2721 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002722}
2723
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002724bool PostResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002725 VkDevice device,
2726 uint32_t fenceCount,
2727 VkResult result)
2728{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002729
2730
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002731 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002732 {
2733 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002734 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002735 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002736 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002737
2738 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002739}
2740
2741VK_LAYER_EXPORT VkResult VKAPI vkResetFences(
2742 VkDevice device,
2743 uint32_t fenceCount,
2744 const VkFence* pFences)
2745{
2746 PreResetFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002747
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002748 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2749
2750 PostResetFences(device, fenceCount, result);
2751
2752 return result;
2753}
2754
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002755bool PostGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002756 VkDevice device,
2757 VkFence fence,
2758 VkResult result)
2759{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002760
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002761
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002762 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002763 {
2764 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002765 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002766 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002767 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002768
2769 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002770}
2771
2772VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(
2773 VkDevice device,
2774 VkFence fence)
2775{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002776 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2777
2778 PostGetFenceStatus(device, fence, result);
2779
2780 return result;
2781}
2782
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002783bool PreWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002784 VkDevice device,
2785 const VkFence* pFences)
2786{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002787 if(pFences != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002788 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002789 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002790
2791 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002792}
2793
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002794bool PostWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002795 VkDevice device,
2796 uint32_t fenceCount,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002797 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002798 uint64_t timeout,
2799 VkResult result)
2800{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002801
2802
2803
2804
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002805 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002806 {
2807 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002808 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002809 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002810 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002811
2812 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002813}
2814
2815VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(
2816 VkDevice device,
2817 uint32_t fenceCount,
2818 const VkFence* pFences,
Courtney Goeltzenleuchter1f41f542015-07-09 11:44:38 -06002819 VkBool32 waitAll,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002820 uint64_t timeout)
2821{
2822 PreWaitForFences(device, pFences);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002823
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002824 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2825
2826 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2827
2828 return result;
2829}
2830
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002831bool PreCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002832 VkDevice device,
2833 const VkSemaphoreCreateInfo* pCreateInfo)
2834{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002835 if(pCreateInfo != nullptr)
2836 {
2837 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002838 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002839 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002840 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002841 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002842 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002843 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002844
2845 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002846}
2847
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002848bool PostCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002849 VkDevice device,
2850 VkSemaphore* pSemaphore,
2851 VkResult result)
2852{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002853
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002854 if(pSemaphore != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002855 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002856 }
2857
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002858 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002859 {
2860 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002861 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002862 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002863 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002864
2865 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002866}
2867
2868VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(
2869 VkDevice device,
2870 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002871 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002872 VkSemaphore* pSemaphore)
2873{
2874 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002875
Chia-I Wu69f40122015-10-26 21:10:41 +08002876 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002877
2878 PostCreateSemaphore(device, pSemaphore, result);
2879
2880 return result;
2881}
2882
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002883bool PreCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002884 VkDevice device,
2885 const VkEventCreateInfo* pCreateInfo)
2886{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002887 if(pCreateInfo != nullptr)
2888 {
2889 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002890 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002891 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002892 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002893 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002894 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002895 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002896
2897 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002898}
2899
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002900bool PostCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002901 VkDevice device,
2902 VkEvent* pEvent,
2903 VkResult result)
2904{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002905
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002906 if(pEvent != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002907 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002908 }
2909
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002910 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002911 {
2912 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002913 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002914 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002916
2917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002918}
2919
2920VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(
2921 VkDevice device,
2922 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08002923 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002924 VkEvent* pEvent)
2925{
2926 PreCreateEvent(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002927
Chia-I Wu69f40122015-10-26 21:10:41 +08002928 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002929
2930 PostCreateEvent(device, pEvent, result);
2931
2932 return result;
2933}
2934
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002935bool PostGetEventStatus(
2936 VkDevice device,
2937 VkEvent event,
2938 VkResult result)
2939{
2940
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002941
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002942 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002943 {
2944 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002945 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002946 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002947 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002948
2949 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002950}
2951
2952VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(
2953 VkDevice device,
2954 VkEvent event)
2955{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002956 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2957
2958 PostGetEventStatus(device, event, result);
2959
2960 return result;
2961}
2962
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002963bool PostSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002964 VkDevice device,
2965 VkEvent event,
2966 VkResult result)
2967{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002968
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002969
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002970 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002971 {
2972 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08002973 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002974 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002975 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002976
2977 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002978}
2979
2980VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(
2981 VkDevice device,
2982 VkEvent event)
2983{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002984 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
2985
2986 PostSetEvent(device, event, result);
2987
2988 return result;
2989}
2990
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002991bool PostResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002992 VkDevice device,
2993 VkEvent event,
2994 VkResult result)
2995{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002996
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002997
Jeremy Hayese841fdc2015-07-29 11:23:46 -06002998 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002999 {
3000 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003001 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003002 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003003 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003004
3005 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003006}
3007
3008VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(
3009 VkDevice device,
3010 VkEvent event)
3011{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003012 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3013
3014 PostResetEvent(device, event, result);
3015
3016 return result;
3017}
3018
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003019bool PreCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003020 VkDevice device,
3021 const VkQueryPoolCreateInfo* pCreateInfo)
3022{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003023 if(pCreateInfo != nullptr)
3024 {
3025 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003026 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003027 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003028 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003029 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003030 }
3031 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3032 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3033 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003034 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003035 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003036 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003037 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003038 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003039
3040 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003041}
3042
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003043bool PostCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003044 VkDevice device,
3045 VkQueryPool* pQueryPool,
3046 VkResult result)
3047{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003048
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003049 if(pQueryPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003050 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003051 }
3052
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003053 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003054 {
3055 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003056 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003057 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003058 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003059
3060 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003061}
3062
3063VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(
3064 VkDevice device,
3065 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003066 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003067 VkQueryPool* pQueryPool)
3068{
3069 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003070
Chia-I Wu69f40122015-10-26 21:10:41 +08003071 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003072
3073 PostCreateQueryPool(device, pQueryPool, result);
3074
3075 return result;
3076}
3077
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003078bool PostGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003079 VkDevice device,
3080 VkQueryPool queryPool,
3081 uint32_t startQuery,
3082 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003083 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003084 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003085 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003086 VkQueryResultFlags flags,
3087 VkResult result)
3088{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003089
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003090
3091
3092
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003093 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003094 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003095 }
3096
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003097
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003098 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003099 {
3100 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003101 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003102 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003103 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003104
3105 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003106}
3107
3108VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(
3109 VkDevice device,
3110 VkQueryPool queryPool,
3111 uint32_t startQuery,
3112 uint32_t queryCount,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003113 size_t dataSize,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003114 void* pData,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003115 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003116 VkQueryResultFlags flags)
3117{
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003118 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003119
Chia-I Wu1f6942d2015-10-26 18:36:20 +08003120 PostGetQueryPoolResults(device, queryPool, startQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003121
3122 return result;
3123}
3124
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003125bool PreCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003126 VkDevice device,
3127 const VkBufferCreateInfo* pCreateInfo)
3128{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003129 if(pCreateInfo != nullptr)
3130 {
3131 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003132 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003133 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003134 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003135 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003136 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003137 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3138 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003139 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003140 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003141 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003142 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003143 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003144 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003145 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003146 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003147 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003148
3149 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003150}
3151
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003152bool PostCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003153 VkDevice device,
3154 VkBuffer* pBuffer,
3155 VkResult result)
3156{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003157
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003158 if(pBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003159 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003160 }
3161
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003162 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003163 {
3164 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003165 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003166 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003167 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003168
3169 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003170}
3171
3172VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(
3173 VkDevice device,
3174 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003175 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003176 VkBuffer* pBuffer)
3177{
3178 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003179
Chia-I Wu69f40122015-10-26 21:10:41 +08003180 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003181
3182 PostCreateBuffer(device, pBuffer, result);
3183
3184 return result;
3185}
3186
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003187bool PreCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003188 VkDevice device,
3189 const VkBufferViewCreateInfo* pCreateInfo)
3190{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003191 if(pCreateInfo != nullptr)
3192 {
3193 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003194 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003195 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003196 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003197 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003198 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003199 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3200 pCreateInfo->format > VK_FORMAT_END_RANGE)
3201 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003202 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003203 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003204 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003205 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003206 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003207
3208 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003209}
3210
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003211bool PostCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003212 VkDevice device,
3213 VkBufferView* pView,
3214 VkResult result)
3215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003216
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003217 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003218 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003219 }
3220
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003221 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003222 {
3223 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003224 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003225 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003226 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003227
3228 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003229}
3230
3231VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(
3232 VkDevice device,
3233 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003234 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003235 VkBufferView* pView)
3236{
3237 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003238
Chia-I Wu69f40122015-10-26 21:10:41 +08003239 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003240
3241 PostCreateBufferView(device, pView, result);
3242
3243 return result;
3244}
3245
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003246bool PreCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003247 VkDevice device,
3248 const VkImageCreateInfo* pCreateInfo)
3249{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003250 if(pCreateInfo != nullptr)
3251 {
3252 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003253 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003254 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003255 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003256 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003257 }
3258 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3259 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3260 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003261 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003262 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003263 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003264 }
3265 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3266 pCreateInfo->format > VK_FORMAT_END_RANGE)
3267 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003268 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003269 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003270 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003271 }
3272 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3273 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3274 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003275 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003276 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003277 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003278 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003279 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3280 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003281 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003282 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3283 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003284 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003285 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003286 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003287 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003288 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003289 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003290
3291 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003292}
3293
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003294bool PostCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003295 VkDevice device,
3296 VkImage* pImage,
3297 VkResult result)
3298{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003299
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003300 if(pImage != nullptr)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003301 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003302 }
3303
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003304 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003305 {
3306 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003307 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003308 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003309 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003310
3311 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003312}
3313
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003314VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(
3315 VkDevice device,
3316 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003317 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003318 VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003319{
3320 PreCreateImage(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003321
Chia-I Wu69f40122015-10-26 21:10:41 +08003322 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003323
3324 PostCreateImage(device, pImage, result);
3325
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003326 return result;
3327}
3328
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003329bool PreGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003330 VkDevice device,
3331 const VkImageSubresource* pSubresource)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003332{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003333 if(pSubresource != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003334 {
Chia-I Wu195c9e12015-10-27 19:55:05 +08003335 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06003336 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003337 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003338 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu195c9e12015-10-27 19:55:05 +08003339 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003340 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003341 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003342 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003343
3344 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003345}
3346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003347bool PostGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003348 VkDevice device,
3349 VkImage image,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003350 VkSubresourceLayout* pLayout)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003351{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003352
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003353
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003354 if(pLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003355 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003356 }
3357
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003358 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003359}
3360
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003361VK_LAYER_EXPORT void VKAPI vkGetImageSubresourceLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003362 VkDevice device,
3363 VkImage image,
3364 const VkImageSubresource* pSubresource,
3365 VkSubresourceLayout* pLayout)
3366{
3367 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003368
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003369 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003370
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06003371 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003372}
3373
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003374bool PreCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003375 VkDevice device,
3376 const VkImageViewCreateInfo* pCreateInfo)
3377{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003378 if(pCreateInfo != nullptr)
3379 {
3380 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003381 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003382 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003383 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003384 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003385 }
3386 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3387 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3388 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003389 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003390 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003391 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003392 }
3393 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3394 pCreateInfo->format > VK_FORMAT_END_RANGE)
3395 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003396 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003397 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003398 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003399 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003400 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3401 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003402 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003403 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003404 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003405 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003406 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003407 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3408 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003409 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003410 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003411 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003412 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003413 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003414 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3415 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003416 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003417 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003418 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003419 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003420 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003421 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3422 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003423 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003424 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08003425 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003426 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003427 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003428 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003429
3430 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003431}
3432
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003433bool PostCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003434 VkDevice device,
3435 VkImageView* pView,
3436 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003437{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003438
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003439 if(pView != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003440 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003441 }
3442
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003443 if(result < VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003444 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003445 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003446 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003447 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003448 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003449
3450 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003451}
3452
3453VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(
3454 VkDevice device,
3455 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003456 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003457 VkImageView* pView)
3458{
3459 PreCreateImageView(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003460
Chia-I Wu69f40122015-10-26 21:10:41 +08003461 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003462
3463 PostCreateImageView(device, pView, result);
3464
3465 return result;
3466}
3467
Michael Lentine6715e522015-09-15 14:59:14 -05003468bool PreCreateShaderModule(
3469 VkDevice device,
3470 const VkShaderModuleCreateInfo* pCreateInfo)
3471{
3472 if(pCreateInfo) {
3473 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
3474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3475 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3476 return false;
3477 }
3478 if(!pCreateInfo->pCode) {
3479 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3480 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3481 return false;
3482 }
3483 } else {
3484 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3485 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3486 return false;
3487 }
3488
3489 return true;
3490}
3491
3492bool PostCreateShaderModule(
3493 VkDevice device,
3494 VkShaderModule* pShaderModule,
3495 VkResult result)
3496{
3497 if(result < VK_SUCCESS) {
3498 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003499 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine6715e522015-09-15 14:59:14 -05003500 return false;
3501 }
3502
3503 return true;
3504}
3505
3506VK_LAYER_EXPORT VkResult VKAPI vkCreateShaderModule(
3507 VkDevice device,
3508 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003509 const VkAllocationCallbacks* pAllocator,
Michael Lentine6715e522015-09-15 14:59:14 -05003510 VkShaderModule* pShaderModule)
3511{
3512 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wu69f40122015-10-26 21:10:41 +08003513 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine6715e522015-09-15 14:59:14 -05003514 PostCreateShaderModule(device, pShaderModule, result);
3515 return result;
3516}
3517
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003518bool PreCreatePipelineCache(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003519 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003520 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003521{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003522 if(pCreateInfo != nullptr)
3523 {
3524 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003525 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003526 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003527 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06003528 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003529 }
Chia-I Wu7e470702015-10-26 17:24:52 +08003530 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003531 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003532 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003533 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003534
3535 return true;
3536}
3537
3538bool PostCreatePipelineCache(
3539 VkDevice device,
3540 VkPipelineCache* pPipelineCache,
3541 VkResult result)
3542{
3543
3544 if(pPipelineCache != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003545 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003546 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003547
3548 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003549 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003550 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003551 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barboure307f582015-07-10 15:29:03 -06003552 return false;
3553 }
3554
3555 return true;
3556}
3557
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003558VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineCache(
Tony Barboure307f582015-07-10 15:29:03 -06003559 VkDevice device,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003560 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08003561 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003562 VkPipelineCache* pPipelineCache)
3563{
3564 PreCreatePipelineCache(device, pCreateInfo);
3565
Chia-I Wu69f40122015-10-26 21:10:41 +08003566 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003567
3568 PostCreatePipelineCache(device, pPipelineCache, result);
3569
3570 return result;
3571}
3572
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003573bool PostGetPipelineCacheData(
3574 VkDevice device,
3575 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003576 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003577 void* pData,
3578 VkResult result)
3579{
3580
3581
Chia-I Wu28c3c432015-10-26 19:17:06 +08003582 if(pDataSize != nullptr)
3583 {
3584 }
3585
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003586 if(pData != nullptr)
3587 {
3588 }
3589
3590 if(result < VK_SUCCESS)
3591 {
3592 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003593 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003594 return false;
3595 }
3596
3597 return true;
3598}
3599
3600VK_LAYER_EXPORT VkResult VKAPI vkGetPipelineCacheData(
3601 VkDevice device,
3602 VkPipelineCache pipelineCache,
Chia-I Wu28c3c432015-10-26 19:17:06 +08003603 size_t* pDataSize,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003604 void* pData)
3605{
Chia-I Wu28c3c432015-10-26 19:17:06 +08003606 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003607
Chia-I Wu28c3c432015-10-26 19:17:06 +08003608 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003609
3610 return result;
3611}
3612
3613bool PreMergePipelineCaches(
3614 VkDevice device,
3615 const VkPipelineCache* pSrcCaches)
3616{
3617 if(pSrcCaches != nullptr)
3618 {
3619 }
3620
3621 return true;
3622}
3623
3624bool PostMergePipelineCaches(
3625 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08003626 VkPipelineCache dstCache,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003627 uint32_t srcCacheCount,
3628 VkResult result)
3629{
3630
3631
3632
3633 if(result < VK_SUCCESS)
3634 {
3635 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003636 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003637 return false;
3638 }
3639
3640 return true;
3641}
3642
3643VK_LAYER_EXPORT VkResult VKAPI vkMergePipelineCaches(
3644 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08003645 VkPipelineCache dstCache,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003646 uint32_t srcCacheCount,
3647 const VkPipelineCache* pSrcCaches)
3648{
3649 PreMergePipelineCaches(device, pSrcCaches);
3650
Chia-I Wu1f851912015-10-27 18:04:07 +08003651 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003652
Chia-I Wu1f851912015-10-27 18:04:07 +08003653 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003654
3655 return result;
3656}
3657
3658bool PreCreateGraphicsPipelines(
3659 VkDevice device,
3660 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3661{
3662 if(pCreateInfos != nullptr)
3663 {
3664 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3665 {
3666 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3667 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3668 return false;
3669 }
3670 if(pCreateInfos->pStages != nullptr)
3671 {
3672 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3673 {
3674 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3675 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3676 return false;
3677 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003678 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3679 {
Chia-I Wu483e7702015-10-26 17:20:32 +08003680 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003681 {
3682 }
3683 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3684 {
3685 }
3686 }
3687 }
3688 if(pCreateInfos->pVertexInputState != nullptr)
3689 {
3690 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3691 {
3692 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3693 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3694 return false;
3695 }
3696 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3697 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08003698 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3699 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003700 {
3701 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003702 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003703 return false;
3704 }
3705 }
3706 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3707 {
3708 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3709 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3710 {
3711 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3712 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3713 return false;
3714 }
3715 }
3716 }
3717 if(pCreateInfos->pInputAssemblyState != nullptr)
3718 {
3719 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_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->pInputAssemblyState->sType, is an invalid enumerator");
3723 return false;
3724 }
3725 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3726 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3727 {
3728 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3729 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3730 return false;
3731 }
3732 }
3733 if(pCreateInfos->pTessellationState != nullptr)
3734 {
3735 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3736 {
3737 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3738 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3739 return false;
3740 }
3741 }
3742 if(pCreateInfos->pViewportState != nullptr)
3743 {
3744 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3745 {
3746 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3747 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3748 return false;
3749 }
3750 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003751 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003752 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08003753 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003754 {
3755 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003756 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003757 return false;
3758 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003759 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3760 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003761 {
3762 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003763 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003764 return false;
3765 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003766 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003767 {
3768 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003769 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003770 return false;
3771 }
Chia-I Wu1f851912015-10-27 18:04:07 +08003772 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3773 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003774 {
3775 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08003776 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003777 return false;
3778 }
3779 }
3780 if(pCreateInfos->pMultisampleState != nullptr)
3781 {
3782 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3783 {
3784 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3785 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3786 return false;
3787 }
3788 }
3789 if(pCreateInfos->pDepthStencilState != nullptr)
3790 {
3791 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3792 {
3793 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3794 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3795 return false;
3796 }
3797 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3798 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3799 {
3800 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3801 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3802 return false;
3803 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003804 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3805 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003806 {
3807 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003808 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003809 return false;
3810 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003811 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3812 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003813 {
3814 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003815 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003816 return false;
3817 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003818 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3819 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003820 {
3821 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003822 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003823 return false;
3824 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003825 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3826 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003827 {
3828 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003829 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003830 return false;
3831 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003832 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3833 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003834 {
3835 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003836 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003837 return false;
3838 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003839 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3840 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003841 {
3842 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003843 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003844 return false;
3845 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003846 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3847 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003848 {
3849 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003850 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003851 return false;
3852 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003853 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3854 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003855 {
3856 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003857 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003858 return false;
3859 }
3860 }
3861 if(pCreateInfos->pColorBlendState != nullptr)
3862 {
3863 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3864 {
3865 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3866 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3867 return false;
3868 }
Michael Lentine6d033602015-10-06 14:55:54 -07003869 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3870 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003871 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3872 {
3873 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3874 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3875 return false;
3876 }
Michael Lentined833b882015-09-15 14:59:56 -05003877 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003878 {
Chia-I Wu4291d882015-10-27 19:00:15 +08003879 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3880 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003881 {
3882 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003883 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003884 return false;
3885 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003886 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3887 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003888 {
3889 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003890 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003891 return false;
3892 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003893 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3894 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003895 {
3896 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003897 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003898 return false;
3899 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003900 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3901 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003902 {
3903 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003904 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003905 return false;
3906 }
Chia-I Wu4291d882015-10-27 19:00:15 +08003907 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3908 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003909 {
3910 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003911 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003912 return false;
3913 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08003914 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3915 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003916 {
3917 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08003918 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003919 return false;
3920 }
3921 }
3922 }
Jeremy Hayes4fc32342015-07-31 14:16:20 -06003923 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3924 {
3925 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3926 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3927 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003928 }
3929
3930 return true;
3931}
3932
3933bool PostCreateGraphicsPipelines(
3934 VkDevice device,
3935 VkPipelineCache pipelineCache,
3936 uint32_t count,
3937 VkPipeline* pPipelines,
3938 VkResult result)
3939{
3940
3941
3942
3943 if(pPipelines != nullptr)
3944 {
3945 }
3946
3947 if(result < VK_SUCCESS)
3948 {
3949 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08003950 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003951 return false;
3952 }
3953
3954 return true;
3955}
3956
3957VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelines(
3958 VkDevice device,
3959 VkPipelineCache pipelineCache,
3960 uint32_t count,
3961 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu1f851912015-10-27 18:04:07 +08003962 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003963 VkPipeline* pPipelines)
3964{
3965 PreCreateGraphicsPipelines(device, pCreateInfos);
3966
Chia-I Wu69f40122015-10-26 21:10:41 +08003967 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003968
3969 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3970
3971 return result;
3972}
3973
3974bool PreCreateComputePipelines(
3975 VkDevice device,
3976 const VkComputePipelineCreateInfo* pCreateInfos)
3977{
3978 if(pCreateInfos != nullptr)
3979 {
3980 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
3981 {
3982 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3983 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3984 return false;
3985 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06003986 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003987 {
3988 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
3989 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
3990 return false;
3991 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06003992 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003993 {
Chia-I Wu483e7702015-10-26 17:20:32 +08003994 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003995 {
3996 }
Courtney Goeltzenleuchter7db1fed2015-09-02 13:07:51 -06003997 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003998 {
3999 }
4000 }
4001 }
4002
4003 return true;
4004}
4005
4006bool PostCreateComputePipelines(
4007 VkDevice device,
4008 VkPipelineCache pipelineCache,
4009 uint32_t count,
4010 VkPipeline* pPipelines,
4011 VkResult result)
4012{
4013
4014
4015
4016 if(pPipelines != nullptr)
4017 {
4018 }
4019
4020 if(result < VK_SUCCESS)
4021 {
4022 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004023 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004024 return false;
4025 }
4026
4027 return true;
4028}
4029
4030VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipelines(
4031 VkDevice device,
4032 VkPipelineCache pipelineCache,
4033 uint32_t count,
4034 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu1f851912015-10-27 18:04:07 +08004035 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004036 VkPipeline* pPipelines)
4037{
4038 PreCreateComputePipelines(device, pCreateInfos);
4039
Chia-I Wu69f40122015-10-26 21:10:41 +08004040 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004041
4042 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4043
4044 return result;
4045}
4046
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004047bool PreCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004048 VkDevice device,
4049 const VkPipelineLayoutCreateInfo* pCreateInfo)
4050{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004051 if(pCreateInfo != nullptr)
4052 {
4053 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004054 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004055 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004056 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4057 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004058 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004059 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004060 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004061 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004062 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004063 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004064 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004065 }
4066
4067 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004068}
4069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004070bool PostCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004071 VkDevice device,
4072 VkPipelineLayout* pPipelineLayout,
4073 VkResult result)
4074{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004075
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004076 if(pPipelineLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004077 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004078 }
4079
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004080 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004081 {
4082 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004083 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004084 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004085 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004086
4087 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004088}
4089
4090VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(
4091 VkDevice device,
4092 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004093 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004094 VkPipelineLayout* pPipelineLayout)
4095{
4096 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004097
Chia-I Wu69f40122015-10-26 21:10:41 +08004098 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004099
4100 PostCreatePipelineLayout(device, pPipelineLayout, result);
4101
4102 return result;
4103}
4104
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004105bool PreCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004106 VkDevice device,
4107 const VkSamplerCreateInfo* pCreateInfo)
4108{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004109 if(pCreateInfo != nullptr)
4110 {
4111 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004112 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004113 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004114 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004115 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004116 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004117 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4118 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004119 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004120 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004121 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004122 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004123 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004124 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4125 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004126 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004127 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004128 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004129 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004130 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004131 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4132 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004133 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004134 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08004135 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004136 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004137 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004138 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4139 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004140 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004141 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004142 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004143 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004144 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004145 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4146 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004147 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004148 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004149 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004150 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004151 }
Chia-I Wu3603b082015-10-26 16:49:32 +08004152 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4153 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004154 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004155 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter51624412015-09-10 14:08:50 -06004156 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004157 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004158 }
4159 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4160 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4161 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004162 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004163 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004164 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004165 }
4166 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4167 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4168 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004169 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004170 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004171 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004172 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004173 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004174
4175 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004176}
4177
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004178bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004179 VkDevice device,
4180 VkSampler* pSampler,
4181 VkResult result)
4182{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004183
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004184 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004185 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004186 }
4187
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004188 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004189 {
4190 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004191 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004192 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004193 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004194
4195 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004196}
4197
4198VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(
4199 VkDevice device,
4200 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004201 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004202 VkSampler* pSampler)
4203{
4204 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004205
Chia-I Wu69f40122015-10-26 21:10:41 +08004206 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004207
4208 PostCreateSampler(device, pSampler, result);
4209
4210 return result;
4211}
4212
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004213bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004214 VkDevice device,
4215 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4216{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004217 if(pCreateInfo != nullptr)
4218 {
4219 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004220 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004221 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004222 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004223 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004224 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004225 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004226 {
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004227 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4228 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004229 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004230 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004231 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004232 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004233 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004234 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004235 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004236 }
4237 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004239
4240 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241}
4242
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004243bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004244 VkDevice device,
4245 VkDescriptorSetLayout* pSetLayout,
4246 VkResult result)
4247{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004248
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004249 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004250 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004251 }
4252
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004253 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004254 {
4255 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004256 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004257 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004258 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004259
4260 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004261}
4262
4263VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(
4264 VkDevice device,
4265 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004266 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004267 VkDescriptorSetLayout* pSetLayout)
4268{
4269 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004270
Chia-I Wu69f40122015-10-26 21:10:41 +08004271 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004272
4273 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4274
4275 return result;
4276}
4277
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004278bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004279 VkDevice device,
4280 const VkDescriptorPoolCreateInfo* pCreateInfo)
4281{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004282 if(pCreateInfo != nullptr)
4283 {
4284 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004285 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004286 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004287 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004288 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004289 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08004290 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004291 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08004292 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4293 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004294 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004295 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004296 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004297 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004298 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004299 }
4300 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004301
4302 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004303}
4304
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004305bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004306 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004307 uint32_t maxSets,
4308 VkDescriptorPool* pDescriptorPool,
4309 VkResult result)
4310{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004311
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004312 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004314 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004315 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004316 }
4317
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004318 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004319 {
4320 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004321 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004322 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004323 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004324
4325 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004326}
4327
4328VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(
4329 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004330 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004331 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004332 VkDescriptorPool* pDescriptorPool)
4333{
4334 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004335
Chia-I Wu69f40122015-10-26 21:10:41 +08004336 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004337
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004338 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004339
4340 return result;
4341}
4342
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004343bool PostResetDescriptorPool(
4344 VkDevice device,
4345 VkDescriptorPool descriptorPool,
4346 VkResult result)
4347{
4348
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004349
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004350 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004351 {
4352 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004353 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004354 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004355 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004356
4357 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004358}
4359
4360VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(
4361 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004362 VkDescriptorPool descriptorPool,
4363 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004365 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004366
4367 PostResetDescriptorPool(device, descriptorPool, result);
4368
4369 return result;
4370}
4371
Chia-I Wu1f851912015-10-27 18:04:07 +08004372bool PreAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004373 VkDevice device,
4374 const VkDescriptorSetLayout* pSetLayouts)
4375{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004376 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004377 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004378 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004379
4380 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004381}
4382
Chia-I Wu1f851912015-10-27 18:04:07 +08004383bool PostAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004384 VkDevice device,
4385 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004386 uint32_t count,
4387 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004388 VkResult result)
4389{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004390
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004391
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004392 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004394 }
4395
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004396 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004397 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004398 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004399 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004400 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004401 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004402
4403 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004404}
4405
Chia-I Wu1f851912015-10-27 18:04:07 +08004406VK_LAYER_EXPORT VkResult VKAPI vkAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004407 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004408 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004409 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004410{
Chia-I Wu1f851912015-10-27 18:04:07 +08004411 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004412
Chia-I Wu1f851912015-10-27 18:04:07 +08004413 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004414
Chia-I Wu1f851912015-10-27 18:04:07 +08004415 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004416
4417 return result;
4418}
4419
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004420bool PreFreeDescriptorSets(
4421 VkDevice device,
4422 const VkDescriptorSet* pDescriptorSets)
4423{
4424 if(pDescriptorSets != nullptr)
4425 {
4426 }
4427
4428 return true;
4429}
4430
4431bool PostFreeDescriptorSets(
4432 VkDevice device,
4433 VkDescriptorPool descriptorPool,
4434 uint32_t count,
4435 VkResult result)
4436{
4437
4438
4439
4440 if(result < VK_SUCCESS)
4441 {
4442 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004443 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004444 return false;
4445 }
4446
4447 return true;
4448}
4449
4450VK_LAYER_EXPORT VkResult VKAPI vkFreeDescriptorSets(
4451 VkDevice device,
4452 VkDescriptorPool descriptorPool,
4453 uint32_t count,
4454 const VkDescriptorSet* pDescriptorSets)
4455{
4456 PreFreeDescriptorSets(device, pDescriptorSets);
4457
4458 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4459
4460 PostFreeDescriptorSets(device, descriptorPool, count, result);
4461
4462 return result;
4463}
4464
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004465bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004466 VkDevice device,
4467 const VkWriteDescriptorSet* pDescriptorWrites,
4468 const VkCopyDescriptorSet* pDescriptorCopies)
4469{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004470 if(pDescriptorWrites != nullptr)
4471 {
4472 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004473 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004474 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004475 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004476 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004477 }
4478 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4479 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4480 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004481 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004482 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004483 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004484 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004485 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4486 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4487 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004488 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004489 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4490 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004491 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004492 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004493 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004494 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004495 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004496 }
4497 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004499 if(pDescriptorCopies != nullptr)
4500 {
4501 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004502 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004503 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004504 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004505 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004506 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004507 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004508
4509 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510}
4511
Mark Lobodzinski67b42b72015-09-07 13:59:43 -06004512VK_LAYER_EXPORT void VKAPI vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004513 VkDevice device,
Chia-I Wu483e7702015-10-26 17:20:32 +08004514 uint32_t descriptorWriteCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004515 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu483e7702015-10-26 17:20:32 +08004516 uint32_t descriptorCopyCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004517 const VkCopyDescriptorSet* pDescriptorCopies)
4518{
4519 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004520
Chia-I Wu483e7702015-10-26 17:20:32 +08004521 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004522}
4523
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004524bool PreCreateFramebuffer(
4525 VkDevice device,
4526 const VkFramebufferCreateInfo* pCreateInfo)
4527{
4528 if(pCreateInfo != nullptr)
4529 {
4530 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4531 {
4532 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4533 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4534 return false;
4535 }
4536 if(pCreateInfo->pAttachments != nullptr)
4537 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004538 }
4539 }
4540
4541 return true;
4542}
4543
4544bool PostCreateFramebuffer(
4545 VkDevice device,
4546 VkFramebuffer* pFramebuffer,
4547 VkResult result)
4548{
4549
4550 if(pFramebuffer != nullptr)
4551 {
4552 }
4553
4554 if(result < VK_SUCCESS)
4555 {
4556 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004557 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004558 return false;
4559 }
4560
4561 return true;
4562}
4563
4564VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(
4565 VkDevice device,
4566 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004567 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004568 VkFramebuffer* pFramebuffer)
4569{
4570 PreCreateFramebuffer(device, pCreateInfo);
4571
Chia-I Wu69f40122015-10-26 21:10:41 +08004572 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004573
4574 PostCreateFramebuffer(device, pFramebuffer, result);
4575
4576 return result;
4577}
4578
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004579bool PreCreateRenderPass(
4580 VkDevice device,
4581 const VkRenderPassCreateInfo* pCreateInfo)
4582{
4583 if(pCreateInfo != nullptr)
4584 {
4585 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4586 {
4587 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4588 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4589 return false;
4590 }
4591 if(pCreateInfo->pAttachments != nullptr)
4592 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004593 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4594 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4595 {
4596 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4597 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4598 return false;
4599 }
4600 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4601 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4602 {
4603 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4604 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4605 return false;
4606 }
4607 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4608 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4609 {
4610 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4611 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4612 return false;
4613 }
4614 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4615 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4616 {
4617 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4618 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4619 return false;
4620 }
4621 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4622 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4623 {
4624 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4625 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4626 return false;
4627 }
4628 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4629 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4630 {
4631 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4632 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4633 return false;
4634 }
4635 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4636 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4637 {
4638 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4639 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4640 return false;
4641 }
4642 }
4643 if(pCreateInfo->pSubpasses != nullptr)
4644 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004645 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4646 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4647 {
4648 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4649 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4650 return false;
4651 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004652 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004653 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004654 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4655 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004656 {
4657 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004658 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004659 return false;
4660 }
4661 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004662 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004663 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004664 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4665 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004666 {
4667 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004668 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004669 return false;
4670 }
4671 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004672 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004673 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004674 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4675 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 {
4677 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004678 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004679 return false;
4680 }
4681 }
Chia-I Wuce532f72015-10-26 17:32:47 +08004682 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4683 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4684 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004685 {
4686 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuce532f72015-10-26 17:32:47 +08004687 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004688 return false;
4689 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004690 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004692 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4693 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004694 {
4695 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004696 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004697 return false;
4698 }
4699 }
4700 }
4701 if(pCreateInfo->pDependencies != nullptr)
4702 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004703 }
4704 }
4705
4706 return true;
4707}
4708
4709bool PostCreateRenderPass(
4710 VkDevice device,
4711 VkRenderPass* pRenderPass,
4712 VkResult result)
4713{
4714
4715 if(pRenderPass != nullptr)
4716 {
4717 }
4718
4719 if(result < VK_SUCCESS)
4720 {
4721 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004722 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004723 return false;
4724 }
4725
4726 return true;
4727}
4728
4729VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(
4730 VkDevice device,
4731 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004732 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004733 VkRenderPass* pRenderPass)
4734{
4735 PreCreateRenderPass(device, pCreateInfo);
4736
Chia-I Wu69f40122015-10-26 21:10:41 +08004737 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004738
4739 PostCreateRenderPass(device, pRenderPass, result);
4740
4741 return result;
4742}
4743
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004744bool PostGetRenderAreaGranularity(
4745 VkDevice device,
4746 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004747 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004748{
4749
4750
4751 if(pGranularity != nullptr)
4752 {
4753 }
4754
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004755 return true;
4756}
4757
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004758VK_LAYER_EXPORT void VKAPI vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004759 VkDevice device,
4760 VkRenderPass renderPass,
4761 VkExtent2D* pGranularity)
4762{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004763 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004764
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004765 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004766}
4767
4768bool PreCreateCommandPool(
4769 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004770 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004771{
4772 if(pCreateInfo != nullptr)
4773 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004774 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004775 {
4776 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
4777 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4778 return false;
4779 }
4780 }
4781
4782 return true;
4783}
4784
4785bool PostCreateCommandPool(
4786 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004787 VkCommandPool* pCommandPool,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004788 VkResult result)
4789{
4790
Chia-I Wu1f851912015-10-27 18:04:07 +08004791 if(pCommandPool != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004792 {
4793 }
4794
4795 if(result < VK_SUCCESS)
4796 {
4797 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004798 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004799 return false;
4800 }
4801
4802 return true;
4803}
4804
4805VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandPool(
4806 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004807 const VkCommandPoolCreateInfo* pCreateInfo,
4808 const VkAllocationCallbacks* pAllocator,
4809 VkCommandPool* pCommandPool)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004810{
4811 PreCreateCommandPool(device, pCreateInfo);
4812
Chia-I Wu1f851912015-10-27 18:04:07 +08004813 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004814
Chia-I Wu1f851912015-10-27 18:04:07 +08004815 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004816
4817 return result;
4818}
4819
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004820bool PostResetCommandPool(
4821 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004822 VkCommandPool commandPool,
4823 VkCommandPoolResetFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004824 VkResult result)
4825{
4826
4827
4828
4829 if(result < VK_SUCCESS)
4830 {
4831 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004832 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004833 return false;
4834 }
4835
4836 return true;
4837}
4838
4839VK_LAYER_EXPORT VkResult VKAPI vkResetCommandPool(
4840 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004841 VkCommandPool commandPool,
4842 VkCommandPoolResetFlags flags)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004843{
Chia-I Wu1f851912015-10-27 18:04:07 +08004844 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004845
Chia-I Wu1f851912015-10-27 18:04:07 +08004846 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004847
4848 return result;
4849}
4850
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004851bool PreCreateCommandBuffer(
4852 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004853 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004854{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004855 if(pCreateInfo != nullptr)
4856 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004857 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOC_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004858 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004859 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004860 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004861 return false;
4862 }
Chia-I Wu1f851912015-10-27 18:04:07 +08004863 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4864 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004865 {
4866 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004867 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004868 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004869 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004870 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004871
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004872 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004873}
4874
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004875bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004876 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004877 VkCommandBuffer* pCommandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004878 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004879{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004880
Chia-I Wu1f851912015-10-27 18:04:07 +08004881 if(pCommandBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004882 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004883 }
4884
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004885 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004886 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004887 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004888 log_msg(mdd(device), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004889 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004890 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004891
4892 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004893}
4894
Chia-I Wu1f851912015-10-27 18:04:07 +08004895VK_LAYER_EXPORT VkResult VKAPI vkAllocateCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004896 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004897 const VkCommandBufferAllocateInfo* pCreateInfo,
4898 VkCommandBuffer* pCommandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004899{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004900 PreCreateCommandBuffer(device, pCreateInfo);
4901
Chia-I Wu1f851912015-10-27 18:04:07 +08004902 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004903
Chia-I Wu1f851912015-10-27 18:04:07 +08004904 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004905
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004906 return result;
4907}
4908
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004909bool PreBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004910 VkCommandBuffer commandBuffer,
4911 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004912{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004913 if(pBeginInfo != nullptr)
4914 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004915 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004916 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004917 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004918 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004919 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004920 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004921 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004922
4923 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004924}
4925
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004926bool PostBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004927 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004928 VkResult result)
4929{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004930
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004931 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004932 {
4933 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004934 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004936 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004937
4938 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004939}
4940
4941VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004942 VkCommandBuffer commandBuffer,
4943 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004944{
Chia-I Wu1f851912015-10-27 18:04:07 +08004945 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004946
Chia-I Wu1f851912015-10-27 18:04:07 +08004947 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004948
Chia-I Wu1f851912015-10-27 18:04:07 +08004949 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004950
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004951 return result;
4952}
4953
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004954bool PostEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004955 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004956 VkResult result)
4957{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004958
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004959 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004960 {
4961 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004962 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004963 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004964 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004965
4966 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004967}
4968
4969VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004970 VkCommandBuffer commandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004971{
Chia-I Wu1f851912015-10-27 18:04:07 +08004972 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004973
Chia-I Wu1f851912015-10-27 18:04:07 +08004974 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004975
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004976 return result;
4977}
4978
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004979bool PostResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004980 VkCommandBuffer commandBuffer,
4981 VkCommandBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004982 VkResult result)
4983{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004984
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004985
4986 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004987 {
4988 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Michael Lentinecbc4a5e2015-11-03 16:19:46 -08004989 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004990 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004991 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004992
4993 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004994}
4995
4996VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004997 VkCommandBuffer commandBuffer,
4998 VkCommandBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004999{
Chia-I Wu1f851912015-10-27 18:04:07 +08005000 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005001
Chia-I Wu1f851912015-10-27 18:04:07 +08005002 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005003
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005004 return result;
5005}
5006
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005007bool PostCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005008 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005009 VkPipelineBindPoint pipelineBindPoint,
5010 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005011{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005012
5013 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5014 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5015 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005016 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005017 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005018 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005019 }
5020
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005021
5022 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005023}
5024
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005025VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005026 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005027 VkPipelineBindPoint pipelineBindPoint,
5028 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005029{
Chia-I Wu1f851912015-10-27 18:04:07 +08005030 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005031
Chia-I Wu1f851912015-10-27 18:04:07 +08005032 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005033}
5034
Chia-I Wu1f851912015-10-27 18:04:07 +08005035VK_LAYER_EXPORT void VKAPI vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005036{
Chia-I Wu1f851912015-10-27 18:04:07 +08005037 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005038}
5039
Chia-I Wu1f851912015-10-27 18:04:07 +08005040VK_LAYER_EXPORT void VKAPI vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005041{
Chia-I Wu1f851912015-10-27 18:04:07 +08005042 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005043}
5044
Chia-I Wu1f851912015-10-27 18:04:07 +08005045VK_LAYER_EXPORT void VKAPI vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005046{
Chia-I Wu1f851912015-10-27 18:04:07 +08005047 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005048}
5049
Chia-I Wu1f851912015-10-27 18:04:07 +08005050VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005051{
Chia-I Wu1f851912015-10-27 18:04:07 +08005052 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005053}
5054
Chia-I Wu1f851912015-10-27 18:04:07 +08005055VK_LAYER_EXPORT void VKAPI vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005056{
Chia-I Wu1f851912015-10-27 18:04:07 +08005057 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northropf5bd2252015-08-17 11:10:49 -06005058}
5059
Chia-I Wu1f851912015-10-27 18:04:07 +08005060VK_LAYER_EXPORT void VKAPI vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005061{
Chia-I Wu1f851912015-10-27 18:04:07 +08005062 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005063}
5064
Chia-I Wuc51b1212015-10-27 19:25:11 +08005065VK_LAYER_EXPORT void VKAPI vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005066{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005067 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005068}
5069
Chia-I Wuc51b1212015-10-27 19:25:11 +08005070VK_LAYER_EXPORT void VKAPI vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005071{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005072 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005073}
5074
Chia-I Wuc51b1212015-10-27 19:25:11 +08005075VK_LAYER_EXPORT void VKAPI vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005076{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005077 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005078}
5079
5080bool PreCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005081 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005082 const VkDescriptorSet* pDescriptorSets,
5083 const uint32_t* pDynamicOffsets)
5084{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005085 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005086 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005087 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005088
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005089 if(pDynamicOffsets != nullptr)
5090 {
5091 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005092
5093 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005094}
5095
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005096bool PostCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005097 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005098 VkPipelineBindPoint pipelineBindPoint,
5099 VkPipelineLayout layout,
5100 uint32_t firstSet,
5101 uint32_t setCount,
5102 uint32_t dynamicOffsetCount)
5103{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005104
5105 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5106 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5107 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005108 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005109 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005110 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005111 }
5112
5113
5114
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005115
5116
5117 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005118}
5119
5120VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005121 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005122 VkPipelineBindPoint pipelineBindPoint,
5123 VkPipelineLayout layout,
5124 uint32_t firstSet,
5125 uint32_t setCount,
5126 const VkDescriptorSet* pDescriptorSets,
5127 uint32_t dynamicOffsetCount,
5128 const uint32_t* pDynamicOffsets)
5129{
Chia-I Wu1f851912015-10-27 18:04:07 +08005130 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005131
Chia-I Wu1f851912015-10-27 18:04:07 +08005132 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005133
Chia-I Wu1f851912015-10-27 18:04:07 +08005134 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005135}
5136
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005137bool PostCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005138 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005139 VkBuffer buffer,
5140 VkDeviceSize offset,
5141 VkIndexType indexType)
5142{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005143
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005144
5145
5146 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5147 indexType > VK_INDEX_TYPE_END_RANGE)
5148 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005149 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005150 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005151 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005152 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005153
5154 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005155}
5156
5157VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005158 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005159 VkBuffer buffer,
5160 VkDeviceSize offset,
5161 VkIndexType indexType)
5162{
Chia-I Wu1f851912015-10-27 18:04:07 +08005163 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005164
Chia-I Wu1f851912015-10-27 18:04:07 +08005165 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005166}
5167
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005168bool PreCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005169 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005170 const VkBuffer* pBuffers,
5171 const VkDeviceSize* pOffsets)
5172{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005173 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005174 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005175 }
5176
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005177 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005178 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005179 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005180
5181 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005182}
5183
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005184bool PostCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005185 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005186 uint32_t startBinding,
5187 uint32_t bindingCount)
5188{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189
5190
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005191
5192 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005193}
5194
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06005195VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005196 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005197 uint32_t startBinding,
5198 uint32_t bindingCount,
5199 const VkBuffer* pBuffers,
5200 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005201{
Chia-I Wu1f851912015-10-27 18:04:07 +08005202 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005203
Chia-I Wu1f851912015-10-27 18:04:07 +08005204 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005205
Chia-I Wu1f851912015-10-27 18:04:07 +08005206 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005207}
5208
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005209bool PostCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005210 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005211 uint32_t firstVertex,
5212 uint32_t vertexCount,
5213 uint32_t firstInstance,
5214 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005216
5217
5218
5219
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005220
5221 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005222}
5223
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005224VK_LAYER_EXPORT void VKAPI vkCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005225 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005226 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005227 uint32_t instanceCount,
5228 uint32_t firstVertex,
5229 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005230{
Chia-I Wu1f851912015-10-27 18:04:07 +08005231 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005232
Chia-I Wu1f851912015-10-27 18:04:07 +08005233 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005234}
5235
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005236bool PostCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005237 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005238 uint32_t firstIndex,
5239 uint32_t indexCount,
5240 int32_t vertexOffset,
5241 uint32_t firstInstance,
5242 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005243{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005244
5245
5246
5247
5248
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005249
5250 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005251}
5252
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005253VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005254 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005255 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005256 uint32_t instanceCount,
5257 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005258 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005259 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005260{
Chia-I Wu1f851912015-10-27 18:04:07 +08005261 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005262
Chia-I Wu1f851912015-10-27 18:04:07 +08005263 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005264}
5265
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005266bool PostCmdDrawIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005267 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005268 VkBuffer buffer,
5269 VkDeviceSize offset,
5270 uint32_t count,
5271 uint32_t stride)
5272{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005273
5274
5275
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005276
5277
5278 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005279}
5280
5281VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005282 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005283 VkBuffer buffer,
5284 VkDeviceSize offset,
5285 uint32_t count,
5286 uint32_t stride)
5287{
Chia-I Wu1f851912015-10-27 18:04:07 +08005288 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005289
Chia-I Wu1f851912015-10-27 18:04:07 +08005290 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005291}
5292
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005293bool PostCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005294 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005295 VkBuffer buffer,
5296 VkDeviceSize offset,
5297 uint32_t count,
5298 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005299{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005300
5301
5302
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303
5304
5305 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005306}
5307
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005308VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005309 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005310 VkBuffer buffer,
5311 VkDeviceSize offset,
5312 uint32_t count,
5313 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005314{
Chia-I Wu1f851912015-10-27 18:04:07 +08005315 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316
Chia-I Wu1f851912015-10-27 18:04:07 +08005317 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318}
5319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005320bool PostCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005321 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005322 uint32_t x,
5323 uint32_t y,
5324 uint32_t z)
5325{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005326
5327
5328
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005329
5330 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005331}
5332
5333VK_LAYER_EXPORT void VKAPI vkCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005334 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005335 uint32_t x,
5336 uint32_t y,
5337 uint32_t z)
5338{
Chia-I Wu1f851912015-10-27 18:04:07 +08005339 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005340
Chia-I Wu1f851912015-10-27 18:04:07 +08005341 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005342}
5343
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005344bool PostCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005345 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005346 VkBuffer buffer,
5347 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005348{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005349
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005350
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005351
5352 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005353}
5354
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005355VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005356 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005357 VkBuffer buffer,
5358 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005359{
Chia-I Wu1f851912015-10-27 18:04:07 +08005360 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005361
Chia-I Wu1f851912015-10-27 18:04:07 +08005362 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005363}
5364
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005365bool PreCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005366 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005368{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005369 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005370 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005371 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005372
5373 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005374}
5375
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005376bool PostCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005377 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005378 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005379 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005380 uint32_t regionCount)
5381{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005382
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005383
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005384
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005385
5386 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005387}
5388
5389VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005390 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005391 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005392 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005393 uint32_t regionCount,
5394 const VkBufferCopy* pRegions)
5395{
Chia-I Wu1f851912015-10-27 18:04:07 +08005396 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005397
Chia-I Wu1f851912015-10-27 18:04:07 +08005398 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005399
Chia-I Wu1f851912015-10-27 18:04:07 +08005400 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401}
5402
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403bool PreCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005404 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405 const VkImageCopy* pRegions)
5406{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005407 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005408 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005409 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005410 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005411 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005412 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005413 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005414 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005415 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005416 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005417 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005418 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005419 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005420 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005421 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005422 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005423 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005424
5425 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005426}
5427
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005428bool PostCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005429 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005430 VkImage srcImage,
5431 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005432 VkImage dstImage,
5433 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005434 uint32_t regionCount)
5435{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005436
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005437
5438 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5439 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5440 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005441 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005442 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005443 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005444 }
5445
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005446
Chia-I Wu1f851912015-10-27 18:04:07 +08005447 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5448 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005449 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005450 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5451 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005452 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453 }
5454
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005455
5456 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005457}
5458
5459VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005460 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 VkImage srcImage,
5462 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005463 VkImage dstImage,
5464 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005465 uint32_t regionCount,
5466 const VkImageCopy* pRegions)
5467{
Chia-I Wu1f851912015-10-27 18:04:07 +08005468 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005469
Chia-I Wu1f851912015-10-27 18:04:07 +08005470 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005471
Chia-I Wu1f851912015-10-27 18:04:07 +08005472 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473}
5474
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005475bool PreCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005476 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005477 const VkImageBlit* pRegions)
5478{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005479 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005480 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005481 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005482 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005483 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005484 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005485 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005486 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005487 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005488 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005489 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005490 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005491 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005492 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005493 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005494 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005495 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496
5497 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498}
5499
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005500bool PostCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005501 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005502 VkImage srcImage,
5503 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005504 VkImage dstImage,
5505 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005506 uint32_t regionCount,
Chia-I Wu3603b082015-10-26 16:49:32 +08005507 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005508{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005509
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005510
5511 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5512 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5513 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005514 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005515 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005516 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005517 }
5518
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005519
Chia-I Wu1f851912015-10-27 18:04:07 +08005520 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5521 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005522 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005523 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5524 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005525 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005526 }
5527
5528
Chia-I Wu3603b082015-10-26 16:49:32 +08005529 if(filter < VK_FILTER_BEGIN_RANGE ||
5530 filter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005531 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005532 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08005533 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005534 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005535 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005536
5537 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005538}
5539
5540VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005541 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005542 VkImage srcImage,
5543 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005544 VkImage dstImage,
5545 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005546 uint32_t regionCount,
5547 const VkImageBlit* pRegions,
Chia-I Wu3603b082015-10-26 16:49:32 +08005548 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005549{
Chia-I Wu1f851912015-10-27 18:04:07 +08005550 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005551
Chia-I Wu1f851912015-10-27 18:04:07 +08005552 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553
Chia-I Wu1f851912015-10-27 18:04:07 +08005554 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005555}
5556
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005557bool PreCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005558 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005559 const VkBufferImageCopy* pRegions)
5560{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005561 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005562 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005563 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005564 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005566 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005567 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005568 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005569 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005570 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005571
5572 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573}
5574
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005575bool PostCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005576 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005577 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005578 VkImage dstImage,
5579 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580 uint32_t regionCount)
5581{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005582
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005583
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005584
Chia-I Wu1f851912015-10-27 18:04:07 +08005585 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5586 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005587 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005588 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5589 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005590 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005591 }
5592
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005593
5594 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005595}
5596
5597VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005598 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005599 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005600 VkImage dstImage,
5601 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005602 uint32_t regionCount,
5603 const VkBufferImageCopy* pRegions)
5604{
Chia-I Wu1f851912015-10-27 18:04:07 +08005605 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005606
Chia-I Wu1f851912015-10-27 18:04:07 +08005607 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005608
Chia-I Wu1f851912015-10-27 18:04:07 +08005609 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005610}
5611
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005612bool PreCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005613 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005614 const VkBufferImageCopy* pRegions)
5615{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005616 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005617 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005618 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005619 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005620 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005621 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005622 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005623 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005624 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005625 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005626
5627 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005628}
5629
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005630bool PostCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005631 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005632 VkImage srcImage,
5633 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005634 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635 uint32_t regionCount)
5636{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005637
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005638
5639 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5640 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5641 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005642 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005643 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005644 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005645 }
5646
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005647
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005648
5649 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005650}
5651
5652VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005653 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005654 VkImage srcImage,
5655 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005656 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005657 uint32_t regionCount,
5658 const VkBufferImageCopy* pRegions)
5659{
Chia-I Wu1f851912015-10-27 18:04:07 +08005660 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005661
Chia-I Wu1f851912015-10-27 18:04:07 +08005662 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005663
Chia-I Wu1f851912015-10-27 18:04:07 +08005664 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665}
5666
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005667bool PreCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005668 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005669 const uint32_t* pData)
5670{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005671 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005673 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005674
5675 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005676}
5677
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005678bool PostCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005679 VkCommandBuffer commandBuffer,
5680 VkBuffer dstBuffer,
5681 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005682 VkDeviceSize dataSize)
5683{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684
5685
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005686
5687
5688 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005689}
5690
5691VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005692 VkCommandBuffer commandBuffer,
5693 VkBuffer dstBuffer,
5694 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005695 VkDeviceSize dataSize,
5696 const uint32_t* pData)
5697{
Chia-I Wu1f851912015-10-27 18:04:07 +08005698 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005699
Chia-I Wu1f851912015-10-27 18:04:07 +08005700 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005701
Chia-I Wu1f851912015-10-27 18:04:07 +08005702 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703}
5704
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005705bool PostCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005706 VkCommandBuffer commandBuffer,
5707 VkBuffer dstBuffer,
5708 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005709 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005710 uint32_t data)
5711{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005712
5713
5714
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005715
5716
5717 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005718}
5719
5720VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005721 VkCommandBuffer commandBuffer,
5722 VkBuffer dstBuffer,
5723 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005724 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005725 uint32_t data)
5726{
Chia-I Wu1f851912015-10-27 18:04:07 +08005727 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728
Chia-I Wu1f851912015-10-27 18:04:07 +08005729 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730}
5731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732bool PreCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005733 VkCommandBuffer commandBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12005734 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005735 const VkImageSubresourceRange* pRanges)
5736{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005737 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005738 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739 }
5740
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005741 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005742 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005743 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005744 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005745
5746 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005747}
5748
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005749bool PostCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005750 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005751 VkImage image,
5752 VkImageLayout imageLayout,
5753 uint32_t rangeCount)
5754{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005755
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005756
5757 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5758 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5759 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005760 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005761 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005762 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005763 }
5764
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005765
5766 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005767}
5768
5769VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005770 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005771 VkImage image,
5772 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12005773 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774 uint32_t rangeCount,
5775 const VkImageSubresourceRange* pRanges)
5776{
Chia-I Wu1f851912015-10-27 18:04:07 +08005777 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005778
Chia-I Wu1f851912015-10-27 18:04:07 +08005779 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005780
Chia-I Wu1f851912015-10-27 18:04:07 +08005781 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005782}
5783
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005784bool PreCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005785 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005786 const VkImageSubresourceRange* pRanges)
5787{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005788 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005789 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005790 /*
5791 * TODO: How do we validation pRanges->aspectMask?
5792 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5793 * VK_IMAGE_ASPECT_STENCIL_BIT.
5794 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005795 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005796
5797 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798}
5799
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005800bool PostCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005801 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005802 VkImage image,
5803 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005804 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005805 uint32_t rangeCount)
5806{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005808
5809 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5810 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5811 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005812 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005813 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005814 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005815 }
5816
5817
5818
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005819
5820 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005821}
5822
Chris Forbes2951d7d2015-06-22 17:21:59 +12005823VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005824 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825 VkImage image,
5826 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005827 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005828 uint32_t rangeCount,
5829 const VkImageSubresourceRange* pRanges)
5830{
Chia-I Wu1f851912015-10-27 18:04:07 +08005831 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005832
Chia-I Wu1f851912015-10-27 18:04:07 +08005833 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834
Chia-I Wu1f851912015-10-27 18:04:07 +08005835 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005836}
5837
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005838bool PreCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005839 VkCommandBuffer commandBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005840 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005841 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005842{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005843 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005844 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005845 }
5846
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005847 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005848 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005849 }
5850
5851 return true;
5852}
5853
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005854VK_LAYER_EXPORT void VKAPI vkCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005855 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005856 uint32_t attachmentCount,
5857 const VkClearAttachment* pAttachments,
5858 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005859 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005860{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005861 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu1f851912015-10-27 18:04:07 +08005862 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005863 }
5864
Chia-I Wu1f851912015-10-27 18:04:07 +08005865 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005866}
5867
5868bool PreCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005869 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005870 const VkImageResolve* pRegions)
5871{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005872 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005873 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005874 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005875 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005876 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005877 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005878 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005879 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005880 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005881 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005882 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005883 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005884 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005885 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005886 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005887 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005888 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005889
5890 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005891}
5892
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005893bool PostCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005894 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005895 VkImage srcImage,
5896 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005897 VkImage dstImage,
5898 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005899 uint32_t regionCount)
5900{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005901
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005902
5903 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5904 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5905 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005906 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005907 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005908 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005909 }
5910
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005911
Chia-I Wu1f851912015-10-27 18:04:07 +08005912 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5913 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914 {
Chia-I Wu1f851912015-10-27 18:04:07 +08005915 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
5916 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005917 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918 }
5919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005920
5921 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922}
5923
5924VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005925 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 VkImage srcImage,
5927 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005928 VkImage dstImage,
5929 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005930 uint32_t regionCount,
5931 const VkImageResolve* pRegions)
5932{
Chia-I Wu1f851912015-10-27 18:04:07 +08005933 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005934
Chia-I Wu1f851912015-10-27 18:04:07 +08005935 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005936
Chia-I Wu1f851912015-10-27 18:04:07 +08005937 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938}
5939
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005940bool PostCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005941 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005942 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005943 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005944{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005945
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005946
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005947
5948 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005949}
5950
5951VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005952 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005954 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005955{
Chia-I Wu1f851912015-10-27 18:04:07 +08005956 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957
Chia-I Wu1f851912015-10-27 18:04:07 +08005958 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005959}
5960
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005961bool PostCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005962 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005964 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005966
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005967
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005968
5969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005970}
5971
5972VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005973 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005974 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005975 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005976{
Chia-I Wu1f851912015-10-27 18:04:07 +08005977 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005978
Chia-I Wu1f851912015-10-27 18:04:07 +08005979 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005980}
5981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005982bool PreCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08005983 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984 const VkEvent* pEvents,
Chia-I Wu1f851912015-10-27 18:04:07 +08005985 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005986{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005987 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005988 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005989 }
5990
Chia-I Wu1f851912015-10-27 18:04:07 +08005991 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005992 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005993 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005994
5995 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005996}
5997
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005998bool PostCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08005999 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006000 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006001 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006002 VkPipelineStageFlags dstStageMask,
6003 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006004{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005
Tony Barbourc2e987e2015-06-29 16:20:35 -06006006
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006007
6008
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006009
6010 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006011}
6012
6013VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006014 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015 uint32_t eventCount,
6016 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006017 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006018 VkPipelineStageFlags dstStageMask,
6019 uint32_t memoryBarrierCount,
6020 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006021{
Chia-I Wu1f851912015-10-27 18:04:07 +08006022 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006023
Chia-I Wu1f851912015-10-27 18:04:07 +08006024 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006025
Chia-I Wu1f851912015-10-27 18:04:07 +08006026 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027}
6028
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006029bool PreCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006030 VkCommandBuffer commandBuffer,
6031 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032{
Chia-I Wu1f851912015-10-27 18:04:07 +08006033 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006034 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006035 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006036
6037 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038}
6039
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006040bool PostCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006041 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006042 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006043 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006044 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006045 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006046{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006047
Tony Barbourc2e987e2015-06-29 16:20:35 -06006048
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006049
6050
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006051
6052 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006053}
6054
6055VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006056 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006057 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006058 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006059 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006060 uint32_t memoryBarrierCount,
6061 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062{
Chia-I Wu1f851912015-10-27 18:04:07 +08006063 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006064
Chia-I Wu1f851912015-10-27 18:04:07 +08006065 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006066
Chia-I Wu1f851912015-10-27 18:04:07 +08006067 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006068}
6069
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006070bool PostCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006071 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006072 VkQueryPool queryPool,
6073 uint32_t slot,
6074 VkQueryControlFlags flags)
6075{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006077
6078
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006079
6080 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006081}
6082
6083VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006084 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006085 VkQueryPool queryPool,
6086 uint32_t slot,
6087 VkQueryControlFlags flags)
6088{
Chia-I Wu1f851912015-10-27 18:04:07 +08006089 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006090
Chia-I Wu1f851912015-10-27 18:04:07 +08006091 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006092}
6093
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006094bool PostCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006095 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006096 VkQueryPool queryPool,
6097 uint32_t slot)
6098{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006100
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006101
6102 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103}
6104
6105VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006106 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006107 VkQueryPool queryPool,
6108 uint32_t slot)
6109{
Chia-I Wu1f851912015-10-27 18:04:07 +08006110 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006111
Chia-I Wu1f851912015-10-27 18:04:07 +08006112 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006113}
6114
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006115bool PostCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006116 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117 VkQueryPool queryPool,
6118 uint32_t startQuery,
6119 uint32_t queryCount)
6120{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006121
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006122
6123
6124
6125 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006126}
6127
6128VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006129 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130 VkQueryPool queryPool,
6131 uint32_t startQuery,
6132 uint32_t queryCount)
6133{
Chia-I Wu1f851912015-10-27 18:04:07 +08006134 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006135
Chia-I Wu1f851912015-10-27 18:04:07 +08006136 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006137}
6138
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006139bool PostCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006140 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006141 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006142 VkQueryPool queryPool,
6143 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006144{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006145
Chia-I Wu59c215d2015-10-26 19:40:27 +08006146 ValidateEnumerator(pipelineStage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006147
6148 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006149}
6150
6151VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006152 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006153 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006154 VkQueryPool queryPool,
6155 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006156{
Chia-I Wu1f851912015-10-27 18:04:07 +08006157 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006158
Chia-I Wu1f851912015-10-27 18:04:07 +08006159 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006160}
6161
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006162bool PostCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006163 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006164 VkQueryPool queryPool,
6165 uint32_t startQuery,
6166 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006167 VkBuffer dstBuffer,
6168 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006169 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006170 VkQueryResultFlags flags)
6171{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172
6173
6174
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006175
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006176
6177
6178
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006179
6180 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006181}
6182
Jeremy Hayescf469132015-04-17 10:36:53 -06006183VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006184 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006185 VkQueryPool queryPool,
6186 uint32_t startQuery,
6187 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006188 VkBuffer dstBuffer,
6189 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006190 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006191 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006192{
Chia-I Wu1f851912015-10-27 18:04:07 +08006193 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006194
Chia-I Wu1f851912015-10-27 18:04:07 +08006195 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006196}
6197
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006198bool PreCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006199 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006200 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006201{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006202 if(values != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006203 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006204 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006205
6206 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006207}
6208
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006209bool PostCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006210 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006211 VkPipelineLayout layout,
6212 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006213 uint32_t offset,
6214 uint32_t size)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006215{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006216
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006217
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006218
6219
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006220
6221 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006222}
6223
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006224VK_LAYER_EXPORT void VKAPI vkCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006225 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006226 VkPipelineLayout layout,
6227 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006228 uint32_t offset,
6229 uint32_t size,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006230 const void* values)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231{
Chia-I Wu1f851912015-10-27 18:04:07 +08006232 PreCmdPushConstants(commandBuffer, values);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006233
Chia-I Wu1f851912015-10-27 18:04:07 +08006234 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, values);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006235
Chia-I Wu1f851912015-10-27 18:04:07 +08006236 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006237}
6238
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006239bool PreCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006240 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006241 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006242{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006243 if(pRenderPassBegin != nullptr)
6244 {
6245 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006246 {
Chia-I Wu1f851912015-10-27 18:04:07 +08006247 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006248 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006249 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006250 }
Cody Northropc332eef2015-08-04 11:51:03 -06006251 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006252 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006253 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006254 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006255
6256 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006257}
6258
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006259bool PostCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006260 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006261 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006262{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006263
Chia-I Wuc51b1212015-10-27 19:25:11 +08006264 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6265 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006266 {
Chia-I Wu1f851912015-10-27 18:04:07 +08006267 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006268 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006269 return false;
6270 }
6271
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006272 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006273}
6274
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006275VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006276 VkCommandBuffer commandBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006277 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006278 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006279{
Chia-I Wu1f851912015-10-27 18:04:07 +08006280 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006281
Chia-I Wu1f851912015-10-27 18:04:07 +08006282 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006283
Chia-I Wu1f851912015-10-27 18:04:07 +08006284 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006285}
6286
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006287bool PostCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006288 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006289 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006290{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006291
Chia-I Wuc51b1212015-10-27 19:25:11 +08006292 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6293 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006294 {
Chia-I Wu1f851912015-10-27 18:04:07 +08006295 log_msg(mdd(commandBuffer), VK_DBG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006296 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006297 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006298 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006299
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006300 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006301}
6302
6303VK_LAYER_EXPORT void VKAPI vkCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006304 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006305 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006306{
Chia-I Wu1f851912015-10-27 18:04:07 +08006307 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wuc278df82015-07-07 11:50:03 +08006308
Chia-I Wu1f851912015-10-27 18:04:07 +08006309 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006310}
6311
6312bool PostCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006313 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006314{
6315
6316 return true;
6317}
6318
6319VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006320 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006321{
Chia-I Wu1f851912015-10-27 18:04:07 +08006322 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006323
Chia-I Wu1f851912015-10-27 18:04:07 +08006324 PostCmdEndRenderPass(commandBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006325}
6326
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006327bool PreCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006328 VkCommandBuffer commandBuffer,
6329 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006330{
Chia-I Wu1f851912015-10-27 18:04:07 +08006331 if(pCommandBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006332 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006333 }
6334
6335 return true;
6336}
6337
6338bool PostCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006339 VkCommandBuffer commandBuffer,
6340 uint32_t commandBuffersCount)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006341{
6342
6343
6344 return true;
6345}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006346
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006347VK_LAYER_EXPORT void VKAPI vkCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006348 VkCommandBuffer commandBuffer,
6349 uint32_t commandBuffersCount,
6350 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006351{
Chia-I Wu1f851912015-10-27 18:04:07 +08006352 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006353
Chia-I Wu1f851912015-10-27 18:04:07 +08006354 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006355
Chia-I Wu1f851912015-10-27 18:04:07 +08006356 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006357}
6358
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006359VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006360{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006361 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006362 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006363 }
6364
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006365 /* loader uses this to force layer initialization; device object is wrapped */
6366 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006367 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006368 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006369 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006370
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006371 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006372 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006373 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006374 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006375 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006376 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006377 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006378 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006379 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006380 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006381 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006382 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu1f851912015-10-27 18:04:07 +08006383 if (!strcmp(funcName, "vkAllocateMemory"))
6384 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006385 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006386 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006387 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006388 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006389 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006390 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006391 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006392 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006393 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006394 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006395 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006396 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006397 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006398 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006399 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006400 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006401 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006402 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006403 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006404 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006405 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006406 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006407 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006408 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006409 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006410 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006411 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006412 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006413 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006414 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006415 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006416 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006417 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006418 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006419 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006420 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006421 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006422 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine6715e522015-09-15 14:59:14 -05006423 if (!strcmp(funcName, "vkCreateShaderModule"))
6424 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006425 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006426 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006427 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006428 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006429 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006430 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006431 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006432 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006433 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006434 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006435 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006436 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006437 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006438 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu1f851912015-10-27 18:04:07 +08006439 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6440 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006441 if (!strcmp(funcName, "vkCmdSetViewport"))
6442 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006443 if (!strcmp(funcName, "vkCmdSetScissor"))
6444 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006445 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6446 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6447 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6448 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6449 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6450 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6451 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6452 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6453 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6454 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6455 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6456 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6457 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6458 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu1f851912015-10-27 18:04:07 +08006459 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6460 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006461 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006462 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006463 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006464 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006465 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006466 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006467 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006477 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006478 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006479 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006480 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006481 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006482 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006483 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006485 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006497 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006498 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006499 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006500 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006501 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006502 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006503 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006504 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006505 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006506 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006507 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006508 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006509 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006510 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006511 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006512 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006513 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006514 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006515 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006516 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006517 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006518 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006519 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006520 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006521 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006523 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006529 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006531
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006532 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006533 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006534 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006535 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006536 }
6537}
6538
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006539VK_LAYER_EXPORT PFN_vkVoidFunction VKAPI vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006540{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006541 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006542 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006543 }
6544
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006545 /* loader uses this to force layer initialization; instance object is wrapped */
6546 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006547 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006548 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006549 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006550
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006551 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006552 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006553 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006554 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006555 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006556 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006557 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006558 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006561 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006563 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6564 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6565 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6566 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6567 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6568 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6569 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6570 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006571
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006572 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006573 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006575 return fptr;
6576
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006577 {
6578 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6579 return NULL;
6580 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6581 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006582}