blob: db66d69345ed2a17fff41c29e9863e8954fb7d97 [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"
David Pinedo329ca9e2015-11-06 12:54:48 -070039#include "vulkan/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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800109VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDbgCreateMsgCallback(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600110 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800128VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDbgDestroyMsgCallback(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -0600129 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800150VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800159VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800168VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +0800186VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001731VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001732 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001750VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001792 log_msg(mid(instance), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001799VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06001800 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001823VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001841 log_msg(mdd(physicalDevice), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001853VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001877 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001878 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001885 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001886 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001893 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001894 "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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001906 log_msg(mdd(physicalDevice), VK_DEBUG_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 Wuaf9e4fd2015-11-06 06:42:02 +08001913VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07001939 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06001940 "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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001948VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001974VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08001996VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002005VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002006 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002030VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002062VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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) {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002078 log_msg(mdd(queue), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002102 log_msg(mdd(queue), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002109VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002110 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002134 log_msg(mdd(queue), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002141VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002142 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002159 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002166VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002167 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 Wuc1f5e402015-11-10 16:21:09 +08002182 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002183 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002184 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002206 log_msg(mdd(device), VK_DEBUG_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 Wuaf9e4fd2015-11-06 06:42:02 +08002213VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002249 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002256VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002257 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002279 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002298 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002305VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002327 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002346 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002353VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002381VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002405 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002412VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002439 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002446VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayesc27938e2015-07-09 17:11:25 -06002447 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002473VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002497VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002524 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002533VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002558 log_msg(mdd(physicalDevice), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002566 log_msg(mdd(physicalDevice), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002576 log_msg(mdd(physicalDevice), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002590 log_msg(mdd(physicalDevice), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002599VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002639 log_msg(mdd(queue), VK_DEBUG_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 Wuaf9e4fd2015-11-06 06:42:02 +08002646VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002669 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002691 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002698VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002699 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002734 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002741VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002742 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002765 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002772VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002773 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002808 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002815VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002816 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002839 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002861 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002868VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002869 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002891 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002913 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002920VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002921 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002945 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002952VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002953 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07002973 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08002980VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06002981 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003001 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003008VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003009 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003027 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003034 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003056 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003063VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003064 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003101 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003108VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003109 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003133 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003140 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003165 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003172VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003173 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003195 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003202 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003224 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003231VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003232 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003254 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003261 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003268 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003275 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003282 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003283 "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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003307 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003314VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003315 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003338 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003361VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003382 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003389 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003396 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003403 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003410 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003417 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003424 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003446 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003453VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06003454 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) {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003474 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003475 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3476 return false;
3477 }
3478 if(!pCreateInfo->pCode) {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003479 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003480 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3481 return false;
3482 }
3483 } else {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003484 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine6715e522015-09-15 14:59:14 -05003485 "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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003499 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003506VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine6715e522015-09-15 14:59:14 -05003507 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003526 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003551 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003558VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003593 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003600VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003601 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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003636 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003643VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003644 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003666 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003667 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003674 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003675 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003692 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003693 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003701 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003711 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003712 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003722 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003728 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003729 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003737 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003738 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003746 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003747 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003755 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003762 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003768 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003775 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003784 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003785 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003793 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003794 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003800 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003801 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003807 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003814 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003821 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003828 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003835 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003842 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003849 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003856 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003865 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003866 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003873 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003874 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003882 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003889 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003896 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003903 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003910 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003917 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003925 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes4fc32342015-07-31 14:16:20 -06003926 "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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003950 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08003957VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003958 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003982 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003983 "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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07003988 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06003989 "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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004023 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004030VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004031 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004055 log_msg(mdd(device), VK_DEBUG_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);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004083 log_msg(mdd(device), VK_DEBUG_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
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004090VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004091 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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004113 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004120 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004127 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004134 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004141 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004148 log_msg(mdd(device), VK_DEBUG_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 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004155 log_msg(mdd(device), VK_DEBUG_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 }
Jeremy Hayes1982a362015-11-16 17:23:59 -07004159 if(pCreateInfo->compareEnable)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004160 {
Jeremy Hayes1982a362015-11-16 17:23:59 -07004161 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4162 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4163 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004164 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes1982a362015-11-16 17:23:59 -07004165 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4166 return false;
4167 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004168 }
4169 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4170 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4171 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004172 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004173 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004174 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004175 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004176 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004177
4178 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004179}
4180
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004181bool PostCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004182 VkDevice device,
4183 VkSampler* pSampler,
4184 VkResult result)
4185{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004186
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004187 if(pSampler != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004188 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004189 }
4190
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004191 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004192 {
4193 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004194 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004195 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004196 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004197
4198 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004199}
4200
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004201VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004202 VkDevice device,
4203 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004204 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004205 VkSampler* pSampler)
4206{
4207 PreCreateSampler(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004208
Chia-I Wu69f40122015-10-26 21:10:41 +08004209 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004210
4211 PostCreateSampler(device, pSampler, result);
4212
4213 return result;
4214}
4215
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004216bool PreCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004217 VkDevice device,
4218 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4219{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004220 if(pCreateInfo != nullptr)
4221 {
4222 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004223 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004224 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004225 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004226 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004227 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004228 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004229 {
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004230 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4231 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004232 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004233 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004234 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004235 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004236 }
Chia-I Wuf03cbf72015-10-31 00:31:16 +08004237 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004238 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004239 }
4240 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004241 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004242
4243 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004244}
4245
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004246bool PostCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004247 VkDevice device,
4248 VkDescriptorSetLayout* pSetLayout,
4249 VkResult result)
4250{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004251
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004252 if(pSetLayout != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004253 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004254 }
4255
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004256 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004257 {
4258 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004259 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004260 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004261 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004262
4263 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004264}
4265
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004266VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004267 VkDevice device,
4268 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004269 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004270 VkDescriptorSetLayout* pSetLayout)
4271{
4272 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004273
Chia-I Wu69f40122015-10-26 21:10:41 +08004274 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004275
4276 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4277
4278 return result;
4279}
4280
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004281bool PreCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004282 VkDevice device,
4283 const VkDescriptorPoolCreateInfo* pCreateInfo)
4284{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004285 if(pCreateInfo != nullptr)
4286 {
4287 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004288 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004289 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004290 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004291 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004292 }
Chia-I Wuc51b1212015-10-27 19:25:11 +08004293 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004294 {
Chia-I Wuc51b1212015-10-27 19:25:11 +08004295 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4296 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004297 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004298 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004299 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004300 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004301 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004302 }
4303 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004304
4305 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004306}
4307
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004308bool PostCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004309 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004310 uint32_t maxSets,
4311 VkDescriptorPool* pDescriptorPool,
4312 VkResult result)
4313{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004314
Courtney Goeltzenleuchterd9e966a2015-09-16 16:12:45 -06004315 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004316
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004317 if(pDescriptorPool != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004318 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004319 }
4320
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004321 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004322 {
4323 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004324 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004325 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004326 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004327
4328 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004329}
4330
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004331VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004332 VkDevice device,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004333 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004334 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004335 VkDescriptorPool* pDescriptorPool)
4336{
4337 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004338
Chia-I Wu69f40122015-10-26 21:10:41 +08004339 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004340
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004341 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004342
4343 return result;
4344}
4345
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004346bool PostResetDescriptorPool(
4347 VkDevice device,
4348 VkDescriptorPool descriptorPool,
4349 VkResult result)
4350{
4351
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004352
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004353 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004354 {
4355 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004356 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004357 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004358 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004359
4360 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004361}
4362
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004363VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004364 VkDevice device,
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004365 VkDescriptorPool descriptorPool,
4366 VkDescriptorPoolResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004367{
Courtney Goeltzenleuchter831c1832015-10-23 14:21:05 -06004368 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004369
4370 PostResetDescriptorPool(device, descriptorPool, result);
4371
4372 return result;
4373}
4374
Chia-I Wu1f851912015-10-27 18:04:07 +08004375bool PreAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004376 VkDevice device,
4377 const VkDescriptorSetLayout* pSetLayouts)
4378{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004379 if(pSetLayouts != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004380 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004381 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004382
4383 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004384}
4385
Chia-I Wu1f851912015-10-27 18:04:07 +08004386bool PostAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004387 VkDevice device,
4388 VkDescriptorPool descriptorPool,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004389 uint32_t count,
4390 VkDescriptorSet* pDescriptorSets,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004391 VkResult result)
4392{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004393
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004394
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004395 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004396 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004397 }
4398
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004399 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004400 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004401 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004402 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004403 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004404 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004405
4406 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004407}
4408
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004409VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004410 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004411 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northropc8aa4a52015-08-03 12:47:29 -06004412 VkDescriptorSet* pDescriptorSets)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004413{
Chia-I Wu1f851912015-10-27 18:04:07 +08004414 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004415
Chia-I Wu1f851912015-10-27 18:04:07 +08004416 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004417
Chia-I Wu1f851912015-10-27 18:04:07 +08004418 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004419
4420 return result;
4421}
4422
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004423bool PreFreeDescriptorSets(
4424 VkDevice device,
4425 const VkDescriptorSet* pDescriptorSets)
4426{
4427 if(pDescriptorSets != nullptr)
4428 {
4429 }
4430
4431 return true;
4432}
4433
4434bool PostFreeDescriptorSets(
4435 VkDevice device,
4436 VkDescriptorPool descriptorPool,
4437 uint32_t count,
4438 VkResult result)
4439{
4440
4441
4442
4443 if(result < VK_SUCCESS)
4444 {
4445 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004446 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004447 return false;
4448 }
4449
4450 return true;
4451}
4452
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004453VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004454 VkDevice device,
4455 VkDescriptorPool descriptorPool,
4456 uint32_t count,
4457 const VkDescriptorSet* pDescriptorSets)
4458{
4459 PreFreeDescriptorSets(device, pDescriptorSets);
4460
4461 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4462
4463 PostFreeDescriptorSets(device, descriptorPool, count, result);
4464
4465 return result;
4466}
4467
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004468bool PreUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004469 VkDevice device,
4470 const VkWriteDescriptorSet* pDescriptorWrites,
4471 const VkCopyDescriptorSet* pDescriptorCopies)
4472{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004473 if(pDescriptorWrites != nullptr)
4474 {
4475 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004476 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004477 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004478 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004479 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004480 }
4481 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4482 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4483 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004484 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004485 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004486 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004487 }
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004488 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4489 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4490 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004491 {
Courtney Goeltzenleuchter34aa5c82015-10-23 13:38:14 -06004492 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4493 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004494 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004495 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004496 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004497 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004498 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004499 }
4500 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004501
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004502 if(pDescriptorCopies != nullptr)
4503 {
4504 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004505 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004506 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004507 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004508 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004509 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004510 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004511
4512 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004513}
4514
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004515VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004516 VkDevice device,
Chia-I Wu483e7702015-10-26 17:20:32 +08004517 uint32_t descriptorWriteCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004518 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu483e7702015-10-26 17:20:32 +08004519 uint32_t descriptorCopyCount,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004520 const VkCopyDescriptorSet* pDescriptorCopies)
4521{
4522 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004523
Chia-I Wu483e7702015-10-26 17:20:32 +08004524 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004525}
4526
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004527bool PreCreateFramebuffer(
4528 VkDevice device,
4529 const VkFramebufferCreateInfo* pCreateInfo)
4530{
4531 if(pCreateInfo != nullptr)
4532 {
4533 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4534 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004535 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004536 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4537 return false;
4538 }
4539 if(pCreateInfo->pAttachments != nullptr)
4540 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004541 }
4542 }
4543
4544 return true;
4545}
4546
4547bool PostCreateFramebuffer(
4548 VkDevice device,
4549 VkFramebuffer* pFramebuffer,
4550 VkResult result)
4551{
4552
4553 if(pFramebuffer != nullptr)
4554 {
4555 }
4556
4557 if(result < VK_SUCCESS)
4558 {
4559 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004560 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004561 return false;
4562 }
4563
4564 return true;
4565}
4566
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004567VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004568 VkDevice device,
4569 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004570 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004571 VkFramebuffer* pFramebuffer)
4572{
4573 PreCreateFramebuffer(device, pCreateInfo);
4574
Chia-I Wu69f40122015-10-26 21:10:41 +08004575 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004576
4577 PostCreateFramebuffer(device, pFramebuffer, result);
4578
4579 return result;
4580}
4581
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004582bool PreCreateRenderPass(
4583 VkDevice device,
4584 const VkRenderPassCreateInfo* pCreateInfo)
4585{
4586 if(pCreateInfo != nullptr)
4587 {
4588 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4589 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004590 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004591 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4592 return false;
4593 }
4594 if(pCreateInfo->pAttachments != nullptr)
4595 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004596 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4597 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4598 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004599 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004600 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4601 return false;
4602 }
4603 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4604 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4605 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004606 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004607 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4608 return false;
4609 }
4610 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4611 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4612 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004613 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004614 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4615 return false;
4616 }
4617 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4618 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4619 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004620 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004621 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4622 return false;
4623 }
4624 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4625 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4626 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004627 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004628 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4629 return false;
4630 }
4631 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4632 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4633 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004634 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004635 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4636 return false;
4637 }
4638 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4639 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4640 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004641 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004642 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4643 return false;
4644 }
4645 }
4646 if(pCreateInfo->pSubpasses != nullptr)
4647 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004648 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4649 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4650 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004651 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004652 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4653 return false;
4654 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004655 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004656 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004657 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4658 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004659 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004660 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004661 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004662 return false;
4663 }
4664 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004665 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004666 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004667 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4668 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004669 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004670 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004671 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004672 return false;
4673 }
4674 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004675 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004676 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004677 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4678 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004679 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004680 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004681 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004682 return false;
4683 }
4684 }
Chia-I Wuce532f72015-10-26 17:32:47 +08004685 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4686 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4687 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004688 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004689 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuce532f72015-10-26 17:32:47 +08004690 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004691 return false;
4692 }
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004693 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004694 {
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004695 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4696 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004697 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004698 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Cody Northrop6de6b0b2015-08-04 11:16:41 -06004699 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004700 return false;
4701 }
4702 }
4703 }
4704 if(pCreateInfo->pDependencies != nullptr)
4705 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004706 }
4707 }
4708
4709 return true;
4710}
4711
4712bool PostCreateRenderPass(
4713 VkDevice device,
4714 VkRenderPass* pRenderPass,
4715 VkResult result)
4716{
4717
4718 if(pRenderPass != nullptr)
4719 {
4720 }
4721
4722 if(result < VK_SUCCESS)
4723 {
4724 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004725 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004726 return false;
4727 }
4728
4729 return true;
4730}
4731
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004732VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004733 VkDevice device,
4734 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu1f851912015-10-27 18:04:07 +08004735 const VkAllocationCallbacks* pAllocator,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004736 VkRenderPass* pRenderPass)
4737{
4738 PreCreateRenderPass(device, pCreateInfo);
4739
Chia-I Wu69f40122015-10-26 21:10:41 +08004740 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004741
4742 PostCreateRenderPass(device, pRenderPass, result);
4743
4744 return result;
4745}
4746
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004747bool PostGetRenderAreaGranularity(
4748 VkDevice device,
4749 VkRenderPass renderPass,
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004750 VkExtent2D* pGranularity)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004751{
4752
4753
4754 if(pGranularity != nullptr)
4755 {
4756 }
4757
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004758 return true;
4759}
4760
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004761VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004762 VkDevice device,
4763 VkRenderPass renderPass,
4764 VkExtent2D* pGranularity)
4765{
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004766 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004767
Courtney Goeltzenleuchter01d2ae12015-10-20 16:40:38 -06004768 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004769}
4770
4771bool PreCreateCommandPool(
4772 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004773 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004774{
4775 if(pCreateInfo != nullptr)
4776 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004777 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004778 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004779 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004780 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4781 return false;
4782 }
4783 }
4784
4785 return true;
4786}
4787
4788bool PostCreateCommandPool(
4789 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004790 VkCommandPool* pCommandPool,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004791 VkResult result)
4792{
4793
Chia-I Wu1f851912015-10-27 18:04:07 +08004794 if(pCommandPool != nullptr)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004795 {
4796 }
4797
4798 if(result < VK_SUCCESS)
4799 {
4800 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004801 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004802 return false;
4803 }
4804
4805 return true;
4806}
4807
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004808VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004809 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004810 const VkCommandPoolCreateInfo* pCreateInfo,
4811 const VkAllocationCallbacks* pAllocator,
4812 VkCommandPool* pCommandPool)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004813{
4814 PreCreateCommandPool(device, pCreateInfo);
4815
Chia-I Wu1f851912015-10-27 18:04:07 +08004816 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004817
Chia-I Wu1f851912015-10-27 18:04:07 +08004818 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004819
4820 return result;
4821}
4822
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004823bool PostResetCommandPool(
4824 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004825 VkCommandPool commandPool,
4826 VkCommandPoolResetFlags flags,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004827 VkResult result)
4828{
4829
4830
4831
4832 if(result < VK_SUCCESS)
4833 {
4834 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004835 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004836 return false;
4837 }
4838
4839 return true;
4840}
4841
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004842VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004843 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004844 VkCommandPool commandPool,
4845 VkCommandPoolResetFlags flags)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004846{
Chia-I Wu1f851912015-10-27 18:04:07 +08004847 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004848
Chia-I Wu1f851912015-10-27 18:04:07 +08004849 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004850
4851 return result;
4852}
4853
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004854bool PreCreateCommandBuffer(
4855 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004856 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004857{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004858 if(pCreateInfo != nullptr)
4859 {
Chia-I Wuc1f5e402015-11-10 16:21:09 +08004860 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004861 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004862 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004863 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004864 return false;
4865 }
Chia-I Wu1f851912015-10-27 18:04:07 +08004866 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4867 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004868 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004869 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08004870 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004871 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004872 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004873 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004874
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004875 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004876}
4877
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004878bool PostCreateCommandBuffer(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004879 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004880 VkCommandBuffer* pCommandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004881 VkResult result)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004882{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004883
Chia-I Wu1f851912015-10-27 18:04:07 +08004884 if(pCommandBuffer != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004885 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004886 }
4887
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004888 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004889 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004890 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004891 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004892 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004893 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004894
4895 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004896}
4897
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004898VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004899 VkDevice device,
Chia-I Wu1f851912015-10-27 18:04:07 +08004900 const VkCommandBufferAllocateInfo* pCreateInfo,
4901 VkCommandBuffer* pCommandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004902{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004903 PreCreateCommandBuffer(device, pCreateInfo);
4904
Chia-I Wu1f851912015-10-27 18:04:07 +08004905 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004906
Chia-I Wu1f851912015-10-27 18:04:07 +08004907 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004908
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004909 return result;
4910}
4911
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004912bool PreBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004913 VkCommandBuffer commandBuffer,
4914 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004915{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004916 if(pBeginInfo != nullptr)
4917 {
Chia-I Wu1f851912015-10-27 18:04:07 +08004918 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004919 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004920 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004921 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004922 return false;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004923 }
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004924 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004925
4926 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004927}
4928
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004929bool PostBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004930 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004931 VkResult result)
4932{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004933
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004934 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004935 {
4936 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004937 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004938 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004939 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004940
4941 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004942}
4943
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004944VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004945 VkCommandBuffer commandBuffer,
4946 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004947{
Chia-I Wu1f851912015-10-27 18:04:07 +08004948 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004949
Chia-I Wu1f851912015-10-27 18:04:07 +08004950 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004951
Chia-I Wu1f851912015-10-27 18:04:07 +08004952 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004953
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004954 return result;
4955}
4956
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004957bool PostEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004958 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004959 VkResult result)
4960{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004961
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004962 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004963 {
4964 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004965 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004966 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004967 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004968
4969 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004970}
4971
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004972VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004973 VkCommandBuffer commandBuffer)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004974{
Chia-I Wu1f851912015-10-27 18:04:07 +08004975 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004976
Chia-I Wu1f851912015-10-27 18:04:07 +08004977 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004978
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06004979 return result;
4980}
4981
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004982bool PostResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08004983 VkCommandBuffer commandBuffer,
4984 VkCommandBufferResetFlags flags,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004985 VkResult result)
4986{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004987
Jeremy Hayese841fdc2015-07-29 11:23:46 -06004988
4989 if(result < VK_SUCCESS)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004990 {
4991 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07004992 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004993 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004994 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06004995
4996 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06004997}
4998
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08004999VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005000 VkCommandBuffer commandBuffer,
5001 VkCommandBufferResetFlags flags)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005002{
Chia-I Wu1f851912015-10-27 18:04:07 +08005003 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005004
Chia-I Wu1f851912015-10-27 18:04:07 +08005005 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005006
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005007 return result;
5008}
5009
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005010bool PostCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005011 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005012 VkPipelineBindPoint pipelineBindPoint,
5013 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005014{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005015
5016 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5017 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5018 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005019 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005020 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005021 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005022 }
5023
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005024
5025 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005026}
5027
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005028VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu1f851912015-10-27 18:04:07 +08005029 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005030 VkPipelineBindPoint pipelineBindPoint,
5031 VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005032{
Chia-I Wu1f851912015-10-27 18:04:07 +08005033 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005034
Chia-I Wu1f851912015-10-27 18:04:07 +08005035 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005036}
5037
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005038VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005039{
Chia-I Wu1f851912015-10-27 18:04:07 +08005040 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, viewportCount, pViewports);
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005041}
5042
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005043VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06005044{
Chia-I Wu1f851912015-10-27 18:04:07 +08005045 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, scissorCount, pScissors);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005046}
5047
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005048VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005049{
Chia-I Wu1f851912015-10-27 18:04:07 +08005050 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005051}
5052
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005053VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005054{
Chia-I Wu1f851912015-10-27 18:04:07 +08005055 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005056}
5057
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005058VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005059{
Chia-I Wu1f851912015-10-27 18:04:07 +08005060 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northropf5bd2252015-08-17 11:10:49 -06005061}
5062
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005063VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northropf5bd2252015-08-17 11:10:49 -06005064{
Chia-I Wu1f851912015-10-27 18:04:07 +08005065 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northropf5bd2252015-08-17 11:10:49 -06005066}
5067
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005068VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northropf5bd2252015-08-17 11:10:49 -06005069{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005070 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005071}
5072
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005073VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005074{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005075 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005076}
5077
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005078VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005079{
Chia-I Wuc51b1212015-10-27 19:25:11 +08005080 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005081}
5082
5083bool PreCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005084 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005085 const VkDescriptorSet* pDescriptorSets,
5086 const uint32_t* pDynamicOffsets)
5087{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005088 if(pDescriptorSets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005089 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005090 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005091
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005092 if(pDynamicOffsets != nullptr)
5093 {
5094 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005095
5096 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005097}
5098
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005099bool PostCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005100 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005101 VkPipelineBindPoint pipelineBindPoint,
5102 VkPipelineLayout layout,
5103 uint32_t firstSet,
5104 uint32_t setCount,
5105 uint32_t dynamicOffsetCount)
5106{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005107
5108 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5109 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5110 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005111 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005112 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005113 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005114 }
5115
5116
5117
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005118
5119
5120 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005121}
5122
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005123VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu1f851912015-10-27 18:04:07 +08005124 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005125 VkPipelineBindPoint pipelineBindPoint,
5126 VkPipelineLayout layout,
5127 uint32_t firstSet,
5128 uint32_t setCount,
5129 const VkDescriptorSet* pDescriptorSets,
5130 uint32_t dynamicOffsetCount,
5131 const uint32_t* pDynamicOffsets)
5132{
Chia-I Wu1f851912015-10-27 18:04:07 +08005133 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005134
Chia-I Wu1f851912015-10-27 18:04:07 +08005135 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005136
Chia-I Wu1f851912015-10-27 18:04:07 +08005137 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005138}
5139
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005140bool PostCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005141 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005142 VkBuffer buffer,
5143 VkDeviceSize offset,
5144 VkIndexType indexType)
5145{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005146
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005147
5148
5149 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5150 indexType > VK_INDEX_TYPE_END_RANGE)
5151 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005152 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005153 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005154 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005155 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005156
5157 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005158}
5159
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005160VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005161 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005162 VkBuffer buffer,
5163 VkDeviceSize offset,
5164 VkIndexType indexType)
5165{
Chia-I Wu1f851912015-10-27 18:04:07 +08005166 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005167
Chia-I Wu1f851912015-10-27 18:04:07 +08005168 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005169}
5170
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005171bool PreCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005172 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005173 const VkBuffer* pBuffers,
5174 const VkDeviceSize* pOffsets)
5175{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005176 if(pBuffers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005177 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005178 }
5179
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005180 if(pOffsets != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005181 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005182 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005183
5184 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005185}
5186
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005187bool PostCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005188 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005189 uint32_t startBinding,
5190 uint32_t bindingCount)
5191{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005192
5193
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005194
5195 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005196}
5197
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005198VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu1f851912015-10-27 18:04:07 +08005199 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005200 uint32_t startBinding,
5201 uint32_t bindingCount,
5202 const VkBuffer* pBuffers,
5203 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005204{
Chia-I Wu1f851912015-10-27 18:04:07 +08005205 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005206
Chia-I Wu1f851912015-10-27 18:04:07 +08005207 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005208
Chia-I Wu1f851912015-10-27 18:04:07 +08005209 PostCmdBindVertexBuffers(commandBuffer, startBinding, bindingCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005210}
5211
Michael Lentine0f480e62015-11-24 09:48:23 -06005212bool PreCmdDraw(
5213 VkCommandBuffer commandBuffer,
5214 uint32_t vertexCount,
5215 uint32_t instanceCount,
5216 uint32_t firstVertex,
5217 uint32_t firstInstance)
5218{
5219 if (vertexCount == 0) {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005220 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine0f480e62015-11-24 09:48:23 -06005221 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5222 return false;
5223 }
5224
5225 if (instanceCount == 0) {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005226 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine0f480e62015-11-24 09:48:23 -06005227 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5228 return false;
5229 }
5230
5231 return true;
5232}
5233
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005234bool PostCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005235 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005236 uint32_t firstVertex,
5237 uint32_t vertexCount,
5238 uint32_t firstInstance,
5239 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005240{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005241
5242
5243
5244
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005245
5246 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005247}
5248
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005249VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu1f851912015-10-27 18:04:07 +08005250 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005251 uint32_t vertexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005252 uint32_t instanceCount,
5253 uint32_t firstVertex,
5254 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005255{
Michael Lentine0f480e62015-11-24 09:48:23 -06005256 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5257
Chia-I Wu1f851912015-10-27 18:04:07 +08005258 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005259
Chia-I Wu1f851912015-10-27 18:04:07 +08005260 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005261}
5262
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005263bool PostCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005264 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005265 uint32_t firstIndex,
5266 uint32_t indexCount,
5267 int32_t vertexOffset,
5268 uint32_t firstInstance,
5269 uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005270{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005271
5272
5273
5274
5275
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005276
5277 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005278}
5279
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005280VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu1f851912015-10-27 18:04:07 +08005281 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005282 uint32_t indexCount,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005283 uint32_t instanceCount,
5284 uint32_t firstIndex,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005285 int32_t vertexOffset,
Courtney Goeltzenleuchter4ff11cc2015-09-23 12:31:50 -06005286 uint32_t firstInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005287{
Chia-I Wu1f851912015-10-27 18:04:07 +08005288 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005289
Chia-I Wu1f851912015-10-27 18:04:07 +08005290 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005291}
5292
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005293bool PostCmdDrawIndirect(
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)
5299{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005300
5301
5302
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005303
5304
5305 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005306}
5307
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005308VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
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)
5314{
Chia-I Wu1f851912015-10-27 18:04:07 +08005315 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005316
Chia-I Wu1f851912015-10-27 18:04:07 +08005317 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005318}
5319
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005320bool PostCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005321 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005322 VkBuffer buffer,
5323 VkDeviceSize offset,
5324 uint32_t count,
5325 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005326{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005327
5328
5329
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005330
5331
5332 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005333}
5334
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005335VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005336 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005337 VkBuffer buffer,
5338 VkDeviceSize offset,
5339 uint32_t count,
5340 uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005341{
Chia-I Wu1f851912015-10-27 18:04:07 +08005342 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005343
Chia-I Wu1f851912015-10-27 18:04:07 +08005344 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005345}
5346
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005347bool PostCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005348 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005349 uint32_t x,
5350 uint32_t y,
5351 uint32_t z)
5352{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005353
5354
5355
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005356
5357 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005358}
5359
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005360VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu1f851912015-10-27 18:04:07 +08005361 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005362 uint32_t x,
5363 uint32_t y,
5364 uint32_t z)
5365{
Chia-I Wu1f851912015-10-27 18:04:07 +08005366 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005367
Chia-I Wu1f851912015-10-27 18:04:07 +08005368 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005369}
5370
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005371bool PostCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005372 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005373 VkBuffer buffer,
5374 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005375{
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005376
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005377
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005378
5379 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005380}
5381
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005382VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu1f851912015-10-27 18:04:07 +08005383 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005384 VkBuffer buffer,
5385 VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005386{
Chia-I Wu1f851912015-10-27 18:04:07 +08005387 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005388
Chia-I Wu1f851912015-10-27 18:04:07 +08005389 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005390}
5391
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005392bool PreCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005393 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005394 const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06005395{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005396 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005397 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005398 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005399
5400 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005401}
5402
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005403bool PostCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005404 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005405 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005406 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005407 uint32_t regionCount)
5408{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005409
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005410
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005411
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005412
5413 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005414}
5415
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005416VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005417 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005418 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005419 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005420 uint32_t regionCount,
5421 const VkBufferCopy* pRegions)
5422{
Chia-I Wu1f851912015-10-27 18:04:07 +08005423 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005424
Chia-I Wu1f851912015-10-27 18:04:07 +08005425 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005426
Chia-I Wu1f851912015-10-27 18:04:07 +08005427 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005428}
5429
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005430bool PreCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005431 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005432 const VkImageCopy* pRegions)
5433{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005434 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005435 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005436 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005437 (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 -06005438 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005439 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005440 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005441 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005442 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005443 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005444 (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 -06005445 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005446 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005447 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005448 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005449 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005450 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005451
5452 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005453}
5454
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005455bool PostCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005456 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005457 VkImage srcImage,
5458 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005459 VkImage dstImage,
5460 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005461 uint32_t regionCount)
5462{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005463
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005464
5465 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5466 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5467 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005468 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005469 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005470 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005471 }
5472
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005473
Chia-I Wu1f851912015-10-27 18:04:07 +08005474 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5475 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005476 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005477 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005478 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005479 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005480 }
5481
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005482
5483 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005484}
5485
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005486VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005487 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005488 VkImage srcImage,
5489 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005490 VkImage dstImage,
5491 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005492 uint32_t regionCount,
5493 const VkImageCopy* pRegions)
5494{
Chia-I Wu1f851912015-10-27 18:04:07 +08005495 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005496
Chia-I Wu1f851912015-10-27 18:04:07 +08005497 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005498
Chia-I Wu1f851912015-10-27 18:04:07 +08005499 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005500}
5501
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005502bool PreCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005503 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005504 const VkImageBlit* pRegions)
5505{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005506 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005507 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005508 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005509 (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 -06005510 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005511 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005512 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005513 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005514 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005515 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005516 (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 -06005517 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005518 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005519 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005520 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005521 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005522 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005523
5524 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005525}
5526
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005527bool PostCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005528 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005529 VkImage srcImage,
5530 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005531 VkImage dstImage,
5532 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005533 uint32_t regionCount,
Chia-I Wu3603b082015-10-26 16:49:32 +08005534 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005535{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005536
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005537
5538 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5539 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5540 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005541 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005542 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005543 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005544 }
5545
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005546
Chia-I Wu1f851912015-10-27 18:04:07 +08005547 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5548 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005549 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005550 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005551 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005552 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005553 }
5554
5555
Chia-I Wu3603b082015-10-26 16:49:32 +08005556 if(filter < VK_FILTER_BEGIN_RANGE ||
5557 filter > VK_FILTER_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005558 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005559 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3603b082015-10-26 16:49:32 +08005560 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005561 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005562 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005563
5564 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005565}
5566
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005567VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005568 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005569 VkImage srcImage,
5570 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005571 VkImage dstImage,
5572 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005573 uint32_t regionCount,
5574 const VkImageBlit* pRegions,
Chia-I Wu3603b082015-10-26 16:49:32 +08005575 VkFilter filter)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005576{
Chia-I Wu1f851912015-10-27 18:04:07 +08005577 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005578
Chia-I Wu1f851912015-10-27 18:04:07 +08005579 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005580
Chia-I Wu1f851912015-10-27 18:04:07 +08005581 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005582}
5583
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005584bool PreCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005585 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005586 const VkBufferImageCopy* pRegions)
5587{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005588 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005589 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005590 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005591 (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 -06005592 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005593 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005594 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005595 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005596 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005597 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005598
5599 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005600}
5601
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005602bool PostCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005603 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005604 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005605 VkImage dstImage,
5606 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005607 uint32_t regionCount)
5608{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005609
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005610
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005611
Chia-I Wu1f851912015-10-27 18:04:07 +08005612 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5613 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005614 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005615 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005616 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005617 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005618 }
5619
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005620
5621 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005622}
5623
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005624VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005625 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005626 VkBuffer srcBuffer,
Chia-I Wu1f851912015-10-27 18:04:07 +08005627 VkImage dstImage,
5628 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005629 uint32_t regionCount,
5630 const VkBufferImageCopy* pRegions)
5631{
Chia-I Wu1f851912015-10-27 18:04:07 +08005632 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005633
Chia-I Wu1f851912015-10-27 18:04:07 +08005634 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005635
Chia-I Wu1f851912015-10-27 18:04:07 +08005636 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005637}
5638
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005639bool PreCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005640 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005641 const VkBufferImageCopy* pRegions)
5642{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005643 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005644 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005645 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005646 (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 -06005647 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005648 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005649 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005650 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005651 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005652 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005653
5654 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005655}
5656
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005657bool PostCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005658 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005659 VkImage srcImage,
5660 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005661 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005662 uint32_t regionCount)
5663{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005664
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005665
5666 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5667 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5668 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005669 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005670 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005671 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005672 }
5673
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005674
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005675
5676 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005677}
5678
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005679VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005680 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005681 VkImage srcImage,
5682 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005683 VkBuffer dstBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005684 uint32_t regionCount,
5685 const VkBufferImageCopy* pRegions)
5686{
Chia-I Wu1f851912015-10-27 18:04:07 +08005687 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005688
Chia-I Wu1f851912015-10-27 18:04:07 +08005689 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005690
Chia-I Wu1f851912015-10-27 18:04:07 +08005691 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005692}
5693
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005694bool PreCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005695 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005696 const uint32_t* pData)
5697{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005698 if(pData != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005699 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005700 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005701
5702 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005703}
5704
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005705bool PostCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005706 VkCommandBuffer commandBuffer,
5707 VkBuffer dstBuffer,
5708 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005709 VkDeviceSize dataSize)
5710{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005711
5712
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005713
5714
5715 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005716}
5717
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005718VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005719 VkCommandBuffer commandBuffer,
5720 VkBuffer dstBuffer,
5721 VkDeviceSize dstOffset,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005722 VkDeviceSize dataSize,
5723 const uint32_t* pData)
5724{
Chia-I Wu1f851912015-10-27 18:04:07 +08005725 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005726
Chia-I Wu1f851912015-10-27 18:04:07 +08005727 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005728
Chia-I Wu1f851912015-10-27 18:04:07 +08005729 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005730}
5731
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005732bool PostCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005733 VkCommandBuffer commandBuffer,
5734 VkBuffer dstBuffer,
5735 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005736 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005737 uint32_t data)
5738{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005739
5740
5741
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005742
5743
5744 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005745}
5746
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005747VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu1f851912015-10-27 18:04:07 +08005748 VkCommandBuffer commandBuffer,
5749 VkBuffer dstBuffer,
5750 VkDeviceSize dstOffset,
Chia-I Wu7e470702015-10-26 17:24:52 +08005751 VkDeviceSize size,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005752 uint32_t data)
5753{
Chia-I Wu1f851912015-10-27 18:04:07 +08005754 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005755
Chia-I Wu1f851912015-10-27 18:04:07 +08005756 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005757}
5758
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005759bool PreCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005760 VkCommandBuffer commandBuffer,
Chris Forbese3105972015-06-24 14:34:53 +12005761 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005762 const VkImageSubresourceRange* pRanges)
5763{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005764 if(pColor != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005765 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005766 }
5767
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005768 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005769 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005770 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005771 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005772
5773 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005774}
5775
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005776bool PostCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005777 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005778 VkImage image,
5779 VkImageLayout imageLayout,
5780 uint32_t rangeCount)
5781{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005782
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005783
5784 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5785 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5786 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005787 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005788 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005789 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005790 }
5791
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005792
5793 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005794}
5795
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005796VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005797 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005798 VkImage image,
5799 VkImageLayout imageLayout,
Chris Forbese3105972015-06-24 14:34:53 +12005800 const VkClearColorValue* pColor,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005801 uint32_t rangeCount,
5802 const VkImageSubresourceRange* pRanges)
5803{
Chia-I Wu1f851912015-10-27 18:04:07 +08005804 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005805
Chia-I Wu1f851912015-10-27 18:04:07 +08005806 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005807
Chia-I Wu1f851912015-10-27 18:04:07 +08005808 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005809}
5810
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005811bool PreCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005812 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005813 const VkImageSubresourceRange* pRanges)
5814{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005815 if(pRanges != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005816 {
Courtney Goeltzenleuchteraeffeae2015-09-10 17:58:54 -06005817 /*
5818 * TODO: How do we validation pRanges->aspectMask?
5819 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5820 * VK_IMAGE_ASPECT_STENCIL_BIT.
5821 */
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005822 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005823
5824 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005825}
5826
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005827bool PostCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005828 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005829 VkImage image,
5830 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005831 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005832 uint32_t rangeCount)
5833{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005834
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005835
5836 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5837 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5838 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005839 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005840 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005841 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005842 }
5843
5844
5845
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005846
5847 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005848}
5849
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005850VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005851 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005852 VkImage image,
5853 VkImageLayout imageLayout,
Courtney Goeltzenleuchter315ad992015-09-15 18:03:22 -06005854 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005855 uint32_t rangeCount,
5856 const VkImageSubresourceRange* pRanges)
5857{
Chia-I Wu1f851912015-10-27 18:04:07 +08005858 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005859
Chia-I Wu1f851912015-10-27 18:04:07 +08005860 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005861
Chia-I Wu1f851912015-10-27 18:04:07 +08005862 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005863}
5864
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005865bool PreCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005866 VkCommandBuffer commandBuffer,
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005867 const VkClearColorValue* pColor,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005868 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005869{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005870 if(pColor != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005871 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005872 }
5873
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005874 if(pRects != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005875 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005876 }
5877
5878 return true;
5879}
5880
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005881VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu1f851912015-10-27 18:04:07 +08005882 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005883 uint32_t attachmentCount,
5884 const VkClearAttachment* pAttachments,
5885 uint32_t rectCount,
Courtney Goeltzenleuchtera12e2912015-10-15 18:22:08 -06005886 const VkClearRect* pRects)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005887{
Courtney Goeltzenleuchter9feb0732015-10-15 16:51:05 -06005888 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu1f851912015-10-27 18:04:07 +08005889 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005890 }
5891
Chia-I Wu1f851912015-10-27 18:04:07 +08005892 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005893}
5894
5895bool PreCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005896 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005897 const VkImageResolve* pRegions)
5898{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005899 if(pRegions != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005900 {
Chia-I Wu4291d882015-10-27 19:00:15 +08005901 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005902 (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 -06005903 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005904 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005905 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005906 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005907 }
Chia-I Wu4291d882015-10-27 19:00:15 +08005908 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchterba11ebe2015-10-21 17:00:51 -06005909 (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 -06005910 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005911 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu4291d882015-10-27 19:00:15 +08005912 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005913 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005914 }
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005915 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005916
5917 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005918}
5919
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005920bool PostCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005921 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005922 VkImage srcImage,
5923 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005924 VkImage dstImage,
5925 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005926 uint32_t regionCount)
5927{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005928
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005929
5930 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5931 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5932 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005933 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06005934 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005935 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005936 }
5937
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005938
Chia-I Wu1f851912015-10-27 18:04:07 +08005939 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5940 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005941 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07005942 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1f851912015-10-27 18:04:07 +08005943 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005944 return false;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005945 }
5946
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005947
5948 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005949}
5950
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005951VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu1f851912015-10-27 18:04:07 +08005952 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005953 VkImage srcImage,
5954 VkImageLayout srcImageLayout,
Chia-I Wu1f851912015-10-27 18:04:07 +08005955 VkImage dstImage,
5956 VkImageLayout dstImageLayout,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005957 uint32_t regionCount,
5958 const VkImageResolve* pRegions)
5959{
Chia-I Wu1f851912015-10-27 18:04:07 +08005960 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005961
Chia-I Wu1f851912015-10-27 18:04:07 +08005962 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005963
Chia-I Wu1f851912015-10-27 18:04:07 +08005964 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005965}
5966
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005967bool PostCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005968 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005969 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005970 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005971{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005972
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005973
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005974
5975 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005976}
5977
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005978VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005979 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005980 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005981 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005982{
Chia-I Wu1f851912015-10-27 18:04:07 +08005983 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005984
Chia-I Wu1f851912015-10-27 18:04:07 +08005985 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005986}
5987
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005988bool PostCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08005989 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005990 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06005991 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005992{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005993
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005994
Jeremy Hayesc27938e2015-07-09 17:11:25 -06005995
5996 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06005997}
5998
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08005999VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu1f851912015-10-27 18:04:07 +08006000 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006001 VkEvent event,
Tony Barbourc2e987e2015-06-29 16:20:35 -06006002 VkPipelineStageFlags stageMask)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006003{
Chia-I Wu1f851912015-10-27 18:04:07 +08006004 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006005
Chia-I Wu1f851912015-10-27 18:04:07 +08006006 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006007}
6008
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006009bool PreCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006010 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006011 const VkEvent* pEvents,
Chia-I Wu1f851912015-10-27 18:04:07 +08006012 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006013{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006014 if(pEvents != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006015 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006016 }
6017
Chia-I Wu1f851912015-10-27 18:04:07 +08006018 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006019 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006020 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006021
6022 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006023}
6024
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006025bool PostCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006026 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006027 uint32_t eventCount,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006028 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006029 VkPipelineStageFlags dstStageMask,
6030 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006031{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006032
Tony Barbourc2e987e2015-06-29 16:20:35 -06006033
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006034
6035
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006036
6037 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006038}
6039
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006040VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Chia-I Wu1f851912015-10-27 18:04:07 +08006041 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006042 uint32_t eventCount,
6043 const VkEvent* pEvents,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006044 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006045 VkPipelineStageFlags dstStageMask,
6046 uint32_t memoryBarrierCount,
6047 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006048{
Chia-I Wu1f851912015-10-27 18:04:07 +08006049 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006050
Chia-I Wu1f851912015-10-27 18:04:07 +08006051 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006052
Chia-I Wu1f851912015-10-27 18:04:07 +08006053 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006054}
6055
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006056bool PreCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006057 VkCommandBuffer commandBuffer,
6058 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006059{
Chia-I Wu1f851912015-10-27 18:04:07 +08006060 if(ppMemoryBarriers != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006061 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006062 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006063
6064 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006065}
6066
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006067bool PostCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006068 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006069 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006070 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006071 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006072 uint32_t memoryBarrierCount)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006073{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006074
Tony Barbourc2e987e2015-06-29 16:20:35 -06006075
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006076
6077
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006078
6079 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006080}
6081
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006082VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Chia-I Wu1f851912015-10-27 18:04:07 +08006083 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchter82b348f2015-07-12 13:07:46 -06006084 VkPipelineStageFlags srcStageMask,
Chia-I Wu1f851912015-10-27 18:04:07 +08006085 VkPipelineStageFlags dstStageMask,
Chia-I Wu3ffcd732015-10-26 17:08:33 +08006086 VkDependencyFlags dependencyFlags,
Chia-I Wu1f851912015-10-27 18:04:07 +08006087 uint32_t memoryBarrierCount,
6088 const void* const* ppMemoryBarriers)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006089{
Chia-I Wu1f851912015-10-27 18:04:07 +08006090 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006091
Chia-I Wu1f851912015-10-27 18:04:07 +08006092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006093
Chia-I Wu1f851912015-10-27 18:04:07 +08006094 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006095}
6096
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006097bool PostCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006098 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006099 VkQueryPool queryPool,
6100 uint32_t slot,
6101 VkQueryControlFlags flags)
6102{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006103
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006104
6105
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006106
6107 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006108}
6109
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006110VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006111 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006112 VkQueryPool queryPool,
6113 uint32_t slot,
6114 VkQueryControlFlags flags)
6115{
Chia-I Wu1f851912015-10-27 18:04:07 +08006116 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006117
Chia-I Wu1f851912015-10-27 18:04:07 +08006118 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006119}
6120
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006121bool PostCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006122 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006123 VkQueryPool queryPool,
6124 uint32_t slot)
6125{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006126
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006127
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006128
6129 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006130}
6131
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006132VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu1f851912015-10-27 18:04:07 +08006133 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006134 VkQueryPool queryPool,
6135 uint32_t slot)
6136{
Chia-I Wu1f851912015-10-27 18:04:07 +08006137 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006138
Chia-I Wu1f851912015-10-27 18:04:07 +08006139 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006140}
6141
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006142bool PostCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006143 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006144 VkQueryPool queryPool,
6145 uint32_t startQuery,
6146 uint32_t queryCount)
6147{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006148
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006149
6150
6151
6152 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006153}
6154
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006155VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu1f851912015-10-27 18:04:07 +08006156 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006157 VkQueryPool queryPool,
6158 uint32_t startQuery,
6159 uint32_t queryCount)
6160{
Chia-I Wu1f851912015-10-27 18:04:07 +08006161 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006162
Chia-I Wu1f851912015-10-27 18:04:07 +08006163 PostCmdResetQueryPool(commandBuffer, queryPool, startQuery, queryCount);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006164}
6165
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006166bool PostCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006167 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006168 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006169 VkQueryPool queryPool,
6170 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006171{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006172
Chia-I Wu59c215d2015-10-26 19:40:27 +08006173 ValidateEnumerator(pipelineStage);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006174
6175 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006176}
6177
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006178VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu1f851912015-10-27 18:04:07 +08006179 VkCommandBuffer commandBuffer,
Chia-I Wu59c215d2015-10-26 19:40:27 +08006180 VkPipelineStageFlagBits pipelineStage,
Chia-I Wu8f6fd6e2015-10-26 20:14:54 +08006181 VkQueryPool queryPool,
6182 uint32_t slot)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006183{
Chia-I Wu1f851912015-10-27 18:04:07 +08006184 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006185
Chia-I Wu1f851912015-10-27 18:04:07 +08006186 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006187}
6188
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006189bool PostCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006190 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006191 VkQueryPool queryPool,
6192 uint32_t startQuery,
6193 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006194 VkBuffer dstBuffer,
6195 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006196 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006197 VkQueryResultFlags flags)
6198{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006199
6200
6201
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006202
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006203
6204
6205
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006206
6207 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006208}
6209
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006210VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu1f851912015-10-27 18:04:07 +08006211 VkCommandBuffer commandBuffer,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006212 VkQueryPool queryPool,
6213 uint32_t startQuery,
6214 uint32_t queryCount,
Chia-I Wu1f851912015-10-27 18:04:07 +08006215 VkBuffer dstBuffer,
6216 VkDeviceSize dstOffset,
Chia-I Wu1f6942d2015-10-26 18:36:20 +08006217 VkDeviceSize stride,
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006218 VkQueryResultFlags flags)
Jeremy Hayescf469132015-04-17 10:36:53 -06006219{
Chia-I Wu1f851912015-10-27 18:04:07 +08006220 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006221
Chia-I Wu1f851912015-10-27 18:04:07 +08006222 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, startQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayescf469132015-04-17 10:36:53 -06006223}
6224
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006225bool PreCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006226 VkCommandBuffer commandBuffer,
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006227 const void* pValues)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006228{
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006229 if(pValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006230 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006231 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006232
6233 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006234}
6235
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006236bool PostCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006237 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006238 VkPipelineLayout layout,
6239 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006240 uint32_t offset,
6241 uint32_t size)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006242{
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006243
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006244
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006245
6246
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006247
6248 return true;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006249}
6250
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006251VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu1f851912015-10-27 18:04:07 +08006252 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006253 VkPipelineLayout layout,
6254 VkShaderStageFlags stageFlags,
Chia-I Wu932f1bd2015-10-26 20:46:14 +08006255 uint32_t offset,
6256 uint32_t size,
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006257 const void* pValues)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006258{
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006259 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006260
Chia-I Wu0ee0ca02015-11-12 06:09:22 +08006261 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006262
Chia-I Wu1f851912015-10-27 18:04:07 +08006263 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006264}
6265
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006266bool PreCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006267 VkCommandBuffer commandBuffer,
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006268 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006269{
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006270 if(pRenderPassBegin != nullptr)
6271 {
6272 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006273 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07006274 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006275 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006276 return false;
Jon Ashburnf0615e22015-05-25 14:11:37 -06006277 }
Cody Northropc332eef2015-08-04 11:51:03 -06006278 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006279 {
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006280 }
Jon Ashburnf0615e22015-05-25 14:11:37 -06006281 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006282
6283 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006284}
6285
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006286bool PostCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006287 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006288 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006289{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006290
Chia-I Wuc51b1212015-10-27 19:25:11 +08006291 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6292 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006293 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07006294 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006295 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006296 return false;
6297 }
6298
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006299 return true;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006300}
6301
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006302VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006303 VkCommandBuffer commandBuffer,
Chia-I Wuc278df82015-07-07 11:50:03 +08006304 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006305 VkSubpassContents contents)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006306{
Chia-I Wu1f851912015-10-27 18:04:07 +08006307 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006308
Chia-I Wu1f851912015-10-27 18:04:07 +08006309 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006310
Chia-I Wu1f851912015-10-27 18:04:07 +08006311 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006312}
6313
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006314bool PostCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006315 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006316 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006317{
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006318
Chia-I Wuc51b1212015-10-27 19:25:11 +08006319 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6320 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wuc278df82015-07-07 11:50:03 +08006321 {
Courtney Goeltzenleuchterf8fe1282015-11-25 10:30:56 -07006322 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT, (VkDbgObjectType)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuc51b1212015-10-27 19:25:11 +08006323 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006324 return false;
Chia-I Wuc278df82015-07-07 11:50:03 +08006325 }
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006326
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006327 return true;
Chia-I Wuc278df82015-07-07 11:50:03 +08006328}
6329
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006330VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006331 VkCommandBuffer commandBuffer,
Chia-I Wuc51b1212015-10-27 19:25:11 +08006332 VkSubpassContents contents)
Chia-I Wuc278df82015-07-07 11:50:03 +08006333{
Chia-I Wu1f851912015-10-27 18:04:07 +08006334 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wuc278df82015-07-07 11:50:03 +08006335
Chia-I Wu1f851912015-10-27 18:04:07 +08006336 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006337}
6338
6339bool PostCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006340 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006341{
6342
6343 return true;
6344}
6345
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006346VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu1f851912015-10-27 18:04:07 +08006347 VkCommandBuffer commandBuffer)
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006348{
Chia-I Wu1f851912015-10-27 18:04:07 +08006349 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayese841fdc2015-07-29 11:23:46 -06006350
Chia-I Wu1f851912015-10-27 18:04:07 +08006351 PostCmdEndRenderPass(commandBuffer);
Chia-I Wuc278df82015-07-07 11:50:03 +08006352}
6353
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006354bool PreCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006355 VkCommandBuffer commandBuffer,
6356 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006357{
Chia-I Wu1f851912015-10-27 18:04:07 +08006358 if(pCommandBuffers != nullptr)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006359 {
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006360 }
6361
6362 return true;
6363}
6364
6365bool PostCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006366 VkCommandBuffer commandBuffer,
6367 uint32_t commandBuffersCount)
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006368{
6369
6370
6371 return true;
6372}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006373
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006374VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu1f851912015-10-27 18:04:07 +08006375 VkCommandBuffer commandBuffer,
6376 uint32_t commandBuffersCount,
6377 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006378{
Chia-I Wu1f851912015-10-27 18:04:07 +08006379 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayesc27938e2015-07-09 17:11:25 -06006380
Chia-I Wu1f851912015-10-27 18:04:07 +08006381 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu88eaa3b2015-06-26 15:34:39 +08006382
Chia-I Wu1f851912015-10-27 18:04:07 +08006383 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006384}
6385
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006386VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006387{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006388 if (device == NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006389 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006390 }
6391
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006392 /* loader uses this to force layer initialization; device object is wrapped */
6393 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006394 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006395 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006396 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006397
Courtney Goeltzenleuchterbe637992015-06-25 18:01:43 -06006398 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006399 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006400 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006401 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006402 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006403 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006404 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006405 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006406 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006407 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006408 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006409 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu1f851912015-10-27 18:04:07 +08006410 if (!strcmp(funcName, "vkAllocateMemory"))
6411 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006412 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006413 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006414 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006415 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006416 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006417 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006418 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006419 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006420 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006421 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006422 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006423 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006424 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006425 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006426 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006427 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006428 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006429 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006430 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006431 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006432 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006433 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006434 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006435 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006436 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006437 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006438 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006439 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006440 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006441 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006442 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006443 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006444 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006445 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006446 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006447 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006448 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine6715e522015-09-15 14:59:14 -05006450 if (!strcmp(funcName, "vkCreateShaderModule"))
6451 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006452 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburn0d60d272015-07-09 15:02:25 -06006454 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006462 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006463 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006464 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu1f851912015-10-27 18:04:07 +08006466 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6467 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006468 if (!strcmp(funcName, "vkCmdSetViewport"))
6469 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter932cdb52015-09-21 11:44:06 -06006470 if (!strcmp(funcName, "vkCmdSetScissor"))
6471 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter09772bb2015-09-17 15:06:17 -06006472 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6473 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6474 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6475 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6476 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6477 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6478 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6479 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6480 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6481 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6482 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6483 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6484 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6485 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu1f851912015-10-27 18:04:07 +08006486 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6487 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006488 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006489 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006490 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006491 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006502 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006503 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006504 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006506 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006518 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006519 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006520 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006521 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006522 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006523 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006524 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006525 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006526 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wuc278df82015-07-07 11:50:03 +08006556 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006558
Jon Ashburn6f8cd632015-06-01 09:37:38 -06006559 {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006560 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006561 return NULL;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006562 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06006563 }
6564}
6565
Chia-I Wuaf9e4fd2015-11-06 06:42:02 +08006566VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006567{
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006568 if (instance == NULL) {
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006569 return NULL;
Mark Lobodzinski3723c512015-05-26 10:58:40 -05006570 }
6571
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006572 /* loader uses this to force layer initialization; instance object is wrapped */
6573 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006574 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn4f2575f2015-05-28 16:25:02 -06006576 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006577
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter4da96aa2015-07-12 12:52:09 -06006588 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter74c4ce92015-09-14 17:22:16 -06006590 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6591 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6592 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6593 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6594 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6595 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6596 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6597 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006598
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006599 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchtera4c8c712015-07-12 14:35:22 -06006600 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006601 if(fptr)
Courtney Goeltzenleuchter09f85042015-06-01 14:45:27 -06006602 return fptr;
6603
Jeremy Hayesea53d6f2015-06-26 12:48:09 -06006604 {
6605 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6606 return NULL;
6607 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6608 }
Jon Ashburn79b78ac2015-05-05 14:22:52 -06006609}