blob: c35183737819037b6f0617b2d8e765719c7d96a5 [file] [log] [blame]
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001/*
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002 *
Courtney Goeltzenleuchterfcbe16f2015-10-29 13:50:34 -06003 * Copyright (C) 2015 Valve Corporation
Michael Lentine03d8e572015-09-15 14:59:14 -05004 * Copyright (C) 2015 Google, Inc.
Jeremy Hayesa8b1a8d2015-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 Goeltzenleuchter05559522015-10-30 11:14:30 -060023 *
24 * Author: Jeremy Hayes <jeremy@lunarg.com>
25 * Author: Tony Barbour <tony@LunarG.com>
Jeremy Hayesa8b1a8d2015-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 Lobodzinski2eed1eb2015-05-26 10:58:40 -050035#include <unordered_map>
Jeremy Hayes99a96322015-06-26 12:48:09 -060036#include <vector>
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060037
Tobin Ehlisb835d1b2015-07-03 10:34:49 -060038#include "vk_loader_platform.h"
David Pinedo9316d3b2015-11-06 12:54:48 -070039#include "vulkan/vk_layer.h"
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060040#include "vk_layer_config.h"
Courtney Goeltzenleuchterd8e229c2015-04-08 15:36:08 -060041#include "vk_enum_validate_helper.h"
42#include "vk_struct_validate_helper.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060043
Tobin Ehlisa0cb02e2015-07-03 10:15:26 -060044#include "vk_layer_table.h"
45#include "vk_layer_data.h"
46#include "vk_layer_logging.h"
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -060047#include "vk_layer_extension_utils.h"
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -060048
Cody Northrop55443ef2015-09-28 15:09:32 -060049struct layer_data {
Jeremy Hayes99a96322015-06-26 12:48:09 -060050 debug_report_data *report_data;
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070051 std::vector<VkDebugReportCallbackEXT> logging_callback;
Cody Northrop55443ef2015-09-28 15:09:32 -060052
53 layer_data() :
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -060054 report_data(nullptr)
Cody Northrop55443ef2015-09-28 15:09:32 -060055 {};
56};
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -050057
Jeremy Hayes99a96322015-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 Hayesa8b1a8d2015-04-06 13:46:11 -060061
Jeremy Hayes99a96322015-06-26 12:48:09 -060062// "my instance data"
63debug_report_data *mid(VkInstance object)
Tony Barbour59a47322015-06-24 16:06:58 -060064{
Jeremy Hayes99a96322015-06-26 12:48:09 -060065 dispatch_key key = get_dispatch_key(object);
Tobin Ehlisbfbac252015-09-01 11:46:36 -060066 layer_data *data = get_my_data_ptr(key, layer_data_map);
Jeremy Hayes99a96322015-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 Goeltzenleuchter876a4f52015-07-17 10:20:11 -060070 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060071
72 return data->report_data;
73}
74
75// "my device data"
Jeremy Hayes359eeb92015-07-09 17:11:25 -060076debug_report_data *mdd(void* object)
Jeremy Hayes99a96322015-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 Goeltzenleuchter876a4f52015-07-17 10:20:11 -060083 assert(data != NULL);
Jeremy Hayes99a96322015-06-26 12:48:09 -060084 return data->report_data;
85}
86
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -070087static void InitParamChecker(layer_data *data, const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -060088{
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070089 VkDebugReportCallbackEXT callback;
Jeremy Hayes99a96322015-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 Ehlisb1df55e2015-09-15 09:55:54 -060098 log_output = getLayerLogOutput(option_str, "ParamChecker");
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -070099 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700100 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700101 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700102 dbgCreateInfo.flags = report_flags;
103 dbgCreateInfo.pfnCallback = log_callback;
104 dbgCreateInfo.pUserData = log_output;
105
106 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600107 data->logging_callback.push_back(callback);
108 }
109
110 if (debug_action & VK_DBG_LAYER_ACTION_DEBUG_OUTPUT) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700111 VkDebugReportCallbackCreateInfoEXT dbgCreateInfo;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700112 memset(&dbgCreateInfo, 0, sizeof(dbgCreateInfo));
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700113 dbgCreateInfo.sType = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT;
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700114 dbgCreateInfo.flags = report_flags;
115 dbgCreateInfo.pfnCallback = win32_debug_output_msg;
116 dbgCreateInfo.pUserData = NULL;
117
118 layer_create_msg_callback(data->report_data, &dbgCreateInfo, pAllocator, &callback);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -0600119 data->logging_callback.push_back(callback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600120 }
121}
122
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700123VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600124 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700125 const VkDebugReportCallbackCreateInfoEXT *pCreateInfo,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700126 const VkAllocationCallbacks *pAllocator,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700127 VkDebugReportCallbackEXT* pMsgCallback)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600128{
129 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700130 VkResult result = pTable->CreateDebugReportCallbackEXT(instance, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600131
132 if (result == VK_SUCCESS)
133 {
134 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700135 result = layer_create_msg_callback(data->report_data, pCreateInfo, pAllocator, pMsgCallback);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600136 }
137
138 return result;
139}
140
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700141VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDebugReportCallbackEXT(
Jeremy Hayes99a96322015-06-26 12:48:09 -0600142 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700143 VkDebugReportCallbackEXT msgCallback,
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700144 const VkAllocationCallbacks *pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600145{
146 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700147 pTable->DestroyDebugReportCallbackEXT(instance, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600148
149 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -0700150 layer_destroy_msg_callback(data->report_data, msgCallback, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600151}
152
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700153VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDebugReportMessageEXT(
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700154 VkInstance instance,
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700155 VkDebugReportFlagsEXT flags,
156 VkDebugReportObjectTypeEXT objType,
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700157 uint64_t object,
158 size_t location,
159 int32_t msgCode,
160 const char* pLayerPrefix,
161 const char* pMsg)
162{
163 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700164 pTable->DebugReportMessageEXT(instance, flags, objType, object, location, msgCode, pLayerPrefix, pMsg);
Courtney Goeltzenleuchterf0de7242015-12-01 14:10:55 -0700165}
166
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700167static const VkExtensionProperties instance_extensions[] = {
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600168 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -0700169 VK_EXT_DEBUG_REPORT_EXTENSION_NAME,
170 VK_EXT_DEBUG_REPORT_REVISION
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600171 }
172};
Tony Barbour59a47322015-06-24 16:06:58 -0600173
Chia-I Wu9ab61502015-11-06 06:42:02 +0800174VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600175 const char *pLayerName,
176 uint32_t *pCount,
177 VkExtensionProperties* pProperties)
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600178{
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700179 return util_GetExtensionProperties(1, instance_extensions, pCount, pProperties);
Jon Ashburn9fd4cc42015-04-10 14:33:07 -0600180}
181
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700182static const VkLayerProperties pc_global_layers[] = {
183 {
Michael Lentine1f8d4412016-01-19 14:19:38 -0600184 "VK_LAYER_LUNARG_param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700185 VK_API_VERSION,
186 VK_MAKE_VERSION(0, 1, 0),
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700187 "Validation layer: param_checker",
Courtney Goeltzenleuchter52857662015-12-01 14:08:28 -0700188 }
189};
190
Chia-I Wu9ab61502015-11-06 06:42:02 +0800191VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateInstanceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600192 uint32_t *pCount,
193 VkLayerProperties* pProperties)
Tony Barbour59a47322015-06-24 16:06:58 -0600194{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600195 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers),
196 pc_global_layers,
197 pCount, pProperties);
Tony Barbour59a47322015-06-24 16:06:58 -0600198}
199
Chia-I Wu9ab61502015-11-06 06:42:02 +0800200VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceExtensionProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600201 VkPhysicalDevice physicalDevice,
202 const char* pLayerName,
203 uint32_t* pCount,
204 VkExtensionProperties* pProperties)
Jeremy Hayesad367152015-04-17 10:36:53 -0600205{
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600206 /* ParamChecker does not have any physical device extensions */
Jon Ashburn751c4842015-11-02 17:37:20 -0700207 if (pLayerName == NULL) {
208 return get_dispatch_table(pc_instance_table_map, physicalDevice)->EnumerateDeviceExtensionProperties(
209 physicalDevice,
210 NULL,
211 pCount,
212 pProperties);
213 } else {
214 return util_GetExtensionProperties(0, NULL, pCount, pProperties);
215 }
Jeremy Hayesad367152015-04-17 10:36:53 -0600216}
217
Chia-I Wu9ab61502015-11-06 06:42:02 +0800218VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumerateDeviceLayerProperties(
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -0600219 VkPhysicalDevice physicalDevice,
220 uint32_t* pCount,
221 VkLayerProperties* pProperties)
222{
223 /* ParamChecker's physical device layers are the same as global */
224 return util_GetLayerProperties(ARRAY_SIZE(pc_global_layers), pc_global_layers,
225 pCount, pProperties);
226}
Jeremy Hayes99a96322015-06-26 12:48:09 -0600227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600228// Version: 0.138.2
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600229
Jeremy Hayes99a96322015-06-26 12:48:09 -0600230static
231std::string EnumeratorString(VkResult const& enumerator)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600232{
Jeremy Hayes99a96322015-06-26 12:48:09 -0600233 switch(enumerator)
234 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600235 case VK_RESULT_MAX_ENUM:
236 {
237 return "VK_RESULT_MAX_ENUM";
238 break;
239 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600240 case VK_ERROR_LAYER_NOT_PRESENT:
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600241 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600242 return "VK_ERROR_LAYER_NOT_PRESENT";
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600243 break;
244 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600245 case VK_ERROR_INCOMPATIBLE_DRIVER:
246 {
247 return "VK_ERROR_INCOMPATIBLE_DRIVER";
248 break;
249 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600250 case VK_ERROR_MEMORY_MAP_FAILED:
251 {
252 return "VK_ERROR_MEMORY_MAP_FAILED";
253 break;
254 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600255 case VK_INCOMPLETE:
256 {
257 return "VK_INCOMPLETE";
258 break;
259 }
260 case VK_ERROR_OUT_OF_HOST_MEMORY:
261 {
262 return "VK_ERROR_OUT_OF_HOST_MEMORY";
263 break;
264 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600265 case VK_ERROR_INITIALIZATION_FAILED:
266 {
267 return "VK_ERROR_INITIALIZATION_FAILED";
268 break;
269 }
270 case VK_NOT_READY:
271 {
272 return "VK_NOT_READY";
273 break;
274 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600275 case VK_ERROR_OUT_OF_DEVICE_MEMORY:
276 {
277 return "VK_ERROR_OUT_OF_DEVICE_MEMORY";
278 break;
279 }
280 case VK_EVENT_SET:
281 {
282 return "VK_EVENT_SET";
283 break;
284 }
285 case VK_TIMEOUT:
286 {
287 return "VK_TIMEOUT";
288 break;
289 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600290 case VK_EVENT_RESET:
291 {
292 return "VK_EVENT_RESET";
293 break;
294 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600295 case VK_SUCCESS:
296 {
297 return "VK_SUCCESS";
298 break;
299 }
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600300 case VK_ERROR_EXTENSION_NOT_PRESENT:
Jeremy Hayes99a96322015-06-26 12:48:09 -0600301 {
Courtney Goeltzenleuchter55659b72015-09-14 18:01:17 -0600302 return "VK_ERROR_EXTENSION_NOT_PRESENT";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600303 break;
304 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600305 case VK_ERROR_DEVICE_LOST:
306 {
307 return "VK_ERROR_DEVICE_LOST";
308 break;
309 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600310 default:
311 {
312 return "unrecognized enumerator";
313 break;
314 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -0600315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600316}
317
318static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600319bool ValidateEnumerator(VkFormatFeatureFlagBits const& enumerator)
320{
Courtney Goeltzenleuchterf1ece602015-09-10 16:25:49 -0600321 VkFormatFeatureFlagBits allFlags = (VkFormatFeatureFlagBits)(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600322 VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT |
323 VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT |
324 VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT |
325 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT |
326 VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT |
327 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
328 VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT |
329 VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT |
330 VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
Cody Northrop61d6dd62015-08-18 14:58:29 -0600331 VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800332 VK_FORMAT_FEATURE_BLIT_SRC_BIT |
333 VK_FORMAT_FEATURE_BLIT_DST_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600334 if(enumerator & (~allFlags))
335 {
336 return false;
337 }
338
339 return true;
340}
341
342static
343std::string EnumeratorString(VkFormatFeatureFlagBits const& enumerator)
344{
345 if(!ValidateEnumerator(enumerator))
346 {
347 return "unrecognized enumerator";
348 }
349
350 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600351 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT)
352 {
353 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT");
354 }
355 if(enumerator & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)
356 {
357 strings.push_back("VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT");
358 }
359 if(enumerator & VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT)
360 {
361 strings.push_back("VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT");
362 }
363 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT)
364 {
365 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT");
366 }
367 if(enumerator & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)
368 {
369 strings.push_back("VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT");
370 }
371 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT)
372 {
373 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT");
374 }
375 if(enumerator & VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT)
376 {
377 strings.push_back("VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT");
378 }
379 if(enumerator & VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT)
380 {
381 strings.push_back("VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT");
382 }
383 if(enumerator & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)
384 {
385 strings.push_back("VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT");
386 }
387 if(enumerator & VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)
388 {
389 strings.push_back("VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT");
390 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800391 if(enumerator & VK_FORMAT_FEATURE_BLIT_SRC_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600392 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800393 strings.push_back("VK_FORMAT_FEATURE_BLIT_SRC_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600394 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800395 if(enumerator & VK_FORMAT_FEATURE_BLIT_DST_BIT)
Cody Northrop61d6dd62015-08-18 14:58:29 -0600396 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800397 strings.push_back("VK_FORMAT_FEATURE_BLIT_DST_BIT");
Cody Northrop61d6dd62015-08-18 14:58:29 -0600398 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600399
400 std::string enumeratorString;
401 for(auto const& string : strings)
402 {
403 enumeratorString += string;
404
405 if(string != strings.back())
406 {
407 enumeratorString += '|';
408 }
409 }
410
411 return enumeratorString;
412}
413
414static
415bool ValidateEnumerator(VkImageUsageFlagBits const& enumerator)
416{
417 VkImageUsageFlagBits allFlags = (VkImageUsageFlagBits)(VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT |
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600418 VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600419 VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT |
420 VK_IMAGE_USAGE_STORAGE_BIT |
421 VK_IMAGE_USAGE_SAMPLED_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800422 VK_IMAGE_USAGE_TRANSFER_DST_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600423 VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800424 VK_IMAGE_USAGE_TRANSFER_SRC_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600425 if(enumerator & (~allFlags))
426 {
427 return false;
428 }
429
430 return true;
431}
432
433static
434std::string EnumeratorString(VkImageUsageFlagBits const& enumerator)
435{
436 if(!ValidateEnumerator(enumerator))
437 {
438 return "unrecognized enumerator";
439 }
440
441 std::vector<std::string> strings;
442 if(enumerator & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)
443 {
444 strings.push_back("VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT");
445 }
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600446 if(enumerator & VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600447 {
Courtney Goeltzenleuchter660f0ca2015-09-10 14:14:11 -0600448 strings.push_back("VK_IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600449 }
450 if(enumerator & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)
451 {
452 strings.push_back("VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT");
453 }
454 if(enumerator & VK_IMAGE_USAGE_STORAGE_BIT)
455 {
456 strings.push_back("VK_IMAGE_USAGE_STORAGE_BIT");
457 }
458 if(enumerator & VK_IMAGE_USAGE_SAMPLED_BIT)
459 {
460 strings.push_back("VK_IMAGE_USAGE_SAMPLED_BIT");
461 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800462 if(enumerator & VK_IMAGE_USAGE_TRANSFER_DST_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600463 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800464 strings.push_back("VK_IMAGE_USAGE_TRANSFER_DST_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600465 }
466 if(enumerator & VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT)
467 {
468 strings.push_back("VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT");
469 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800470 if(enumerator & VK_IMAGE_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600471 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800472 strings.push_back("VK_IMAGE_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600473 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600474
475 std::string enumeratorString;
476 for(auto const& string : strings)
477 {
478 enumeratorString += string;
479
480 if(string != strings.back())
481 {
482 enumeratorString += '|';
483 }
484 }
485
486 return enumeratorString;
487}
488
489static
Jeremy Hayes99a96322015-06-26 12:48:09 -0600490bool ValidateEnumerator(VkQueueFlagBits const& enumerator)
491{
Chia-I Wuccf3a352015-10-26 20:33:12 +0800492 VkQueueFlagBits allFlags = (VkQueueFlagBits)(
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800493 VK_QUEUE_TRANSFER_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600494 VK_QUEUE_COMPUTE_BIT |
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800495 VK_QUEUE_SPARSE_BINDING_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600496 VK_QUEUE_GRAPHICS_BIT);
497 if(enumerator & (~allFlags))
498 {
499 return false;
500 }
501
502 return true;
503}
504
505static
506std::string EnumeratorString(VkQueueFlagBits const& enumerator)
507{
508 if(!ValidateEnumerator(enumerator))
509 {
510 return "unrecognized enumerator";
511 }
512
513 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800514 if(enumerator & VK_QUEUE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600515 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +0800516 strings.push_back("VK_QUEUE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600517 }
518 if(enumerator & VK_QUEUE_COMPUTE_BIT)
519 {
520 strings.push_back("VK_QUEUE_COMPUTE_BIT");
521 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800522 if(enumerator & VK_QUEUE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600523 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800524 strings.push_back("VK_QUEUE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600525 }
526 if(enumerator & VK_QUEUE_GRAPHICS_BIT)
527 {
528 strings.push_back("VK_QUEUE_GRAPHICS_BIT");
529 }
530
531 std::string enumeratorString;
532 for(auto const& string : strings)
533 {
534 enumeratorString += string;
535
536 if(string != strings.back())
537 {
538 enumeratorString += '|';
539 }
540 }
541
542 return enumeratorString;
543}
544
545static
546bool ValidateEnumerator(VkMemoryPropertyFlagBits const& enumerator)
547{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600548 VkMemoryPropertyFlagBits allFlags = (VkMemoryPropertyFlagBits)(VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800549 VK_MEMORY_PROPERTY_HOST_COHERENT_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600550 VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT |
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800551 VK_MEMORY_PROPERTY_HOST_CACHED_BIT |
552 VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600553 if(enumerator & (~allFlags))
554 {
555 return false;
556 }
557
558 return true;
559}
560
561static
562std::string EnumeratorString(VkMemoryPropertyFlagBits const& enumerator)
563{
564 if(!ValidateEnumerator(enumerator))
565 {
566 return "unrecognized enumerator";
567 }
568
569 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600570 if(enumerator & VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT)
571 {
572 strings.push_back("VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT");
573 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800574 if(enumerator & VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600575 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800576 strings.push_back("VK_MEMORY_PROPERTY_HOST_COHERENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600577 }
578 if(enumerator & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
579 {
580 strings.push_back("VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT");
581 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800582 if(enumerator & VK_MEMORY_PROPERTY_HOST_CACHED_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600583 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800584 strings.push_back("VK_MEMORY_PROPERTY_HOST_CACHED_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600585 }
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800586 if(enumerator & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600587 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800588 strings.push_back("VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600589 }
590
591 std::string enumeratorString;
592 for(auto const& string : strings)
593 {
594 enumeratorString += string;
595
596 if(string != strings.back())
597 {
598 enumeratorString += '|';
599 }
600 }
601
602 return enumeratorString;
603}
604
605static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600606bool ValidateEnumerator(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600607{
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800608 VkMemoryHeapFlagBits allFlags = (VkMemoryHeapFlagBits)(VK_MEMORY_HEAP_DEVICE_LOCAL_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600609 if(enumerator & (~allFlags))
610 {
611 return false;
612 }
613
614 return true;
615}
616
617static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600618std::string EnumeratorString(VkMemoryHeapFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600619{
620 if(!ValidateEnumerator(enumerator))
621 {
622 return "unrecognized enumerator";
623 }
624
625 std::vector<std::string> strings;
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800626 if(enumerator & VK_MEMORY_HEAP_DEVICE_LOCAL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600627 {
Chia-I Wuc8ea02f2015-10-27 18:53:22 +0800628 strings.push_back("VK_MEMORY_HEAP_DEVICE_LOCAL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600629 }
630
631 std::string enumeratorString;
632 for(auto const& string : strings)
633 {
634 enumeratorString += string;
635
636 if(string != strings.back())
637 {
638 enumeratorString += '|';
639 }
640 }
641
642 return enumeratorString;
643}
644
645static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600646bool ValidateEnumerator(VkSparseImageFormatFlagBits const& enumerator)
647{
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800648 VkSparseImageFormatFlagBits allFlags = (VkSparseImageFormatFlagBits)(VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT |
649 VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT |
650 VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600651 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600652 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -0600654 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600655
656 return true;
657}
658
659static
660std::string EnumeratorString(VkSparseImageFormatFlagBits const& enumerator)
661{
662 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -0600663 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600664 return "unrecognized enumerator";
Jeremy Hayes99a96322015-06-26 12:48:09 -0600665 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600666
667 std::vector<std::string> strings;
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800668 if(enumerator & VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600669 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800670 strings.push_back("VK_SPARSE_IMAGE_FORMAT_NONSTANDARD_BLOCK_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600671 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800672 if(enumerator & VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600673 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800674 strings.push_back("VK_SPARSE_IMAGE_FORMAT_ALIGNED_MIP_SIZE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600675 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800676 if(enumerator & VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600677 {
Chia-I Wu2bfb33c2015-10-26 17:24:52 +0800678 strings.push_back("VK_SPARSE_IMAGE_FORMAT_SINGLE_MIPTAIL_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600679 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600680
681 std::string enumeratorString;
682 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600683 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600684 enumeratorString += string;
685
686 if(string != strings.back())
687 {
688 enumeratorString += '|';
689 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600690 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600691
692 return enumeratorString;
693}
694
695static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600696bool ValidateEnumerator(VkFenceCreateFlagBits const& enumerator)
697{
698 VkFenceCreateFlagBits allFlags = (VkFenceCreateFlagBits)(VK_FENCE_CREATE_SIGNALED_BIT);
699 if(enumerator & (~allFlags))
700 {
701 return false;
702 }
703
704 return true;
705}
706
707static
708std::string EnumeratorString(VkFenceCreateFlagBits const& enumerator)
709{
710 if(!ValidateEnumerator(enumerator))
711 {
712 return "unrecognized enumerator";
713 }
714
715 std::vector<std::string> strings;
716 if(enumerator & VK_FENCE_CREATE_SIGNALED_BIT)
717 {
718 strings.push_back("VK_FENCE_CREATE_SIGNALED_BIT");
719 }
720
721 std::string enumeratorString;
722 for(auto const& string : strings)
723 {
724 enumeratorString += string;
725
726 if(string != strings.back())
727 {
728 enumeratorString += '|';
729 }
730 }
731
732 return enumeratorString;
733}
734
735static
736bool ValidateEnumerator(VkQueryPipelineStatisticFlagBits const& enumerator)
737{
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600738 VkQueryPipelineStatisticFlagBits allFlags = (VkQueryPipelineStatisticFlagBits)(VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT |
739 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT |
740 VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT |
741 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT |
742 VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT |
743 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT |
744 VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT |
745 VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT |
746 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT |
747 VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT |
748 VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600749 if(enumerator & (~allFlags))
750 {
751 return false;
752 }
753
754 return true;
755}
756
757static
758std::string EnumeratorString(VkQueryPipelineStatisticFlagBits const& enumerator)
759{
760 if(!ValidateEnumerator(enumerator))
761 {
762 return "unrecognized enumerator";
763 }
764
765 std::vector<std::string> strings;
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600766 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600767 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600768 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_COMPUTE_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600769 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600770 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600771 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600772 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_VERTICES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600773 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600774 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600775 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600776 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_INPUT_ASSEMBLY_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600777 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600778 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600779 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600780 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600781 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600782 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600783 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600784 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_VERTEX_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600785 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600786 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600787 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600788 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600789 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600790 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600791 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600792 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_FRAGMENT_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600793 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600794 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600795 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600796 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_CLIPPING_PRIMITIVES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600797 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600798 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600799 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600800 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_CONTROL_SHADER_PATCHES_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600801 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600802 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600803 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600804 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_GEOMETRY_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600805 }
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600806 if(enumerator & VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600807 {
Courtney Goeltzenleuchterfe1b36e2015-10-15 16:57:32 -0600808 strings.push_back("VK_QUERY_PIPELINE_STATISTIC_TESSELLATION_EVALUATION_SHADER_INVOCATIONS_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600809 }
810
811 std::string enumeratorString;
812 for(auto const& string : strings)
813 {
814 enumeratorString += string;
815
816 if(string != strings.back())
817 {
818 enumeratorString += '|';
819 }
820 }
821
822 return enumeratorString;
823}
824
825static
826bool ValidateEnumerator(VkQueryResultFlagBits const& enumerator)
827{
828 VkQueryResultFlagBits allFlags = (VkQueryResultFlagBits)(VK_QUERY_RESULT_PARTIAL_BIT |
829 VK_QUERY_RESULT_WITH_AVAILABILITY_BIT |
830 VK_QUERY_RESULT_WAIT_BIT |
Jon Ashburnebe92a32015-12-30 14:52:49 -0700831 VK_QUERY_RESULT_64_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -0600832 if(enumerator & (~allFlags))
833 {
834 return false;
835 }
836
837 return true;
838}
839
840static
841std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
842{
843 if(!ValidateEnumerator(enumerator))
844 {
845 return "unrecognized enumerator";
846 }
847
848 std::vector<std::string> strings;
849 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
850 {
851 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
852 }
853 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
854 {
855 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
856 }
857 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
858 {
859 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
860 }
861 if(enumerator & VK_QUERY_RESULT_64_BIT)
862 {
863 strings.push_back("VK_QUERY_RESULT_64_BIT");
864 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600865
866 std::string enumeratorString;
867 for(auto const& string : strings)
868 {
869 enumeratorString += string;
870
871 if(string != strings.back())
872 {
873 enumeratorString += '|';
874 }
875 }
876
877 return enumeratorString;
878}
879
880static
881bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
882{
883 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
884 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
885 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
886 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
887 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800888 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600889 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800890 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600891 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600892 if(enumerator & (~allFlags))
893 {
894 return false;
895 }
896
897 return true;
898}
899
900static
901std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
902{
903 if(!ValidateEnumerator(enumerator))
904 {
905 return "unrecognized enumerator";
906 }
907
908 std::vector<std::string> strings;
909 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
910 {
911 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
912 }
913 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
914 {
915 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
916 }
917 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
918 {
919 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
920 }
921 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
922 {
923 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
924 }
925 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
926 {
927 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
928 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800929 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600930 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800931 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600932 }
933 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
934 {
935 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
936 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800937 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600938 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800939 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600940 }
941 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
942 {
943 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
944 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600945
946 std::string enumeratorString;
947 for(auto const& string : strings)
948 {
949 enumeratorString += string;
950
951 if(string != strings.back())
952 {
953 enumeratorString += '|';
954 }
955 }
956
957 return enumeratorString;
958}
959
960static
961bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
962{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600963 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
964 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600965 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600966 if(enumerator & (~allFlags))
967 {
968 return false;
969 }
970
971 return true;
972}
973
974static
975std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
976{
977 if(!ValidateEnumerator(enumerator))
978 {
979 return "unrecognized enumerator";
980 }
981
982 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600983 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
984 {
985 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
986 }
987 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
988 {
989 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
990 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600991 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600992 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600993 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600994 }
995
996 std::string enumeratorString;
997 for(auto const& string : strings)
998 {
999 enumeratorString += string;
1000
1001 if(string != strings.back())
1002 {
1003 enumeratorString += '|';
1004 }
1005 }
1006
1007 return enumeratorString;
1008}
1009
1010static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001011bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1012{
1013 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001014 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1015 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001016 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001017 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001018 if(enumerator & (~allFlags))
1019 {
1020 return false;
1021 }
1022
1023 return true;
1024}
1025
1026static
1027std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1028{
1029 if(!ValidateEnumerator(enumerator))
1030 {
1031 return "unrecognized enumerator";
1032 }
1033
1034 std::vector<std::string> strings;
1035 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1036 {
1037 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1038 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001039 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1040 {
1041 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1042 }
1043 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1044 {
1045 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1046 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001047 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1048 {
1049 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1050 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001051 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001052 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001053 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001054 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001055
1056 std::string enumeratorString;
1057 for(auto const& string : strings)
1058 {
1059 enumeratorString += string;
1060
1061 if(string != strings.back())
1062 {
1063 enumeratorString += '|';
1064 }
1065 }
1066
1067 return enumeratorString;
1068}
1069
1070static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001071bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001072{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001073 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1074 VK_COLOR_COMPONENT_B_BIT |
1075 VK_COLOR_COMPONENT_G_BIT |
1076 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001077 if(enumerator & (~allFlags))
1078 {
1079 return false;
1080 }
1081
1082 return true;
1083}
1084
1085static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001086std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001087{
1088 if(!ValidateEnumerator(enumerator))
1089 {
1090 return "unrecognized enumerator";
1091 }
1092
1093 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001094 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001095 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001096 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001097 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001098 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001099 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001100 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001101 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001102 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001103 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001104 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001105 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001106 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001107 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001108 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001109 }
1110
1111 std::string enumeratorString;
1112 for(auto const& string : strings)
1113 {
1114 enumeratorString += string;
1115
1116 if(string != strings.back())
1117 {
1118 enumeratorString += '|';
1119 }
1120 }
1121
1122 return enumeratorString;
1123}
1124
1125static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001126bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001127{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001128 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1129 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1130 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001131 if(enumerator & (~allFlags))
1132 {
1133 return false;
1134 }
1135
1136 return true;
1137}
1138
1139static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001140std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001141{
1142 if(!ValidateEnumerator(enumerator))
1143 {
1144 return "unrecognized enumerator";
1145 }
1146
1147 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001148 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001149 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001150 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1151 }
1152 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1153 {
1154 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1155 }
1156 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1157 {
1158 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001159 }
1160
1161 std::string enumeratorString;
1162 for(auto const& string : strings)
1163 {
1164 enumeratorString += string;
1165
1166 if(string != strings.back())
1167 {
1168 enumeratorString += '|';
1169 }
1170 }
1171
1172 return enumeratorString;
1173}
1174
1175static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001176bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001177{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001178 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1179 VK_SHADER_STAGE_FRAGMENT_BIT |
1180 VK_SHADER_STAGE_GEOMETRY_BIT |
1181 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001182 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1183 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001184 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001185 if(enumerator & (~allFlags))
1186 {
1187 return false;
1188 }
1189
1190 return true;
1191}
1192
1193static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001194std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001195{
1196 if(!ValidateEnumerator(enumerator))
1197 {
1198 return "unrecognized enumerator";
1199 }
1200
1201 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001202 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001203 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001204 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001205 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001206 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001207 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001208 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001209 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001210 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001211 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001212 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1213 }
1214 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1215 {
1216 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1217 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001218 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001219 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001220 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001221 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001222 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001223 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001224 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001225 }
1226 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1227 {
1228 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001229 }
1230
1231 std::string enumeratorString;
1232 for(auto const& string : strings)
1233 {
1234 enumeratorString += string;
1235
1236 if(string != strings.back())
1237 {
1238 enumeratorString += '|';
1239 }
1240 }
1241
1242 return enumeratorString;
1243}
1244
1245static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001246bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001247{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001248 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
Chia-I Wu89d0f942015-10-31 00:31:16 +08001249 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001250 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT |
1251 VK_PIPELINE_STAGE_HOST_BIT |
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001252 VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001253 VK_PIPELINE_STAGE_TRANSFER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001254 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001255 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001257 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1258 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1259 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT |
1260 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
1261 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
1262 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
1263 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1264 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1265 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001266 if(enumerator & (~allFlags))
1267 {
1268 return false;
1269 }
1270
1271 return true;
1272}
1273
1274static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001275std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001276{
1277 if(!ValidateEnumerator(enumerator))
1278 {
1279 return "unrecognized enumerator";
1280 }
1281
1282 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001283 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001284 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001285 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1286 }
1287 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1288 {
1289 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001290 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001291 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001292 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001293 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001294 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001295 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001296 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001297 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001298 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001299 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001300 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001301 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001302 }
Jon Ashburn8c0c1432015-12-31 12:32:16 -07001303 if(enumerator & VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001304 {
Jon Ashburn4bf8ba42015-12-31 12:14:37 -07001305 strings.push_back("VK_PIPELINE_STAGE_BOTTOM_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001306 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001307 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001308 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001309 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001311 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001313 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001314 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001315 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001316 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001317 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001318 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001319 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001320 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001321 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001322 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001323 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001324 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001325 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1326 }
1327 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1328 {
1329 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1330 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001331 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001332 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001333 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001334 }
1335 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1336 {
1337 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1338 }
1339 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1340 {
1341 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1342 }
1343 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1344 {
1345 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1346 }
1347 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1348 {
1349 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001350 }
1351
1352 std::string enumeratorString;
1353 for(auto const& string : strings)
1354 {
1355 enumeratorString += string;
1356
1357 if(string != strings.back())
1358 {
1359 enumeratorString += '|';
1360 }
1361 }
1362
1363 return enumeratorString;
1364}
1365
1366static
Chia-I Wua4594202015-10-27 19:54:37 +08001367bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001368{
Chia-I Wua4594202015-10-27 19:54:37 +08001369 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1370 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1371 VK_ACCESS_INDEX_READ_BIT |
1372 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1373 VK_ACCESS_UNIFORM_READ_BIT |
1374 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1375 VK_ACCESS_SHADER_READ_BIT |
1376 VK_ACCESS_SHADER_WRITE_BIT |
1377 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1378 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1379 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1380 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1381 VK_ACCESS_TRANSFER_READ_BIT |
1382 VK_ACCESS_TRANSFER_WRITE_BIT |
1383 VK_ACCESS_HOST_READ_BIT |
1384 VK_ACCESS_HOST_WRITE_BIT |
1385 VK_ACCESS_MEMORY_READ_BIT |
1386 VK_ACCESS_MEMORY_WRITE_BIT);
1387
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001388 if(enumerator & (~allFlags))
1389 {
1390 return false;
1391 }
1392
1393 return true;
1394}
1395
1396static
Chia-I Wua4594202015-10-27 19:54:37 +08001397std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001398{
1399 if(!ValidateEnumerator(enumerator))
1400 {
1401 return "unrecognized enumerator";
1402 }
1403
1404 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001405 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001406 {
Chia-I Wua4594202015-10-27 19:54:37 +08001407 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001408 }
Chia-I Wua4594202015-10-27 19:54:37 +08001409 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001410 {
Chia-I Wua4594202015-10-27 19:54:37 +08001411 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001412 }
Chia-I Wua4594202015-10-27 19:54:37 +08001413 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001414 {
Chia-I Wua4594202015-10-27 19:54:37 +08001415 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001416 }
Chia-I Wua4594202015-10-27 19:54:37 +08001417 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001418 {
Chia-I Wua4594202015-10-27 19:54:37 +08001419 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001420 }
Chia-I Wua4594202015-10-27 19:54:37 +08001421 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001422 {
Chia-I Wua4594202015-10-27 19:54:37 +08001423 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001424 }
Chia-I Wua4594202015-10-27 19:54:37 +08001425 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001426 {
Chia-I Wua4594202015-10-27 19:54:37 +08001427 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001428 }
Chia-I Wua4594202015-10-27 19:54:37 +08001429 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001430 {
Chia-I Wua4594202015-10-27 19:54:37 +08001431 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001432 }
Chia-I Wua4594202015-10-27 19:54:37 +08001433 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001434 {
Chia-I Wua4594202015-10-27 19:54:37 +08001435 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001436 }
Chia-I Wua4594202015-10-27 19:54:37 +08001437 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001438 {
Chia-I Wua4594202015-10-27 19:54:37 +08001439 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001440 }
Chia-I Wua4594202015-10-27 19:54:37 +08001441 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001442 {
Chia-I Wua4594202015-10-27 19:54:37 +08001443 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001444 }
Chia-I Wua4594202015-10-27 19:54:37 +08001445 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001446 {
Chia-I Wua4594202015-10-27 19:54:37 +08001447 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001448 }
Chia-I Wua4594202015-10-27 19:54:37 +08001449 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001450 {
Chia-I Wua4594202015-10-27 19:54:37 +08001451 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001452 }
Chia-I Wua4594202015-10-27 19:54:37 +08001453 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001454 {
Chia-I Wua4594202015-10-27 19:54:37 +08001455 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001456 }
Chia-I Wua4594202015-10-27 19:54:37 +08001457 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001458 {
Chia-I Wua4594202015-10-27 19:54:37 +08001459 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001460 }
Chia-I Wua4594202015-10-27 19:54:37 +08001461 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001462 {
Chia-I Wua4594202015-10-27 19:54:37 +08001463 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001464 }
Chia-I Wua4594202015-10-27 19:54:37 +08001465 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001466 {
Chia-I Wua4594202015-10-27 19:54:37 +08001467 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001468 }
Chia-I Wua4594202015-10-27 19:54:37 +08001469 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001470 {
Chia-I Wua4594202015-10-27 19:54:37 +08001471 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001472 }
1473
1474 std::string enumeratorString;
1475 for(auto const& string : strings)
1476 {
1477 enumeratorString += string;
1478
1479 if(string != strings.back())
1480 {
1481 enumeratorString += '|';
1482 }
1483 }
1484
1485 return enumeratorString;
1486}
1487
1488static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001489bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001490{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001491 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1492 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001493 if(enumerator & (~allFlags))
1494 {
1495 return false;
1496 }
1497
1498 return true;
1499}
1500
1501static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001502std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001503{
1504 if(!ValidateEnumerator(enumerator))
1505 {
1506 return "unrecognized enumerator";
1507 }
1508
1509 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001510 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001511 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001512 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001513 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001514 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001515 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001516 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001517 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001518
1519 std::string enumeratorString;
1520 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001521 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001522 enumeratorString += string;
1523
1524 if(string != strings.back())
1525 {
1526 enumeratorString += '|';
1527 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001528 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001529
1530 return enumeratorString;
1531}
1532
1533static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001534bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001535{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001536 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001537 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001538 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001539 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001540 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001541
1542 return true;
1543}
1544
1545static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001546std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001547{
1548 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001549 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001550 return "unrecognized enumerator";
1551 }
1552
1553 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001554 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001556 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001557 }
1558
1559 std::string enumeratorString;
1560 for(auto const& string : strings)
1561 {
1562 enumeratorString += string;
1563
1564 if(string != strings.back())
1565 {
1566 enumeratorString += '|';
1567 }
1568 }
1569
1570 return enumeratorString;
1571}
1572
1573static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001574bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001575{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001576 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1577 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1578 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001579 if(enumerator & (~allFlags))
1580 {
1581 return false;
1582 }
1583
1584 return true;
1585}
1586
1587static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001588std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001589{
1590 if(!ValidateEnumerator(enumerator))
1591 {
1592 return "unrecognized enumerator";
1593 }
1594
1595 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001596 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001597 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001598 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001599 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001600 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001601 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001602 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001603 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001604 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001605 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001606 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001607 }
1608
1609 std::string enumeratorString;
1610 for(auto const& string : strings)
1611 {
1612 enumeratorString += string;
1613
1614 if(string != strings.back())
1615 {
1616 enumeratorString += '|';
1617 }
1618 }
1619
1620 return enumeratorString;
1621}
1622
1623static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001624bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001625{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001626 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001627 if(enumerator & (~allFlags))
1628 {
1629 return false;
1630 }
1631
1632 return true;
1633}
1634
1635static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001636std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001637{
1638 if(!ValidateEnumerator(enumerator))
1639 {
1640 return "unrecognized enumerator";
1641 }
1642
1643 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001644 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001645 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001646 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001647 }
1648
1649 std::string enumeratorString;
1650 for(auto const& string : strings)
1651 {
1652 enumeratorString += string;
1653
1654 if(string != strings.back())
1655 {
1656 enumeratorString += '|';
1657 }
1658 }
1659
1660 return enumeratorString;
1661}
1662
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001663static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001664bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001665{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001666 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1667 VK_IMAGE_ASPECT_STENCIL_BIT |
1668 VK_IMAGE_ASPECT_DEPTH_BIT |
1669 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001670 if(enumerator & (~allFlags))
1671 {
1672 return false;
1673 }
1674
1675 return true;
1676}
1677
1678static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001679std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001680{
1681 if(!ValidateEnumerator(enumerator))
1682 {
1683 return "unrecognized enumerator";
1684 }
1685
1686 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001687 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001688 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001689 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1690 }
1691 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1692 {
1693 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1694 }
1695 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1696 {
1697 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1698 }
1699 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1700 {
1701 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1702 }
1703
1704 std::string enumeratorString;
1705 for(auto const& string : strings)
1706 {
1707 enumeratorString += string;
1708
1709 if(string != strings.back())
1710 {
1711 enumeratorString += '|';
1712 }
1713 }
1714
1715 return enumeratorString;
1716}
1717
1718static
1719bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1720{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001721 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001722 if(enumerator & (~allFlags))
1723 {
1724 return false;
1725 }
1726
1727 return true;
1728}
1729
1730static
1731std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1732{
1733 if(!ValidateEnumerator(enumerator))
1734 {
1735 return "unrecognized enumerator";
1736 }
1737
1738 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001739 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001740 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001741 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001742 }
1743
1744 std::string enumeratorString;
1745 for(auto const& string : strings)
1746 {
1747 enumeratorString += string;
1748
1749 if(string != strings.back())
1750 {
1751 enumeratorString += '|';
1752 }
1753 }
1754
1755 return enumeratorString;
1756}
1757
Chia-I Wu9ab61502015-11-06 06:42:02 +08001758VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001759 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001760 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001761 VkInstance* pInstance)
1762{
1763 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001764 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001765
1766 if (result == VK_SUCCESS) {
1767 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Jon Ashburnf19916e2016-01-11 13:12:43 -07001768 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001769 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -07001771 InitParamChecker(data, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001772 }
1773
1774 return result;
1775}
1776
Chia-I Wu9ab61502015-11-06 06:42:02 +08001777VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001778 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001779 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001780{
1781 // Grab the key before the instance is destroyed.
1782 dispatch_key key = get_dispatch_key(instance);
1783 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001784 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001785
1786 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001787 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1788 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001789 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001790 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001791 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001792 }
1793
1794 layer_debug_report_destroy_instance(mid(instance));
1795 layer_data_map.erase(pTable);
1796
1797 pc_instance_table_map.erase(key);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001798}
1799
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001800bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001801 VkInstance instance,
1802 uint32_t* pPhysicalDeviceCount,
1803 VkPhysicalDevice* pPhysicalDevices,
1804 VkResult result)
1805{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001806
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001807 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001808 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001809 }
1810
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001811 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813 }
1814
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001815 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001816 {
1817 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001818 log_msg(mid(instance), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001819 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001820 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001821
1822 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001823}
1824
Chia-I Wu9ab61502015-11-06 06:42:02 +08001825VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001826 VkInstance instance,
1827 uint32_t* pPhysicalDeviceCount,
1828 VkPhysicalDevice* pPhysicalDevices)
1829{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001830 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1831
1832 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1833
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001834 return result;
1835}
1836
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001837bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001838 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001839 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001840{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001842 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001843 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844 }
1845
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001846 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001847}
1848
Chia-I Wu9ab61502015-11-06 06:42:02 +08001849VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001850 VkPhysicalDevice physicalDevice,
1851 VkPhysicalDeviceFeatures* pFeatures)
1852{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001853 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001854
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001855 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001856}
1857
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001858bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001859 VkPhysicalDevice physicalDevice,
1860 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001861 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001862{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863
1864 if(format < VK_FORMAT_BEGIN_RANGE ||
1865 format > VK_FORMAT_END_RANGE)
1866 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001867 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001868 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001869 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001870 }
1871
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001872 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001873 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874 }
1875
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001876 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001877}
1878
Chia-I Wu9ab61502015-11-06 06:42:02 +08001879VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880 VkPhysicalDevice physicalDevice,
1881 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001882 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001883{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001884 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001885
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001886 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001887}
1888
1889bool PostGetPhysicalDeviceImageFormatProperties(
1890 VkPhysicalDevice physicalDevice,
1891 VkFormat format,
1892 VkImageType type,
1893 VkImageTiling tiling,
1894 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001895 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001896 VkImageFormatProperties* pImageFormatProperties,
1897 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001898{
1899
1900 if(format < VK_FORMAT_BEGIN_RANGE ||
1901 format > VK_FORMAT_END_RANGE)
1902 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001903 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1905 return false;
1906 }
1907
1908 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1909 type > VK_IMAGE_TYPE_END_RANGE)
1910 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001911 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001912 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1913 return false;
1914 }
1915
1916 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1917 tiling > VK_IMAGE_TILING_END_RANGE)
1918 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001919 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001920 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1921 return false;
1922 }
1923
1924
1925 if(pImageFormatProperties != nullptr)
1926 {
1927 }
1928
Chia-I Wu17241042015-10-31 00:31:16 +08001929 if(result < VK_SUCCESS)
1930 {
1931 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001932 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu17241042015-10-31 00:31:16 +08001933 return false;
1934 }
1935
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001936 return true;
1937}
1938
Chia-I Wu9ab61502015-11-06 06:42:02 +08001939VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001940 VkPhysicalDevice physicalDevice,
1941 VkFormat format,
1942 VkImageType type,
1943 VkImageTiling tiling,
1944 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001945 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001946 VkImageFormatProperties* pImageFormatProperties)
1947{
Chia-I Wu17241042015-10-31 00:31:16 +08001948 VkResult result = get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001949
Chia-I Wu17241042015-10-31 00:31:16 +08001950 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1951
1952 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001953}
1954
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001955bool PostGetPhysicalDeviceProperties(
1956 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001957 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001958{
1959
1960 if(pProperties != nullptr)
1961 {
1962 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1963 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1964 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001965 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001966 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1967 return false;
1968 }
1969 }
1970
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001971 return true;
1972}
1973
Chia-I Wu9ab61502015-11-06 06:42:02 +08001974VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001975 VkPhysicalDevice physicalDevice,
1976 VkPhysicalDeviceProperties* pProperties)
1977{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001978 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001979
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001980 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001981}
1982
Cody Northropd0802882015-08-03 17:04:53 -06001983bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001984 VkPhysicalDevice physicalDevice,
1985 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001986 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001987{
1988
Cody Northropd0802882015-08-03 17:04:53 -06001989 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001990 {
1991 }
1992
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001993 if(pQueueProperties != nullptr)
1994 {
1995 }
1996
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001997 return true;
1998}
1999
Chia-I Wu9ab61502015-11-06 06:42:02 +08002000VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002001 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002002 uint32_t* pCount,
2003 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002004{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002005 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002006
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002007 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002008}
2009
2010bool PostGetPhysicalDeviceMemoryProperties(
2011 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002012 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002013{
2014
2015 if(pMemoryProperties != nullptr)
2016 {
2017 }
2018
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019 return true;
2020}
2021
Chia-I Wu9ab61502015-11-06 06:42:02 +08002022VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002023 VkPhysicalDevice physicalDevice,
2024 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2025{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002026 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002027
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002028 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029}
2030
Chia-I Wu9ab61502015-11-06 06:42:02 +08002031VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002032 VkPhysicalDevice physicalDevice,
2033 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002034 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002035 VkDevice* pDevice)
2036{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002037 /*
2038 * NOTE: The loader fills in the ICD's device object in *pDevice.
2039 * Use that object to get the dispatch table.
2040 *
2041 * NOTE: We do not validate physicalDevice or any dispatchable
2042 * object as the first parameter. We couldn't get here if it was wrong!
2043 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002044 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002045 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002046 if(result == VK_SUCCESS)
2047 {
2048 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2049 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2050 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2051 }
2052
2053 return result;
2054}
2055
Chia-I Wu9ab61502015-11-06 06:42:02 +08002056VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002057 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002058 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002059{
2060 layer_debug_report_destroy_device(device);
2061
2062 dispatch_key key = get_dispatch_key(device);
2063#if DISPATCH_MAP_DEBUG
2064 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2065#endif
2066
Chia-I Wuf7458c52015-10-26 21:10:41 +08002067 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002068 pc_device_table_map.erase(key);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002069}
2070
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002071bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002072 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002073 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002074 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002075 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002076{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002077
2078
2079
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002080 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002082 }
2083
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002084 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002085}
2086
Chia-I Wu9ab61502015-11-06 06:42:02 +08002087VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002089 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002090 uint32_t queueIndex,
2091 VkQueue* pQueue)
2092{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002093 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002094
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002095 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096}
2097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002098bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002099 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002100 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002102 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002103 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002104 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002105 return false;
2106 }
2107
2108 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002109 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002111
2112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002113}
2114
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002115bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002116 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002117 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 VkFence fence,
2119 VkResult result)
2120{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002121
2122
Jeremy Hayes99a96322015-06-26 12:48:09 -06002123
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002124 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002125 {
2126 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002127 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002128 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002129 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002130
2131 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002132}
2133
Chia-I Wu9ab61502015-11-06 06:42:02 +08002134VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002135 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002136 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002137 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002138 VkFence fence)
2139{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002140 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002141 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002142 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002143
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002144 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002146 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002147
2148 return result;
2149}
2150
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002151bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002152 VkQueue queue,
2153 VkResult result)
2154{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002155
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002156 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157 {
2158 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002159 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002160 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002161 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002162
2163 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002164}
2165
Chia-I Wu9ab61502015-11-06 06:42:02 +08002166VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002167 VkQueue queue)
2168{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2170
2171 PostQueueWaitIdle(queue, result);
2172
2173 return result;
2174}
2175
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002176bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002177 VkDevice device,
2178 VkResult result)
2179{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002180
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002181 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182 {
2183 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002184 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002185 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002186 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002187
2188 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189}
2190
Chia-I Wu9ab61502015-11-06 06:42:02 +08002191VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002192 VkDevice device)
2193{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2195
2196 PostDeviceWaitIdle(device, result);
2197
2198 return result;
2199}
2200
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002201bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002202 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002203 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002205 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002206 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002207 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002208 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002209 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002210 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002211 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002212 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002213 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002214
2215 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002216}
2217
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002218bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002220 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 VkResult result)
2222{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002224 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 }
2227
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002228 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002229 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002230 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002231 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002232 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002234
2235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002236}
2237
Chia-I Wu9ab61502015-11-06 06:42:02 +08002238VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002239 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002240 const VkMemoryAllocateInfo* pAllocateInfo,
2241 const VkAllocationCallbacks* pAllocator,
2242 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002244 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002245
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002246 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002247
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002248 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249
2250 return result;
2251}
2252
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002253bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002254 VkDevice device,
2255 VkDeviceMemory mem,
2256 VkDeviceSize offset,
2257 VkDeviceSize size,
2258 VkMemoryMapFlags flags,
2259 void** ppData,
2260 VkResult result)
2261{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002262
Jeremy Hayes99a96322015-06-26 12:48:09 -06002263
2264
2265
2266
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002267 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002268 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002269 }
2270
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002271 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002272 {
2273 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002274 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002275 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002276 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002277
2278 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279}
2280
Chia-I Wu9ab61502015-11-06 06:42:02 +08002281VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002282 VkDevice device,
2283 VkDeviceMemory mem,
2284 VkDeviceSize offset,
2285 VkDeviceSize size,
2286 VkMemoryMapFlags flags,
2287 void** ppData)
2288{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002289 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2290
2291 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2292
2293 return result;
2294}
2295
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002296bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002297 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002298 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002300 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002301 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002302 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002303 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002304 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002305 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002306 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002307 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002308 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002309
2310 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002311}
2312
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002313bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002314 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002315 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316 VkResult result)
2317{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318
2319
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002320 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 {
2322 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002323 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002324 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002325 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002326
2327 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328}
2329
Chia-I Wu9ab61502015-11-06 06:42:02 +08002330VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002331 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002332 uint32_t memoryRangeCount,
2333 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002334{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002335 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002336
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002338
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002339 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002340
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002341 return result;
2342}
2343
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002344bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002345 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002346 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002348 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002349 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002350 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002351 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002352 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002353 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002354 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002355 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002356 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002357
2358 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002359}
2360
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002361bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002362 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002363 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002364 VkResult result)
2365{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366
2367
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002368 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002369 {
2370 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002371 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002372 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002373 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002374
2375 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376}
2377
Chia-I Wu9ab61502015-11-06 06:42:02 +08002378VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002379 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002380 uint32_t memoryRangeCount,
2381 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002382{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002383 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002384
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002385 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002386
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002387 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002388
Tony Barbourb1250542015-04-16 19:23:13 -06002389 return result;
2390}
2391
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002392bool PostGetDeviceMemoryCommitment(
2393 VkDevice device,
2394 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002395 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002396{
2397
2398
2399 if(pCommittedMemoryInBytes != nullptr)
2400 {
2401 }
2402
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002403 return true;
2404}
2405
Chia-I Wu9ab61502015-11-06 06:42:02 +08002406VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002407 VkDevice device,
2408 VkDeviceMemory memory,
2409 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002410{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002411 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002412
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002413 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002414}
2415
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002416bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002417 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002418 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002420 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002422{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002424
Jeremy Hayes99a96322015-06-26 12:48:09 -06002425
2426
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002427 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002428 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002429 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002430 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002432 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002433
2434 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435}
2436
Chia-I Wu9ab61502015-11-06 06:42:02 +08002437VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002438 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002439 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002440 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002441 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002443 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002445 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002446
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002447 return result;
2448}
2449
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002450bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002451 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002452 VkImage image,
2453 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002454 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002455 VkResult result)
2456{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002457
2458
2459
2460
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002461 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002462 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002463 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002464 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002466 }
2467
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002468 return true;
2469}
2470
Chia-I Wu9ab61502015-11-06 06:42:02 +08002471VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002472 VkDevice device,
2473 VkImage image,
2474 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002475 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002476{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002477 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002478
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002479 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480
2481 return result;
2482}
2483
2484bool PostGetBufferMemoryRequirements(
2485 VkDevice device,
2486 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002487 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002488{
2489
2490
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002491 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002492 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002493 }
2494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495 return true;
2496}
2497
Chia-I Wu9ab61502015-11-06 06:42:02 +08002498VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002499 VkDevice device,
2500 VkBuffer buffer,
2501 VkMemoryRequirements* pMemoryRequirements)
2502{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002503 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002504
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002505 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002506}
2507
2508bool PostGetImageMemoryRequirements(
2509 VkDevice device,
2510 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002511 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002512{
2513
2514
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002515 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002516 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002517 }
2518
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 return true;
2520}
2521
Chia-I Wu9ab61502015-11-06 06:42:02 +08002522VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002523 VkDevice device,
2524 VkImage image,
2525 VkMemoryRequirements* pMemoryRequirements)
2526{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002527 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002528
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002529 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002530}
2531
2532bool PostGetImageSparseMemoryRequirements(
2533 VkDevice device,
2534 VkImage image,
2535 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002536 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002537{
2538
2539
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002540 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002541 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002542 }
2543
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002544 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002545 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002546 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002547 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002548 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002549 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002550 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002551 return false;
2552 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553 }
2554
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555 return true;
2556}
2557
Chia-I Wu9ab61502015-11-06 06:42:02 +08002558VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002559 VkDevice device,
2560 VkImage image,
2561 uint32_t* pNumRequirements,
2562 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2563{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002564 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002565
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002566 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567}
2568
2569bool PostGetPhysicalDeviceSparseImageFormatProperties(
2570 VkPhysicalDevice physicalDevice,
2571 VkFormat format,
2572 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002573 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574 VkImageUsageFlags usage,
2575 VkImageTiling tiling,
2576 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002577 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002578{
2579
2580 if(format < VK_FORMAT_BEGIN_RANGE ||
2581 format > VK_FORMAT_END_RANGE)
2582 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002583 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002584 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002585 return false;
2586 }
2587
2588 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2589 type > VK_IMAGE_TYPE_END_RANGE)
2590 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002591 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002592 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002593 return false;
2594 }
2595
2596
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002597
2598 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2599 tiling > VK_IMAGE_TILING_END_RANGE)
2600 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002601 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002602 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002603 return false;
2604 }
2605
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002606 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002607 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002608 }
2609
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002610 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002611 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002612 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002613 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002615 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002616 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002617 return false;
2618 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 }
2620
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 return true;
2622}
2623
Chia-I Wu9ab61502015-11-06 06:42:02 +08002624VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002625 VkPhysicalDevice physicalDevice,
2626 VkFormat format,
2627 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002628 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002629 VkImageUsageFlags usage,
2630 VkImageTiling tiling,
2631 uint32_t* pNumProperties,
2632 VkSparseImageFormatProperties* pProperties)
2633{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002634 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002635
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002636 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637}
2638
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002639bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002640 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002641 uint32_t bindInfoCount,
2642 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002643{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002644 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002646 }
2647
2648 return true;
2649}
2650
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002651bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002653 uint32_t bindInfoCount,
2654 const VkBindSparseInfo* pBindInfo,
2655 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002656 VkResult result)
2657{
2658
2659
2660
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002661 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002662 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002663 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002664 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002665 return false;
2666 }
2667
2668 return true;
2669}
2670
Chia-I Wu9ab61502015-11-06 06:42:02 +08002671VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002673 uint32_t bindInfoCount,
2674 const VkBindSparseInfo* pBindInfo,
2675 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002676{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002677 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002678
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002679 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002680
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002681 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002682
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002683 return result;
2684}
2685
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002686bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002687 VkDevice device,
2688 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002689{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002690 if(pCreateInfo != nullptr)
2691 {
2692 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002693 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002694 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002695 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002696 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002697 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002698 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002699
2700 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002701}
2702
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002704 VkDevice device,
2705 VkFence* pFence,
2706 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002707{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002708
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002709 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002710 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002711 }
2712
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002713 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002714 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002715 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002716 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002717 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002718 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002719
2720 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002721}
2722
Chia-I Wu9ab61502015-11-06 06:42:02 +08002723VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002724 VkDevice device,
2725 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002726 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002727 VkFence* pFence)
2728{
2729 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002730
Chia-I Wuf7458c52015-10-26 21:10:41 +08002731 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002732
2733 PostCreateFence(device, pFence, result);
2734
2735 return result;
2736}
2737
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002738bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002739 VkDevice device,
2740 const VkFence* pFences)
2741{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002742 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002743 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002744 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002745
2746 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002747}
2748
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002749bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002750 VkDevice device,
2751 uint32_t fenceCount,
2752 VkResult result)
2753{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002754
2755
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002756 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002757 {
2758 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002759 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002760 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002761 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002762
2763 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002764}
2765
Chia-I Wu9ab61502015-11-06 06:42:02 +08002766VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002767 VkDevice device,
2768 uint32_t fenceCount,
2769 const VkFence* pFences)
2770{
2771 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002772
Jeremy Hayes99a96322015-06-26 12:48:09 -06002773 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2774
2775 PostResetFences(device, fenceCount, result);
2776
2777 return result;
2778}
2779
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002780bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002781 VkDevice device,
2782 VkFence fence,
2783 VkResult result)
2784{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002785
Jeremy Hayes99a96322015-06-26 12:48:09 -06002786
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002787 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788 {
2789 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002790 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002791 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002793
2794 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002795}
2796
Chia-I Wu9ab61502015-11-06 06:42:02 +08002797VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002798 VkDevice device,
2799 VkFence fence)
2800{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002801 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2802
2803 PostGetFenceStatus(device, fence, result);
2804
2805 return result;
2806}
2807
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002808bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002809 VkDevice device,
2810 const VkFence* pFences)
2811{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002812 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002813 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002814 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002815
2816 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002817}
2818
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002819bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 VkDevice device,
2821 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002822 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002823 uint64_t timeout,
2824 VkResult result)
2825{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002826
2827
2828
2829
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002830 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002831 {
2832 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002833 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002834 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002835 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002836
2837 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002838}
2839
Chia-I Wu9ab61502015-11-06 06:42:02 +08002840VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002841 VkDevice device,
2842 uint32_t fenceCount,
2843 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002844 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845 uint64_t timeout)
2846{
2847 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002848
Jeremy Hayes99a96322015-06-26 12:48:09 -06002849 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2850
2851 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2852
2853 return result;
2854}
2855
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002856bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002857 VkDevice device,
2858 const VkSemaphoreCreateInfo* pCreateInfo)
2859{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002860 if(pCreateInfo != nullptr)
2861 {
2862 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002863 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002864 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002865 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002866 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002867 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002868 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002869
2870 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002871}
2872
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002873bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002874 VkDevice device,
2875 VkSemaphore* pSemaphore,
2876 VkResult result)
2877{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002878
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002879 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 }
2882
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002883 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002884 {
2885 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002886 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002887 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002888 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002889
2890 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891}
2892
Chia-I Wu9ab61502015-11-06 06:42:02 +08002893VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002894 VkDevice device,
2895 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002896 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002897 VkSemaphore* pSemaphore)
2898{
2899 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002900
Chia-I Wuf7458c52015-10-26 21:10:41 +08002901 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002902
2903 PostCreateSemaphore(device, pSemaphore, result);
2904
2905 return result;
2906}
2907
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002908bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002909 VkDevice device,
2910 const VkEventCreateInfo* pCreateInfo)
2911{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002912 if(pCreateInfo != nullptr)
2913 {
2914 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002915 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002916 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002917 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002918 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002919 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002920 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002921
2922 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002923}
2924
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002925bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002926 VkDevice device,
2927 VkEvent* pEvent,
2928 VkResult result)
2929{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002930
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002931 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002933 }
2934
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002935 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002936 {
2937 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002938 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002939 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002940 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002941
2942 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002943}
2944
Chia-I Wu9ab61502015-11-06 06:42:02 +08002945VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002946 VkDevice device,
2947 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002948 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002949 VkEvent* pEvent)
2950{
2951 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002952
Chia-I Wuf7458c52015-10-26 21:10:41 +08002953 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002954
2955 PostCreateEvent(device, pEvent, result);
2956
2957 return result;
2958}
2959
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002960bool PostGetEventStatus(
2961 VkDevice device,
2962 VkEvent event,
2963 VkResult result)
2964{
2965
Jeremy Hayes99a96322015-06-26 12:48:09 -06002966
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002967 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968 {
2969 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002970 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002972 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002973
2974 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002975}
2976
Chia-I Wu9ab61502015-11-06 06:42:02 +08002977VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002978 VkDevice device,
2979 VkEvent event)
2980{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002981 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2982
2983 PostGetEventStatus(device, event, result);
2984
2985 return result;
2986}
2987
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002988bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002989 VkDevice device,
2990 VkEvent event,
2991 VkResult result)
2992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002993
Jeremy Hayes99a96322015-06-26 12:48:09 -06002994
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002995 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996 {
2997 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002998 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002999 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003001
3002 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003003}
3004
Chia-I Wu9ab61502015-11-06 06:42:02 +08003005VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003006 VkDevice device,
3007 VkEvent event)
3008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003009 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3010
3011 PostSetEvent(device, event, result);
3012
3013 return result;
3014}
3015
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003016bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003017 VkDevice device,
3018 VkEvent event,
3019 VkResult result)
3020{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003021
Jeremy Hayes99a96322015-06-26 12:48:09 -06003022
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003023 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024 {
3025 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003026 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003027 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003029
3030 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003031}
3032
Chia-I Wu9ab61502015-11-06 06:42:02 +08003033VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003034 VkDevice device,
3035 VkEvent event)
3036{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003037 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3038
3039 PostResetEvent(device, event, result);
3040
3041 return result;
3042}
3043
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003044bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003045 VkDevice device,
3046 const VkQueryPoolCreateInfo* pCreateInfo)
3047{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003048 if(pCreateInfo != nullptr)
3049 {
3050 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003051 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003052 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003053 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003054 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003055 }
3056 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3057 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3058 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003059 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003060 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003061 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003062 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003063 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003064
3065 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003066}
3067
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003068bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069 VkDevice device,
3070 VkQueryPool* pQueryPool,
3071 VkResult result)
3072{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003074 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 }
3077
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003078 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003079 {
3080 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003081 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003082 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003084
3085 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003086}
3087
Chia-I Wu9ab61502015-11-06 06:42:02 +08003088VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003089 VkDevice device,
3090 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003091 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003092 VkQueryPool* pQueryPool)
3093{
3094 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003095
Chia-I Wuf7458c52015-10-26 21:10:41 +08003096 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003097
3098 PostCreateQueryPool(device, pQueryPool, result);
3099
3100 return result;
3101}
3102
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003103bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003104 VkDevice device,
3105 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003106 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003107 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003108 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003110 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 VkQueryResultFlags flags,
3112 VkResult result)
3113{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114
Jeremy Hayes99a96322015-06-26 12:48:09 -06003115
3116
3117
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003118 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003119 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003120 }
3121
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003123 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124 {
3125 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003126 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003127 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003128 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003129
3130 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131}
3132
Chia-I Wu9ab61502015-11-06 06:42:02 +08003133VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003134 VkDevice device,
3135 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003136 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003137 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003138 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003140 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 VkQueryResultFlags flags)
3142{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003143 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003145 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146
3147 return result;
3148}
3149
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003150bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003151 VkDevice device,
3152 const VkBufferCreateInfo* pCreateInfo)
3153{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003154 if(pCreateInfo != nullptr)
3155 {
3156 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003157 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003158 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003159 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003160 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003161 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003162 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3163 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003164 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003165 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003166 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003169 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003172 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003173
3174 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003175}
3176
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003177bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178 VkDevice device,
3179 VkBuffer* pBuffer,
3180 VkResult result)
3181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003183 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 }
3186
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003187 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003188 {
3189 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003190 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003191 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003193
3194 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195}
3196
Chia-I Wu9ab61502015-11-06 06:42:02 +08003197VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003198 VkDevice device,
3199 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003200 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003201 VkBuffer* pBuffer)
3202{
3203 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003204
Chia-I Wuf7458c52015-10-26 21:10:41 +08003205 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003206
3207 PostCreateBuffer(device, pBuffer, result);
3208
3209 return result;
3210}
3211
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003212bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003213 VkDevice device,
3214 const VkBufferViewCreateInfo* pCreateInfo)
3215{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003216 if(pCreateInfo != nullptr)
3217 {
3218 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003219 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003220 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003221 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003223 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003224 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3225 pCreateInfo->format > VK_FORMAT_END_RANGE)
3226 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003227 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003228 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003229 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003231 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003232
3233 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003234}
3235
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003237 VkDevice device,
3238 VkBufferView* pView,
3239 VkResult result)
3240{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003241
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003242 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003243 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244 }
3245
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003246 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003247 {
3248 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003249 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003250 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003252
3253 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254}
3255
Chia-I Wu9ab61502015-11-06 06:42:02 +08003256VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003257 VkDevice device,
3258 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003259 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003260 VkBufferView* pView)
3261{
3262 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003263
Chia-I Wuf7458c52015-10-26 21:10:41 +08003264 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003265
3266 PostCreateBufferView(device, pView, result);
3267
3268 return result;
3269}
3270
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003271bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003272 VkDevice device,
3273 const VkImageCreateInfo* pCreateInfo)
3274{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003275 if(pCreateInfo != nullptr)
3276 {
3277 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003278 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003279 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003280 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003281 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003282 }
3283 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3284 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3285 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003286 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003287 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003288 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289 }
3290 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3291 pCreateInfo->format > VK_FORMAT_END_RANGE)
3292 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003293 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003294 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003295 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296 }
3297 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3298 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3299 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003300 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003301 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003302 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003303 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003304 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3305 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003306 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003307 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003308 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003309 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003311 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003313 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003315
3316 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003317}
3318
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003319bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003320 VkDevice device,
3321 VkImage* pImage,
3322 VkResult result)
3323{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003324
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003325 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003326 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327 }
3328
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003329 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003330 {
3331 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003332 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003333 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003334 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003335
3336 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003337}
3338
Chia-I Wu9ab61502015-11-06 06:42:02 +08003339VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003340 VkDevice device,
3341 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003342 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003343 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003344{
3345 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003346
Chia-I Wuf7458c52015-10-26 21:10:41 +08003347 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003348
3349 PostCreateImage(device, pImage, result);
3350
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003351 return result;
3352}
3353
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003354bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003355 VkDevice device,
3356 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003357{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003358 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003359 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003360 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003361 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003363 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003364 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003365 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003366 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003367 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003368
3369 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003370}
3371
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003372bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003373 VkDevice device,
3374 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003375 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003376{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003377
Jeremy Hayes99a96322015-06-26 12:48:09 -06003378
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003379 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003381 }
3382
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003383 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384}
3385
Chia-I Wu9ab61502015-11-06 06:42:02 +08003386VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 VkDevice device,
3388 VkImage image,
3389 const VkImageSubresource* pSubresource,
3390 VkSubresourceLayout* pLayout)
3391{
3392 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003393
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003394 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003395
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003396 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397}
3398
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003399bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003400 VkDevice device,
3401 const VkImageViewCreateInfo* pCreateInfo)
3402{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003403 if(pCreateInfo != nullptr)
3404 {
3405 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003406 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003407 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003408 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003409 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003410 }
3411 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3412 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3413 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003414 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003415 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003416 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417 }
3418 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3419 pCreateInfo->format > VK_FORMAT_END_RANGE)
3420 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003421 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003422 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003425 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3426 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003427 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003428 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003429 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003430 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003432 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3433 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003434 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003435 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003436 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003437 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003438 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003439 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3440 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003441 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003442 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003443 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003444 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003446 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3447 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003448 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003449 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003450 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003451 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003452 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003453 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003454
3455 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003456}
3457
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003458bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459 VkDevice device,
3460 VkImageView* pView,
3461 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003462{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003463
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003464 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003466 }
3467
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003468 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003469 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003470 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003471 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003472 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003474
3475 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003476}
3477
Chia-I Wu9ab61502015-11-06 06:42:02 +08003478VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003479 VkDevice device,
3480 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003481 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003482 VkImageView* pView)
3483{
3484 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003485
Chia-I Wuf7458c52015-10-26 21:10:41 +08003486 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003487
3488 PostCreateImageView(device, pView, result);
3489
3490 return result;
3491}
3492
Michael Lentine03d8e572015-09-15 14:59:14 -05003493bool PreCreateShaderModule(
3494 VkDevice device,
3495 const VkShaderModuleCreateInfo* pCreateInfo)
3496{
3497 if(pCreateInfo) {
3498 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003499 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003500 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3501 return false;
3502 }
3503 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003504 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003505 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3506 return false;
3507 }
3508 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003509 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003510 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3511 return false;
3512 }
3513
3514 return true;
3515}
3516
3517bool PostCreateShaderModule(
3518 VkDevice device,
3519 VkShaderModule* pShaderModule,
3520 VkResult result)
3521{
3522 if(result < VK_SUCCESS) {
3523 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003524 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine03d8e572015-09-15 14:59:14 -05003525 return false;
3526 }
3527
3528 return true;
3529}
3530
Chia-I Wu9ab61502015-11-06 06:42:02 +08003531VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003532 VkDevice device,
3533 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003534 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003535 VkShaderModule* pShaderModule)
3536{
3537 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003538 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003539 PostCreateShaderModule(device, pShaderModule, result);
3540 return result;
3541}
3542
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003543bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003544 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003545 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003547 if(pCreateInfo != nullptr)
3548 {
3549 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003550 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003551 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003552 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003553 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003554 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003555 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003557 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003559
3560 return true;
3561}
3562
3563bool PostCreatePipelineCache(
3564 VkDevice device,
3565 VkPipelineCache* pPipelineCache,
3566 VkResult result)
3567{
3568
3569 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003570 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003571 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003572
3573 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003574 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003575 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003576 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003577 return false;
3578 }
3579
3580 return true;
3581}
3582
Chia-I Wu9ab61502015-11-06 06:42:02 +08003583VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003584 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003585 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003586 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003587 VkPipelineCache* pPipelineCache)
3588{
3589 PreCreatePipelineCache(device, pCreateInfo);
3590
Chia-I Wuf7458c52015-10-26 21:10:41 +08003591 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003592
3593 PostCreatePipelineCache(device, pPipelineCache, result);
3594
3595 return result;
3596}
3597
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003598bool PostGetPipelineCacheData(
3599 VkDevice device,
3600 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003601 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003602 void* pData,
3603 VkResult result)
3604{
3605
3606
Chia-I Wub16facd2015-10-26 19:17:06 +08003607 if(pDataSize != nullptr)
3608 {
3609 }
3610
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003611 if(pData != nullptr)
3612 {
3613 }
3614
3615 if(result < VK_SUCCESS)
3616 {
3617 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003618 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003619 return false;
3620 }
3621
3622 return true;
3623}
3624
Chia-I Wu9ab61502015-11-06 06:42:02 +08003625VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003626 VkDevice device,
3627 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003628 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003629 void* pData)
3630{
Chia-I Wub16facd2015-10-26 19:17:06 +08003631 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003632
Chia-I Wub16facd2015-10-26 19:17:06 +08003633 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634
3635 return result;
3636}
3637
3638bool PreMergePipelineCaches(
3639 VkDevice device,
3640 const VkPipelineCache* pSrcCaches)
3641{
3642 if(pSrcCaches != nullptr)
3643 {
3644 }
3645
3646 return true;
3647}
3648
3649bool PostMergePipelineCaches(
3650 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003651 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003652 uint32_t srcCacheCount,
3653 VkResult result)
3654{
3655
3656
3657
3658 if(result < VK_SUCCESS)
3659 {
3660 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003661 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003662 return false;
3663 }
3664
3665 return true;
3666}
3667
Chia-I Wu9ab61502015-11-06 06:42:02 +08003668VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003669 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003670 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003671 uint32_t srcCacheCount,
3672 const VkPipelineCache* pSrcCaches)
3673{
3674 PreMergePipelineCaches(device, pSrcCaches);
3675
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003676 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003677
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003678 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679
3680 return result;
3681}
3682
3683bool PreCreateGraphicsPipelines(
3684 VkDevice device,
3685 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3686{
3687 if(pCreateInfos != nullptr)
3688 {
3689 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3690 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003691 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003692 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3693 return false;
3694 }
3695 if(pCreateInfos->pStages != nullptr)
3696 {
3697 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3698 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003699 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003700 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3701 return false;
3702 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003703 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3704 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003705 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003706 {
3707 }
3708 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3709 {
3710 }
3711 }
3712 }
3713 if(pCreateInfos->pVertexInputState != nullptr)
3714 {
3715 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3716 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003717 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003718 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3719 return false;
3720 }
3721 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3722 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003723 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3724 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003725 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003726 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003727 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003728 return false;
3729 }
3730 }
3731 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3732 {
3733 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3734 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3735 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003736 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003737 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3738 return false;
3739 }
3740 }
3741 }
3742 if(pCreateInfos->pInputAssemblyState != nullptr)
3743 {
3744 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3745 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003746 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003747 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3748 return false;
3749 }
3750 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3751 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3752 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003753 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003754 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3755 return false;
3756 }
3757 }
3758 if(pCreateInfos->pTessellationState != nullptr)
3759 {
3760 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3761 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003762 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003763 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3764 return false;
3765 }
3766 }
3767 if(pCreateInfos->pViewportState != nullptr)
3768 {
3769 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3770 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003771 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003772 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3773 return false;
3774 }
3775 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003776 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003777 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003778 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003780 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003781 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003782 return false;
3783 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003784 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3785 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003786 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003787 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003788 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789 return false;
3790 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003791 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003792 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003793 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003794 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003795 return false;
3796 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003797 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3798 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003799 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003800 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003801 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003802 return false;
3803 }
3804 }
3805 if(pCreateInfos->pMultisampleState != nullptr)
3806 {
3807 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3808 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003809 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003810 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3811 return false;
3812 }
3813 }
3814 if(pCreateInfos->pDepthStencilState != nullptr)
3815 {
3816 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3817 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003818 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003819 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3820 return false;
3821 }
3822 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3823 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3824 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003825 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3827 return false;
3828 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003829 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3830 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003831 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003832 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003833 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003834 return false;
3835 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003836 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3837 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003839 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003840 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003841 return false;
3842 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003843 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3844 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003845 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003846 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003847 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003848 return false;
3849 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003850 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3851 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003852 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003853 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003854 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003855 return false;
3856 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003857 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3858 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003860 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003861 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003862 return false;
3863 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003864 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3865 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003867 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003868 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003869 return false;
3870 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003871 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3872 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003874 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003875 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003876 return false;
3877 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003878 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3879 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003880 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003881 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003882 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003883 return false;
3884 }
3885 }
3886 if(pCreateInfos->pColorBlendState != nullptr)
3887 {
3888 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3889 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003890 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003891 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3892 return false;
3893 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003894 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3895 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003896 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3897 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003898 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003899 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3900 return false;
3901 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003902 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003903 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003904 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3905 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003906 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003907 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003908 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003909 return false;
3910 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003911 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3912 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003913 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003914 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003915 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003916 return false;
3917 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003918 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3919 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003920 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003921 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003922 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 return false;
3924 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003925 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3926 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003927 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003928 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003929 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003930 return false;
3931 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003932 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3933 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003934 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003935 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003936 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003937 return false;
3938 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003939 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3940 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003941 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003942 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003943 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003944 return false;
3945 }
3946 }
3947 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003948 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3949 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003950 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003951 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3952 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003953 }
3954
3955 return true;
3956}
3957
3958bool PostCreateGraphicsPipelines(
3959 VkDevice device,
3960 VkPipelineCache pipelineCache,
3961 uint32_t count,
3962 VkPipeline* pPipelines,
3963 VkResult result)
3964{
3965
3966
3967
3968 if(pPipelines != nullptr)
3969 {
3970 }
3971
3972 if(result < VK_SUCCESS)
3973 {
3974 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003975 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003976 return false;
3977 }
3978
3979 return true;
3980}
3981
Chia-I Wu9ab61502015-11-06 06:42:02 +08003982VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003983 VkDevice device,
3984 VkPipelineCache pipelineCache,
3985 uint32_t count,
3986 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003987 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003988 VkPipeline* pPipelines)
3989{
3990 PreCreateGraphicsPipelines(device, pCreateInfos);
3991
Chia-I Wuf7458c52015-10-26 21:10:41 +08003992 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003993
3994 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3995
3996 return result;
3997}
3998
3999bool PreCreateComputePipelines(
4000 VkDevice device,
4001 const VkComputePipelineCreateInfo* pCreateInfos)
4002{
4003 if(pCreateInfos != nullptr)
4004 {
4005 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4006 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004007 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004008 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4009 return false;
4010 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004011 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004012 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004013 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004014 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4015 return false;
4016 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004017 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004018 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004019 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020 {
4021 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004022 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004023 {
4024 }
4025 }
4026 }
4027
4028 return true;
4029}
4030
4031bool PostCreateComputePipelines(
4032 VkDevice device,
4033 VkPipelineCache pipelineCache,
4034 uint32_t count,
4035 VkPipeline* pPipelines,
4036 VkResult result)
4037{
4038
4039
4040
4041 if(pPipelines != nullptr)
4042 {
4043 }
4044
4045 if(result < VK_SUCCESS)
4046 {
4047 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004048 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004049 return false;
4050 }
4051
4052 return true;
4053}
4054
Chia-I Wu9ab61502015-11-06 06:42:02 +08004055VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004056 VkDevice device,
4057 VkPipelineCache pipelineCache,
4058 uint32_t count,
4059 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004060 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004061 VkPipeline* pPipelines)
4062{
4063 PreCreateComputePipelines(device, pCreateInfos);
4064
Chia-I Wuf7458c52015-10-26 21:10:41 +08004065 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004066
4067 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4068
4069 return result;
4070}
4071
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004072bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004073 VkDevice device,
4074 const VkPipelineLayoutCreateInfo* pCreateInfo)
4075{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004076 if(pCreateInfo != nullptr)
4077 {
4078 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004079 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004080 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004081 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4082 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004083 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004084 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004085 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004086 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004087 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004088 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004089 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004090 }
4091
4092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004093}
4094
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004095bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004096 VkDevice device,
4097 VkPipelineLayout* pPipelineLayout,
4098 VkResult result)
4099{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004101 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004102 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004103 }
4104
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004105 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004106 {
4107 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004108 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004109 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004111
4112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004113}
4114
Chia-I Wu9ab61502015-11-06 06:42:02 +08004115VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004116 VkDevice device,
4117 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004118 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004119 VkPipelineLayout* pPipelineLayout)
4120{
4121 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004122
Chia-I Wuf7458c52015-10-26 21:10:41 +08004123 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004124
4125 PostCreatePipelineLayout(device, pPipelineLayout, result);
4126
4127 return result;
4128}
4129
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004130bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004131 VkDevice device,
4132 const VkSamplerCreateInfo* pCreateInfo)
4133{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004134 if(pCreateInfo != nullptr)
4135 {
4136 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004137 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004138 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004139 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004140 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004141 }
Chia-I Wub99df442015-10-26 16:49:32 +08004142 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4143 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004144 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004145 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004146 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004147 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004148 }
Chia-I Wub99df442015-10-26 16:49:32 +08004149 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4150 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004151 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004152 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004153 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004154 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004155 }
Chia-I Wub99df442015-10-26 16:49:32 +08004156 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4157 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004158 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004159 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004160 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004161 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004162 }
Chia-I Wub99df442015-10-26 16:49:32 +08004163 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4164 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004165 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004166 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004167 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004168 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004169 }
Chia-I Wub99df442015-10-26 16:49:32 +08004170 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4171 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004172 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004173 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004174 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004175 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004176 }
Chia-I Wub99df442015-10-26 16:49:32 +08004177 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4178 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004179 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004180 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004181 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004182 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004183 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004184 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004185 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004186 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4187 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4188 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004189 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004190 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4191 return false;
4192 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004193 }
4194 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4195 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4196 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004197 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004198 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004199 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004200 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004201 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004202
4203 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004204}
4205
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004206bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004207 VkDevice device,
4208 VkSampler* pSampler,
4209 VkResult result)
4210{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004212 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004214 }
4215
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004216 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004217 {
4218 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004219 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004220 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004221 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004222
4223 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004224}
4225
Chia-I Wu9ab61502015-11-06 06:42:02 +08004226VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004227 VkDevice device,
4228 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004229 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004230 VkSampler* pSampler)
4231{
4232 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004233
Chia-I Wuf7458c52015-10-26 21:10:41 +08004234 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004235
4236 PostCreateSampler(device, pSampler, result);
4237
4238 return result;
4239}
4240
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004241bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004242 VkDevice device,
4243 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4244{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004245 if(pCreateInfo != nullptr)
4246 {
4247 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004248 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004249 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004250 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004251 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004252 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004253 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004255 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4256 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004257 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004258 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004259 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004260 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004262 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004263 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004264 }
4265 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004266 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004267
4268 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004269}
4270
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004271bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004272 VkDevice device,
4273 VkDescriptorSetLayout* pSetLayout,
4274 VkResult result)
4275{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004276
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004277 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 }
4280
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004281 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004282 {
4283 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004284 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004285 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004286 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004287
4288 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289}
4290
Chia-I Wu9ab61502015-11-06 06:42:02 +08004291VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004292 VkDevice device,
4293 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004294 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004295 VkDescriptorSetLayout* pSetLayout)
4296{
4297 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004298
Chia-I Wuf7458c52015-10-26 21:10:41 +08004299 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004300
4301 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4302
4303 return result;
4304}
4305
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004306bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004307 VkDevice device,
4308 const VkDescriptorPoolCreateInfo* pCreateInfo)
4309{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004310 if(pCreateInfo != nullptr)
4311 {
4312 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004313 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004314 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004315 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004316 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004317 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004318 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004320 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4321 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004322 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004323 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004324 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004325 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004326 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004327 }
4328 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004329
4330 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004331}
4332
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004333bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004334 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004335 uint32_t maxSets,
4336 VkDescriptorPool* pDescriptorPool,
4337 VkResult result)
4338{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004339
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004340 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004342 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004344 }
4345
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004346 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004347 {
4348 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004349 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004350 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004351 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004352
4353 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004354}
4355
Chia-I Wu9ab61502015-11-06 06:42:02 +08004356VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004357 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004359 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 VkDescriptorPool* pDescriptorPool)
4361{
4362 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004363
Chia-I Wuf7458c52015-10-26 21:10:41 +08004364 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004365
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004366 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367
4368 return result;
4369}
4370
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004371bool PostResetDescriptorPool(
4372 VkDevice device,
4373 VkDescriptorPool descriptorPool,
4374 VkResult result)
4375{
4376
Jeremy Hayes99a96322015-06-26 12:48:09 -06004377
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004378 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379 {
4380 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004381 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004382 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004383 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004384
4385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386}
4387
Chia-I Wu9ab61502015-11-06 06:42:02 +08004388VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004389 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004390 VkDescriptorPool descriptorPool,
4391 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004392{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004393 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394
4395 PostResetDescriptorPool(device, descriptorPool, result);
4396
4397 return result;
4398}
4399
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004400bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401 VkDevice device,
4402 const VkDescriptorSetLayout* pSetLayouts)
4403{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004404 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004405 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004406 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004407
4408 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004409}
4410
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004411bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004412 VkDevice device,
4413 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004414 uint32_t count,
4415 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416 VkResult result)
4417{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418
Jeremy Hayes99a96322015-06-26 12:48:09 -06004419
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004420 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004422 }
4423
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004424 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004426 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004427 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004428 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004429 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004430
4431 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004432}
4433
Chia-I Wu9ab61502015-11-06 06:42:02 +08004434VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004435 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004436 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004437 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004438{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004439 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004440
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004441 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004442
Jon Ashburnf19916e2016-01-11 13:12:43 -07004443 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->descriptorSetCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444
4445 return result;
4446}
4447
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004448bool PreFreeDescriptorSets(
4449 VkDevice device,
4450 const VkDescriptorSet* pDescriptorSets)
4451{
4452 if(pDescriptorSets != nullptr)
4453 {
4454 }
4455
4456 return true;
4457}
4458
4459bool PostFreeDescriptorSets(
4460 VkDevice device,
4461 VkDescriptorPool descriptorPool,
4462 uint32_t count,
4463 VkResult result)
4464{
4465
4466
4467
4468 if(result < VK_SUCCESS)
4469 {
4470 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004471 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004472 return false;
4473 }
4474
4475 return true;
4476}
4477
Chia-I Wu9ab61502015-11-06 06:42:02 +08004478VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004479 VkDevice device,
4480 VkDescriptorPool descriptorPool,
4481 uint32_t count,
4482 const VkDescriptorSet* pDescriptorSets)
4483{
4484 PreFreeDescriptorSets(device, pDescriptorSets);
4485
4486 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4487
4488 PostFreeDescriptorSets(device, descriptorPool, count, result);
4489
4490 return result;
4491}
4492
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004493bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004494 VkDevice device,
4495 const VkWriteDescriptorSet* pDescriptorWrites,
4496 const VkCopyDescriptorSet* pDescriptorCopies)
4497{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004498 if(pDescriptorWrites != nullptr)
4499 {
4500 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004501 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004502 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004503 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004504 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004505 }
4506 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4507 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4508 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004509 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004510 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004511 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004512 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004513 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4514 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4515 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004516 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004517 if (((pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4518 (pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4519 (pDescriptorWrites->pImageInfo->imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06004520 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004521 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004522 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004523 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004524 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004525 }
4526 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004527
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004528 if(pDescriptorCopies != nullptr)
4529 {
4530 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004531 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004532 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004533 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004534 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004535 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004537
4538 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004539}
4540
Chia-I Wu9ab61502015-11-06 06:42:02 +08004541VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004543 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004544 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004545 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004546 const VkCopyDescriptorSet* pDescriptorCopies)
4547{
4548 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004549
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004550 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004551}
4552
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004553bool PreCreateFramebuffer(
4554 VkDevice device,
4555 const VkFramebufferCreateInfo* pCreateInfo)
4556{
4557 if(pCreateInfo != nullptr)
4558 {
4559 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4560 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004561 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004562 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4563 return false;
4564 }
4565 if(pCreateInfo->pAttachments != nullptr)
4566 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004567 }
4568 }
4569
4570 return true;
4571}
4572
4573bool PostCreateFramebuffer(
4574 VkDevice device,
4575 VkFramebuffer* pFramebuffer,
4576 VkResult result)
4577{
4578
4579 if(pFramebuffer != nullptr)
4580 {
4581 }
4582
4583 if(result < VK_SUCCESS)
4584 {
4585 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004586 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004587 return false;
4588 }
4589
4590 return true;
4591}
4592
Chia-I Wu9ab61502015-11-06 06:42:02 +08004593VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004594 VkDevice device,
4595 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004596 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004597 VkFramebuffer* pFramebuffer)
4598{
4599 PreCreateFramebuffer(device, pCreateInfo);
4600
Chia-I Wuf7458c52015-10-26 21:10:41 +08004601 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004602
4603 PostCreateFramebuffer(device, pFramebuffer, result);
4604
4605 return result;
4606}
4607
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004608bool PreCreateRenderPass(
4609 VkDevice device,
4610 const VkRenderPassCreateInfo* pCreateInfo)
4611{
4612 if(pCreateInfo != nullptr)
4613 {
4614 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4615 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004616 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004617 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4618 return false;
4619 }
4620 if(pCreateInfo->pAttachments != nullptr)
4621 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004622 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4623 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4624 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004625 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004626 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4627 return false;
4628 }
4629 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4630 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4631 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004632 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004633 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4634 return false;
4635 }
4636 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4637 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4638 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004639 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004640 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4641 return false;
4642 }
4643 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4644 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4645 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004646 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004647 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4648 return false;
4649 }
4650 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4651 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4652 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004653 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004654 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4655 return false;
4656 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004657 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4658 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4659 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004660 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004661 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004662 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4663 return false;
4664 }
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004665 if (((pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4666 (pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4667 (pCreateInfo->pAttachments->initialLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004668 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004669 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004670 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4671 return false;
4672 }
4673 }
4674 if(pCreateInfo->pSubpasses != nullptr)
4675 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004676 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4677 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4678 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004679 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004680 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4681 return false;
4682 }
Cody Northropa505dda2015-08-04 11:16:41 -06004683 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004684 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004685 if (((pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4686 (pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4687 (pCreateInfo->pSubpasses->pInputAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004688 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004689 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004690 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004691 return false;
4692 }
4693 }
Cody Northropa505dda2015-08-04 11:16:41 -06004694 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004695 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004696 if (((pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4697 (pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4698 (pCreateInfo->pSubpasses->pColorAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004699 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004700 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004701 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004702 return false;
4703 }
4704 }
Cody Northropa505dda2015-08-04 11:16:41 -06004705 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004706 {
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004707 if (((pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4708 (pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4709 (pCreateInfo->pSubpasses->pResolveAttachments->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004710 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004711 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004712 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004713 return false;
4714 }
4715 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004716 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07004717 ((pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
4718 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE)) &&
4719 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004720 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004722 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004723 return false;
4724 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004725 }
4726 if(pCreateInfo->pDependencies != nullptr)
4727 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004728 }
4729 }
4730
4731 return true;
4732}
4733
4734bool PostCreateRenderPass(
4735 VkDevice device,
4736 VkRenderPass* pRenderPass,
4737 VkResult result)
4738{
4739
4740 if(pRenderPass != nullptr)
4741 {
4742 }
4743
4744 if(result < VK_SUCCESS)
4745 {
4746 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004747 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004748 return false;
4749 }
4750
4751 return true;
4752}
4753
Chia-I Wu9ab61502015-11-06 06:42:02 +08004754VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004755 VkDevice device,
4756 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004757 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004758 VkRenderPass* pRenderPass)
4759{
4760 PreCreateRenderPass(device, pCreateInfo);
4761
Chia-I Wuf7458c52015-10-26 21:10:41 +08004762 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004763
4764 PostCreateRenderPass(device, pRenderPass, result);
4765
4766 return result;
4767}
4768
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004769bool PostGetRenderAreaGranularity(
4770 VkDevice device,
4771 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004772 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004773{
4774
4775
4776 if(pGranularity != nullptr)
4777 {
4778 }
4779
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004780 return true;
4781}
4782
Chia-I Wu9ab61502015-11-06 06:42:02 +08004783VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004784 VkDevice device,
4785 VkRenderPass renderPass,
4786 VkExtent2D* pGranularity)
4787{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004788 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004789
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004790 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004791}
4792
4793bool PreCreateCommandPool(
4794 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004795 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796{
4797 if(pCreateInfo != nullptr)
4798 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004799 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004800 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004801 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004802 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4803 return false;
4804 }
4805 }
4806
4807 return true;
4808}
4809
4810bool PostCreateCommandPool(
4811 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004812 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004813 VkResult result)
4814{
4815
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004816 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004817 {
4818 }
4819
4820 if(result < VK_SUCCESS)
4821 {
4822 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004823 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004824 return false;
4825 }
4826
4827 return true;
4828}
4829
Chia-I Wu9ab61502015-11-06 06:42:02 +08004830VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004831 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004832 const VkCommandPoolCreateInfo* pCreateInfo,
4833 const VkAllocationCallbacks* pAllocator,
4834 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004835{
4836 PreCreateCommandPool(device, pCreateInfo);
4837
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004838 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004839
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004840 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004841
4842 return result;
4843}
4844
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004845bool PostResetCommandPool(
4846 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004847 VkCommandPool commandPool,
4848 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849 VkResult result)
4850{
4851
4852
4853
4854 if(result < VK_SUCCESS)
4855 {
4856 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004857 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004858 return false;
4859 }
4860
4861 return true;
4862}
4863
Chia-I Wu9ab61502015-11-06 06:42:02 +08004864VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004865 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004866 VkCommandPool commandPool,
4867 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004869 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004870
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004871 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004872
4873 return result;
4874}
4875
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004876bool PreCreateCommandBuffer(
4877 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004878 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004879{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004880 if(pCreateInfo != nullptr)
4881 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004882 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004883 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004884 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004885 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004886 return false;
4887 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004888 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4889 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004890 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004891 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004892 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004893 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004894 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004895 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004896
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004897 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004898}
4899
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004900bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004901 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004902 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004903 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004904{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004905
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004906 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004907 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004908 }
4909
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004910 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004911 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004912 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004913 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004914 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004915 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004916
4917 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004918}
4919
Chia-I Wu9ab61502015-11-06 06:42:02 +08004920VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004921 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004922 const VkCommandBufferAllocateInfo* pCreateInfo,
4923 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004924{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004925 PreCreateCommandBuffer(device, pCreateInfo);
4926
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004927 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004928
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004929 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004930
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004931 return result;
4932}
4933
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004934bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004935 VkCommandBuffer commandBuffer,
4936 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004937{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004938 if(pBeginInfo != nullptr)
4939 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004940 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004941 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004942 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004943 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004944 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004945 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004946 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004947
4948 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004949}
4950
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004951bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004952 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004953 VkResult result)
4954{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004955
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004956 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004957 {
4958 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004959 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004960 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004961 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004962
4963 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004964}
4965
Chia-I Wu9ab61502015-11-06 06:42:02 +08004966VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004967 VkCommandBuffer commandBuffer,
4968 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004969{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004970 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004971
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004972 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004973
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004974 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004975
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004976 return result;
4977}
4978
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004979bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004980 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004981 VkResult result)
4982{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004983
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004984 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985 {
4986 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004987 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004988 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004989 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004990
4991 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004992}
4993
Chia-I Wu9ab61502015-11-06 06:42:02 +08004994VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004995 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004996{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004997 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004998
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004999 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005000
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005001 return result;
5002}
5003
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005004bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005005 VkCommandBuffer commandBuffer,
5006 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005007 VkResult result)
5008{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005009
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005010
5011 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012 {
5013 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005014 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005015 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005016 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005017
5018 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019}
5020
Chia-I Wu9ab61502015-11-06 06:42:02 +08005021VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005022 VkCommandBuffer commandBuffer,
5023 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005024{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005025 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005026
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005028
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005029 return result;
5030}
5031
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005032bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005033 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005034 VkPipelineBindPoint pipelineBindPoint,
5035 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005036{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005037
5038 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5039 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5040 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005041 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005042 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005043 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005044 }
5045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005046
5047 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005048}
5049
Chia-I Wu9ab61502015-11-06 06:42:02 +08005050VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005051 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005052 VkPipelineBindPoint pipelineBindPoint,
5053 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005054{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005055 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005056
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005057 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005058}
5059
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005060VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetViewport(VkCommandBuffer commandBuffer, uint32_t firstViewport, uint32_t viewportCount, const VkViewport* pViewports)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005061{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005062 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005063}
5064
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005065VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetScissor(VkCommandBuffer commandBuffer, uint32_t firstScissor, uint32_t scissorCount, const VkRect2D* pScissors)
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005066{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005067 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005068}
5069
Chia-I Wu9ab61502015-11-06 06:42:02 +08005070VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005071{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005072 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005073}
5074
Chia-I Wu9ab61502015-11-06 06:42:02 +08005075VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005076{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005077 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005078}
5079
Chia-I Wu9ab61502015-11-06 06:42:02 +08005080VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005081{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
Cody Northrop12365112015-08-17 11:10:49 -06005083}
5084
Chia-I Wu9ab61502015-11-06 06:42:02 +08005085VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005086{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005087 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005088}
5089
Chia-I Wu9ab61502015-11-06 06:42:02 +08005090VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005091{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005093}
5094
Chia-I Wu9ab61502015-11-06 06:42:02 +08005095VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005096{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005097 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005098}
5099
Chia-I Wu9ab61502015-11-06 06:42:02 +08005100VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005101{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005102 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005103}
5104
5105bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005106 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005107 const VkDescriptorSet* pDescriptorSets,
5108 const uint32_t* pDynamicOffsets)
5109{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005110 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005111 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005114 if(pDynamicOffsets != nullptr)
5115 {
5116 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005117
5118 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005119}
5120
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005121bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005122 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005123 VkPipelineBindPoint pipelineBindPoint,
5124 VkPipelineLayout layout,
5125 uint32_t firstSet,
5126 uint32_t setCount,
5127 uint32_t dynamicOffsetCount)
5128{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005129
5130 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5131 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5132 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005133 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005134 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005135 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005136 }
5137
5138
5139
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140
5141
5142 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005143}
5144
Chia-I Wu9ab61502015-11-06 06:42:02 +08005145VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005146 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005147 VkPipelineBindPoint pipelineBindPoint,
5148 VkPipelineLayout layout,
5149 uint32_t firstSet,
5150 uint32_t setCount,
5151 const VkDescriptorSet* pDescriptorSets,
5152 uint32_t dynamicOffsetCount,
5153 const uint32_t* pDynamicOffsets)
5154{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005155 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005156
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005157 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005158
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005159 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005160}
5161
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005162bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005163 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005164 VkBuffer buffer,
5165 VkDeviceSize offset,
5166 VkIndexType indexType)
5167{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168
Jeremy Hayes99a96322015-06-26 12:48:09 -06005169
5170
5171 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5172 indexType > VK_INDEX_TYPE_END_RANGE)
5173 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005174 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005175 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005176 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005177 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005178
5179 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005180}
5181
Chia-I Wu9ab61502015-11-06 06:42:02 +08005182VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005183 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005184 VkBuffer buffer,
5185 VkDeviceSize offset,
5186 VkIndexType indexType)
5187{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005188 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005189
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005190 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005191}
5192
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005193bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005194 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005195 const VkBuffer* pBuffers,
5196 const VkDeviceSize* pOffsets)
5197{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005198 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005199 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005200 }
5201
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005202 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005203 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005204 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005205
5206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005207}
5208
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005209bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005210 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005211 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005212 uint32_t bindingCount)
5213{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005214
5215
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005216
5217 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005218}
5219
Chia-I Wu9ab61502015-11-06 06:42:02 +08005220VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005221 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005222 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005223 uint32_t bindingCount,
5224 const VkBuffer* pBuffers,
5225 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005226{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005227 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005228
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005229 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005230
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005231 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005232}
5233
Michael Lentine55a913f2015-11-24 09:48:23 -06005234bool PreCmdDraw(
5235 VkCommandBuffer commandBuffer,
5236 uint32_t vertexCount,
5237 uint32_t instanceCount,
5238 uint32_t firstVertex,
5239 uint32_t firstInstance)
5240{
5241 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005242 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5243 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005244 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005245 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5246 return false;
5247 }
5248
5249 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005250 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5251 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005252 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005253 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5254 return false;
5255 }
5256
5257 return true;
5258}
5259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005260bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005261 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005262 uint32_t firstVertex,
5263 uint32_t vertexCount,
5264 uint32_t firstInstance,
5265 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005266{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005267
5268
5269
5270
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005271
5272 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005273}
5274
Chia-I Wu9ab61502015-11-06 06:42:02 +08005275VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005276 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005278 uint32_t instanceCount,
5279 uint32_t firstVertex,
5280 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005281{
Michael Lentine55a913f2015-11-24 09:48:23 -06005282 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5283
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005284 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005285
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005286 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005287}
5288
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005289bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005290 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005291 uint32_t firstIndex,
5292 uint32_t indexCount,
5293 int32_t vertexOffset,
5294 uint32_t firstInstance,
5295 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005296{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005297
5298
5299
5300
5301
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005302
5303 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005304}
5305
Chia-I Wu9ab61502015-11-06 06:42:02 +08005306VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005307 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005308 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005309 uint32_t instanceCount,
5310 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005311 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005312 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005313{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005314 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005315
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005316 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005317}
5318
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005319bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005320 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005321 VkBuffer buffer,
5322 VkDeviceSize offset,
5323 uint32_t count,
5324 uint32_t stride)
5325{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005326
5327
5328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005329
5330
5331 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005332}
5333
Chia-I Wu9ab61502015-11-06 06:42:02 +08005334VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005335 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005336 VkBuffer buffer,
5337 VkDeviceSize offset,
5338 uint32_t count,
5339 uint32_t stride)
5340{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005341 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005342
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005343 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005344}
5345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005346bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005347 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005348 VkBuffer buffer,
5349 VkDeviceSize offset,
5350 uint32_t count,
5351 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005352{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353
5354
5355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356
5357
5358 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005359}
5360
Chia-I Wu9ab61502015-11-06 06:42:02 +08005361VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005362 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005363 VkBuffer buffer,
5364 VkDeviceSize offset,
5365 uint32_t count,
5366 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005367{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005368 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005369
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005370 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005371}
5372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005373bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005374 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005375 uint32_t x,
5376 uint32_t y,
5377 uint32_t z)
5378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379
5380
5381
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005382
5383 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005384}
5385
Chia-I Wu9ab61502015-11-06 06:42:02 +08005386VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005387 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005388 uint32_t x,
5389 uint32_t y,
5390 uint32_t z)
5391{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005392 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005393
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005394 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005395}
5396
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005397bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005398 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005399 VkBuffer buffer,
5400 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005401{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005402
Jeremy Hayes99a96322015-06-26 12:48:09 -06005403
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005404
5405 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005406}
5407
Chia-I Wu9ab61502015-11-06 06:42:02 +08005408VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005409 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005410 VkBuffer buffer,
5411 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005412{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005413 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005414
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005415 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005416}
5417
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005418bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005421{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005422 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005423 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005424 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005425
5426 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005427}
5428
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005429bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005430 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005431 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005432 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005433 uint32_t regionCount)
5434{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005435
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005438
5439 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005440}
5441
Chia-I Wu9ab61502015-11-06 06:42:02 +08005442VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005443 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005444 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005445 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446 uint32_t regionCount,
5447 const VkBufferCopy* pRegions)
5448{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005449 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005450
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005451 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005452
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005453 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454}
5455
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005456bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005457 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005458 const VkImageCopy* pRegions)
5459{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005460 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005461 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005462 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005463 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005464 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005465 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005466 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005467 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005469 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005470 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005472 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005473 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005474 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005475 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005476 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005477
5478 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005479}
5480
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005481bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005482 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005483 VkImage srcImage,
5484 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005485 VkImage dstImage,
5486 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005487 uint32_t regionCount)
5488{
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005489 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5490 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5491 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005492 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005493 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005494 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005495 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005496 }
5497
Jeremy Hayes99a96322015-06-26 12:48:09 -06005498
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005499 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5500 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5501 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005503 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005504 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005505 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005506 }
5507
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005508
5509 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005510}
5511
Chia-I Wu9ab61502015-11-06 06:42:02 +08005512VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005513 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005514 VkImage srcImage,
5515 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005516 VkImage dstImage,
5517 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005518 uint32_t regionCount,
5519 const VkImageCopy* pRegions)
5520{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005521 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005522
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005523 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005525 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005526}
5527
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005528bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005529 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005530 const VkImageBlit* pRegions)
5531{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005532 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005533 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005534 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005535 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005536 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005537 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005538 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005539 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005540 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005541 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005542 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005544 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005545 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005546 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005547 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005548 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005549
5550 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005551}
5552
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005553bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005554 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005555 VkImage srcImage,
5556 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005557 VkImage dstImage,
5558 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005559 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005560 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005561{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005562
Jeremy Hayes99a96322015-06-26 12:48:09 -06005563
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005564 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5565 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5566 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005567 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005568 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005569 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005570 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571 }
5572
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005574 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5575 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5576 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005577 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005578 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005579 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005580 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005581 }
5582
5583
Chia-I Wub99df442015-10-26 16:49:32 +08005584 if(filter < VK_FILTER_BEGIN_RANGE ||
5585 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005586 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005587 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005588 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005589 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005590 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005591
5592 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593}
5594
Chia-I Wu9ab61502015-11-06 06:42:02 +08005595VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005596 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005597 VkImage srcImage,
5598 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005599 VkImage dstImage,
5600 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005601 uint32_t regionCount,
5602 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005603 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005604{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005605 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005606
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005607 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005608
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005609 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005610}
5611
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005612bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005613 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005614 const VkBufferImageCopy* pRegions)
5615{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005616 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005618 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005619 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005621 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005622 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005623 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005624 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005625 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626
5627 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005628}
5629
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005630bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005631 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005632 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005633 VkImage dstImage,
5634 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635 uint32_t regionCount)
5636{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005637
Jeremy Hayes99a96322015-06-26 12:48:09 -06005638
Jeremy Hayes99a96322015-06-26 12:48:09 -06005639
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005640 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5641 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5642 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005644 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005645 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005646 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647 }
5648
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005649
5650 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005651}
5652
Chia-I Wu9ab61502015-11-06 06:42:02 +08005653VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005654 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005655 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005656 VkImage dstImage,
5657 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005658 uint32_t regionCount,
5659 const VkBufferImageCopy* pRegions)
5660{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005661 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005662
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005664
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005665 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666}
5667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005668bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005669 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005670 const VkBufferImageCopy* pRegions)
5671{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005672 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005673 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005674 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005675 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005676 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005677 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005678 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005679 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005681 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005682
5683 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005684}
5685
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005686bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005687 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005688 VkImage srcImage,
5689 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005690 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691 uint32_t regionCount)
5692{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005693
Jeremy Hayes99a96322015-06-26 12:48:09 -06005694
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005695 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5696 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5697 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005699 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005700 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005701 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005702 }
5703
Jeremy Hayes99a96322015-06-26 12:48:09 -06005704
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005705
5706 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005707}
5708
Chia-I Wu9ab61502015-11-06 06:42:02 +08005709VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005710 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005711 VkImage srcImage,
5712 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005713 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005714 uint32_t regionCount,
5715 const VkBufferImageCopy* pRegions)
5716{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005717 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005718
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005719 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005721 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005722}
5723
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005724bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005725 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726 const uint32_t* pData)
5727{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005728 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005729 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005730 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005731
5732 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005733}
5734
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005735bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005736 VkCommandBuffer commandBuffer,
5737 VkBuffer dstBuffer,
5738 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739 VkDeviceSize dataSize)
5740{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005741
5742
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005743
5744
5745 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005746}
5747
Chia-I Wu9ab61502015-11-06 06:42:02 +08005748VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005749 VkCommandBuffer commandBuffer,
5750 VkBuffer dstBuffer,
5751 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005752 VkDeviceSize dataSize,
5753 const uint32_t* pData)
5754{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005755 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005756
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005757 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005759 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005760}
5761
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005762bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005763 VkCommandBuffer commandBuffer,
5764 VkBuffer dstBuffer,
5765 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005766 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005767 uint32_t data)
5768{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005769
5770
5771
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005772
5773
5774 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775}
5776
Chia-I Wu9ab61502015-11-06 06:42:02 +08005777VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005778 VkCommandBuffer commandBuffer,
5779 VkBuffer dstBuffer,
5780 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005781 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005782 uint32_t data)
5783{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005784 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005785
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005786 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005787}
5788
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005789bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005790 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005791 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005792 const VkImageSubresourceRange* pRanges)
5793{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005794 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005795 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796 }
5797
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005798 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005799 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005800 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005801 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005802
5803 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005804}
5805
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005806bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005807 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005808 VkImage image,
5809 VkImageLayout imageLayout,
5810 uint32_t rangeCount)
5811{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005812
Jeremy Hayes99a96322015-06-26 12:48:09 -06005813
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005814 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5815 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5816 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005817 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005818 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005819 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005820 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005821 }
5822
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005823
5824 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005825}
5826
Chia-I Wu9ab61502015-11-06 06:42:02 +08005827VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005828 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005829 VkImage image,
5830 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005831 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005832 uint32_t rangeCount,
5833 const VkImageSubresourceRange* pRanges)
5834{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005835 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005836
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005837 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005838
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005839 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005840}
5841
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005842bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005843 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005844 const VkImageSubresourceRange* pRanges)
5845{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005846 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005847 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005848 /*
5849 * TODO: How do we validation pRanges->aspectMask?
5850 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5851 * VK_IMAGE_ASPECT_STENCIL_BIT.
5852 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005853 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005854
5855 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005856}
5857
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005858bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005859 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005860 VkImage image,
5861 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005862 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005863 uint32_t rangeCount)
5864{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865
Jeremy Hayes99a96322015-06-26 12:48:09 -06005866
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005867 if (((imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5868 (imageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5869 (imageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005871 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005872 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005873 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005874 }
5875
5876
5877
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005878
5879 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005880}
5881
Chia-I Wu9ab61502015-11-06 06:42:02 +08005882VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005883 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005884 VkImage image,
5885 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005886 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005887 uint32_t rangeCount,
5888 const VkImageSubresourceRange* pRanges)
5889{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005890 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005891
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005892 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005893
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005895}
5896
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005897bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005898 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005899 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005900 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005901{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005902 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005904 }
5905
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005906 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005907 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005908 }
5909
5910 return true;
5911}
5912
Chia-I Wu9ab61502015-11-06 06:42:02 +08005913VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005914 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005915 uint32_t attachmentCount,
5916 const VkClearAttachment* pAttachments,
5917 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005918 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005919{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005920 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005921 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005922 }
5923
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005924 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005925}
5926
5927bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005928 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005929 const VkImageResolve* pRegions)
5930{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005931 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005932 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005933 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005934 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005935 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005936 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005937 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005938 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005939 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005940 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005941 (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT | VK_IMAGE_ASPECT_METADATA_BIT)) == 0)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005942 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005943 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005944 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005945 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005946 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005947 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005948
5949 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005950}
5951
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005952bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005953 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005954 VkImage srcImage,
5955 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005956 VkImage dstImage,
5957 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005958 uint32_t regionCount)
5959{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005960
Jeremy Hayes99a96322015-06-26 12:48:09 -06005961
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005962 if (((srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5963 (srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5964 (srcImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005966 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005967 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005968 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005969 }
5970
Jeremy Hayes99a96322015-06-26 12:48:09 -06005971
Mark Lobodzinskibbe08ca2016-01-11 09:46:09 -07005972 if (((dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE) ||
5973 (dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)) &&
5974 (dstImageLayout != VK_IMAGE_LAYOUT_PRESENT_SRC_KHR))
Jeremy Hayes99a96322015-06-26 12:48:09 -06005975 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005976 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005977 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005978 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005979 }
5980
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005981
5982 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005983}
5984
Chia-I Wu9ab61502015-11-06 06:42:02 +08005985VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005986 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005987 VkImage srcImage,
5988 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005989 VkImage dstImage,
5990 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005991 uint32_t regionCount,
5992 const VkImageResolve* pRegions)
5993{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005994 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005995
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005996 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005997
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005998 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005999}
6000
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006001bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006002 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006004 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006006
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006008
6009 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006010}
6011
Chia-I Wu9ab61502015-11-06 06:42:02 +08006012VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006013 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006014 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006015 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006016{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006017 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006019 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006020}
6021
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006022bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006023 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006025 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006027
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006029
6030 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006031}
6032
Chia-I Wu9ab61502015-11-06 06:42:02 +08006033VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006034 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006035 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006036 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006038 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006040 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041}
6042
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006043bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006044 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006045 const VkEvent* pEvents,
Jon Ashburnf19916e2016-01-11 13:12:43 -07006046 uint32_t memoryBarrierCount,
6047 const VkMemoryBarrier *pMemoryBarriers,
6048 uint32_t bufferMemoryBarrierCount,
6049 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6050 uint32_t imageMemoryBarrierCount,
6051 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006053 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055 }
6056
Jon Ashburnf19916e2016-01-11 13:12:43 -07006057 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006060
6061 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006062}
6063
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006064bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006065 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006066 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006067 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006068 VkPipelineStageFlags dstStageMask,
6069 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006071
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006072
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073
6074
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006075
6076 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006077}
6078
Chia-I Wu9ab61502015-11-06 06:42:02 +08006079VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006080 VkCommandBuffer commandBuffer,
6081 uint32_t eventCount,
6082 const VkEvent *pEvents,
6083 VkPipelineStageFlags srcStageMask,
6084 VkPipelineStageFlags dstStageMask,
6085 uint32_t memoryBarrierCount,
6086 const VkMemoryBarrier *pMemoryBarriers,
6087 uint32_t bufferMemoryBarrierCount,
6088 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6089 uint32_t imageMemoryBarrierCount,
6090 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006091{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006092 PreCmdWaitEvents(commandBuffer, pEvents, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006093
Jon Ashburnf19916e2016-01-11 13:12:43 -07006094 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006096 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097}
6098
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006099bool PreCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006100 VkCommandBuffer commandBuffer,
6101 uint32_t memoryBarrierCount,
6102 const VkMemoryBarrier *pMemoryBarriers,
6103 uint32_t bufferMemoryBarrierCount,
6104 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6105 uint32_t imageMemoryBarrierCount,
6106 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006108 if(pMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006111
6112 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006113}
6114
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006115bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006116 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006117 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006119 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006120 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006121{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006122
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006123
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124
6125
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006126
6127 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006128}
6129
Chia-I Wu9ab61502015-11-06 06:42:02 +08006130VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Jon Ashburnf19916e2016-01-11 13:12:43 -07006131 VkCommandBuffer commandBuffer,
6132 VkPipelineStageFlags srcStageMask,
6133 VkPipelineStageFlags dstStageMask,
6134 VkDependencyFlags dependencyFlags,
6135 uint32_t memoryBarrierCount,
6136 const VkMemoryBarrier *pMemoryBarriers,
6137 uint32_t bufferMemoryBarrierCount,
6138 const VkBufferMemoryBarrier *pBufferMemoryBarriers,
6139 uint32_t imageMemoryBarrierCount,
6140 const VkImageMemoryBarrier *pImageMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006141{
Jon Ashburnf19916e2016-01-11 13:12:43 -07006142 PreCmdPipelineBarrier(commandBuffer, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006143
Jon Ashburnf19916e2016-01-11 13:12:43 -07006144 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, pMemoryBarriers, bufferMemoryBarrierCount, pBufferMemoryBarriers, imageMemoryBarrierCount, pImageMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006145
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006146 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006147}
6148
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006149bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006150 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006151 VkQueryPool queryPool,
6152 uint32_t slot,
6153 VkQueryControlFlags flags)
6154{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155
Jeremy Hayes99a96322015-06-26 12:48:09 -06006156
6157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006158
6159 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006160}
6161
Chia-I Wu9ab61502015-11-06 06:42:02 +08006162VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006163 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006164 VkQueryPool queryPool,
6165 uint32_t slot,
6166 VkQueryControlFlags flags)
6167{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006168 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006170 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171}
6172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006173bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006174 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006175 VkQueryPool queryPool,
6176 uint32_t slot)
6177{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006178
Jeremy Hayes99a96322015-06-26 12:48:09 -06006179
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006180
6181 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182}
6183
Chia-I Wu9ab61502015-11-06 06:42:02 +08006184VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006185 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006186 VkQueryPool queryPool,
6187 uint32_t slot)
6188{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006189 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006190
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006191 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006192}
6193
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006194bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006195 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006196 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006197 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198 uint32_t queryCount)
6199{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006200
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006201
6202
6203
6204 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006205}
6206
Chia-I Wu9ab61502015-11-06 06:42:02 +08006207VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006208 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006209 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006210 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006211 uint32_t queryCount)
6212{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006213 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006214
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006215 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216}
6217
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006218bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006219 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006220 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006221 VkQueryPool queryPool,
6222 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006224
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006225 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006226
6227 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228}
6229
Chia-I Wu9ab61502015-11-06 06:42:02 +08006230VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006231 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006232 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006233 VkQueryPool queryPool,
6234 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006235{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006236 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006237
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006238 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239}
6240
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006241bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006242 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006243 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006244 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006245 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006246 VkBuffer dstBuffer,
6247 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006248 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006249 VkQueryResultFlags flags)
6250{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006251
6252
6253
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006254
Jeremy Hayes99a96322015-06-26 12:48:09 -06006255
6256
6257
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006258
6259 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006260}
6261
Chia-I Wu9ab61502015-11-06 06:42:02 +08006262VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006263 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006265 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006267 VkBuffer dstBuffer,
6268 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006269 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006271{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006272 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006273
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006274 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006275}
6276
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006277bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006278 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006279 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006281 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006282 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006283 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006284
6285 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006286}
6287
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006288bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006289 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006290 VkPipelineLayout layout,
6291 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006292 uint32_t offset,
6293 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006295
Jeremy Hayes99a96322015-06-26 12:48:09 -06006296
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006297
6298
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006299
6300 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006301}
6302
Chia-I Wu9ab61502015-11-06 06:42:02 +08006303VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006304 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006305 VkPipelineLayout layout,
6306 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006307 uint32_t offset,
6308 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006309 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006310{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006311 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006312
Chia-I Wuce9b1772015-11-12 06:09:22 +08006313 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006314
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006315 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006316}
6317
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006318bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006319 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006320 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006321{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006322 if(pRenderPassBegin != nullptr)
6323 {
6324 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006325 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006326 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006327 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006328 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006329 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006330 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006331 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006332 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006333 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006334
6335 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006336}
6337
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006338bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006339 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006340 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006341{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006342
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006343 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6344 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006345 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006346 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006347 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006348 return false;
6349 }
6350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006351 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006352}
6353
Chia-I Wu9ab61502015-11-06 06:42:02 +08006354VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006355 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006356 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006357 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006358{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006359 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006360
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006361 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006362
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006363 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006364}
6365
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006366bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006367 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006368 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006369{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006370
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006371 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6372 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006373 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006374 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006375 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006376 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006377 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006378
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006379 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006380}
6381
Chia-I Wu9ab61502015-11-06 06:42:02 +08006382VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006383 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006384 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006385{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006386 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006387
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006388 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006389}
6390
6391bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006392 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006393{
6394
6395 return true;
6396}
6397
Chia-I Wu9ab61502015-11-06 06:42:02 +08006398VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006399 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006400{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006401 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006402
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006403 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006404}
6405
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006406bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006407 VkCommandBuffer commandBuffer,
6408 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006409{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006410 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006411 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006412 }
6413
6414 return true;
6415}
6416
6417bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006418 VkCommandBuffer commandBuffer,
6419 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006420{
6421
6422
6423 return true;
6424}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006425
Chia-I Wu9ab61502015-11-06 06:42:02 +08006426VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006427 VkCommandBuffer commandBuffer,
6428 uint32_t commandBuffersCount,
6429 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006430{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006431 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006432
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006433 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006434
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006435 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006436}
6437
Chia-I Wu9ab61502015-11-06 06:42:02 +08006438VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006439{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006440 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006441 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006442 }
6443
Jon Ashburn8fd08252015-05-28 16:25:02 -06006444 /* loader uses this to force layer initialization; device object is wrapped */
6445 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006446 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006447 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006448 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006449
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006450 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006451 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006462 if (!strcmp(funcName, "vkAllocateMemory"))
6463 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006464 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006466 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006471 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006478 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006479 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006481 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006482 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006483 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006484 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006485 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006486 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006487 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006488 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006489 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006490 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006491 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006502 if (!strcmp(funcName, "vkCreateShaderModule"))
6503 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006504 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006505 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006506 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006507 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006508 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006509 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006510 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006511 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006512 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006513 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006514 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006515 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006516 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006517 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006518 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6519 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006520 if (!strcmp(funcName, "vkCmdSetViewport"))
6521 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006522 if (!strcmp(funcName, "vkCmdSetScissor"))
6523 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006524 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6525 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6526 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6527 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6528 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6529 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6530 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6531 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6532 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6533 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6534 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6535 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6536 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6537 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006538 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6539 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006592 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006594 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006595 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006597 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006599 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006600 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006601 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006602 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006603 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006604 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006605 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006606 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006607 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006608 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006609 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006610
Jon Ashburneab34492015-06-01 09:37:38 -06006611 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006612 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006613 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006615 }
6616}
6617
Chia-I Wu9ab61502015-11-06 06:42:02 +08006618VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006619{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006620 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006621 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006622 }
6623
Jon Ashburn8fd08252015-05-28 16:25:02 -06006624 /* loader uses this to force layer initialization; instance object is wrapped */
6625 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006626 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006627 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006628 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006629
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006631 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006633 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006634 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006635 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006636 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006637 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006638 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006639 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006640 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006641 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006642 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6643 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6644 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6645 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6646 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6647 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6648 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6649 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006650
Jeremy Hayes99a96322015-06-26 12:48:09 -06006651 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006652 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006653 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006654 return fptr;
6655
Jeremy Hayes99a96322015-06-26 12:48:09 -06006656 {
6657 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6658 return NULL;
6659 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6660 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006661}