blob: 1822743495a717b40d3df90916fa431d031decfe [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 {
Mark Lobodzinski0d054fe2015-12-30 08:16:12 -0700184 "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);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001768 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
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);
1798 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001799}
1800
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001801bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001802 VkInstance instance,
1803 uint32_t* pPhysicalDeviceCount,
1804 VkPhysicalDevice* pPhysicalDevices,
1805 VkResult result)
1806{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001808 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001809 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001810 }
1811
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001812 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001813 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001814 }
1815
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001816 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001817 {
1818 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001819 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 -06001820 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001821 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001822
1823 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001824}
1825
Chia-I Wu9ab61502015-11-06 06:42:02 +08001826VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001827 VkInstance instance,
1828 uint32_t* pPhysicalDeviceCount,
1829 VkPhysicalDevice* pPhysicalDevices)
1830{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001831 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1832
1833 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1834
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001835 return result;
1836}
1837
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001838bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001839 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001840 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001841{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001842
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001843 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001845 }
1846
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001847 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001848}
1849
Chia-I Wu9ab61502015-11-06 06:42:02 +08001850VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001851 VkPhysicalDevice physicalDevice,
1852 VkPhysicalDeviceFeatures* pFeatures)
1853{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001854 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001855
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001856 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001857}
1858
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001859bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001860 VkPhysicalDevice physicalDevice,
1861 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001862 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001863{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001864
1865 if(format < VK_FORMAT_BEGIN_RANGE ||
1866 format > VK_FORMAT_END_RANGE)
1867 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001868 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001869 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001870 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001871 }
1872
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001873 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001874 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001875 }
1876
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001877 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001878}
1879
Chia-I Wu9ab61502015-11-06 06:42:02 +08001880VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001881 VkPhysicalDevice physicalDevice,
1882 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001883 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001884{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001885 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001887 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001888}
1889
1890bool PostGetPhysicalDeviceImageFormatProperties(
1891 VkPhysicalDevice physicalDevice,
1892 VkFormat format,
1893 VkImageType type,
1894 VkImageTiling tiling,
1895 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001896 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001897 VkImageFormatProperties* pImageFormatProperties,
1898 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001899{
1900
1901 if(format < VK_FORMAT_BEGIN_RANGE ||
1902 format > VK_FORMAT_END_RANGE)
1903 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001904 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001905 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1906 return false;
1907 }
1908
1909 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1910 type > VK_IMAGE_TYPE_END_RANGE)
1911 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001912 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001913 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1914 return false;
1915 }
1916
1917 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1918 tiling > VK_IMAGE_TILING_END_RANGE)
1919 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001920 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001921 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1922 return false;
1923 }
1924
1925
1926 if(pImageFormatProperties != nullptr)
1927 {
1928 }
1929
Chia-I Wu17241042015-10-31 00:31:16 +08001930 if(result < VK_SUCCESS)
1931 {
1932 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001933 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 +08001934 return false;
1935 }
1936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001937 return true;
1938}
1939
Chia-I Wu9ab61502015-11-06 06:42:02 +08001940VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001941 VkPhysicalDevice physicalDevice,
1942 VkFormat format,
1943 VkImageType type,
1944 VkImageTiling tiling,
1945 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001946 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001947 VkImageFormatProperties* pImageFormatProperties)
1948{
Chia-I Wu17241042015-10-31 00:31:16 +08001949 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 -06001950
Chia-I Wu17241042015-10-31 00:31:16 +08001951 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1952
1953 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001954}
1955
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001956bool PostGetPhysicalDeviceProperties(
1957 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001958 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001959{
1960
1961 if(pProperties != nullptr)
1962 {
1963 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1964 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1965 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07001966 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001967 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1968 return false;
1969 }
1970 }
1971
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001972 return true;
1973}
1974
Chia-I Wu9ab61502015-11-06 06:42:02 +08001975VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001976 VkPhysicalDevice physicalDevice,
1977 VkPhysicalDeviceProperties* pProperties)
1978{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001979 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001980
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001981 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001982}
1983
Cody Northropd0802882015-08-03 17:04:53 -06001984bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985 VkPhysicalDevice physicalDevice,
1986 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001987 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001988{
1989
Cody Northropd0802882015-08-03 17:04:53 -06001990 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001991 {
1992 }
1993
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001994 if(pQueueProperties != nullptr)
1995 {
1996 }
1997
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001998 return true;
1999}
2000
Chia-I Wu9ab61502015-11-06 06:42:02 +08002001VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002002 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002003 uint32_t* pCount,
2004 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002005{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002006 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002007
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002008 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002009}
2010
2011bool PostGetPhysicalDeviceMemoryProperties(
2012 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002013 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002014{
2015
2016 if(pMemoryProperties != nullptr)
2017 {
2018 }
2019
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002020 return true;
2021}
2022
Chia-I Wu9ab61502015-11-06 06:42:02 +08002023VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002024 VkPhysicalDevice physicalDevice,
2025 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2026{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002027 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002028
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002029 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002030}
2031
Chia-I Wu9ab61502015-11-06 06:42:02 +08002032VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002033 VkPhysicalDevice physicalDevice,
2034 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002035 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002036 VkDevice* pDevice)
2037{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002038 /*
2039 * NOTE: The loader fills in the ICD's device object in *pDevice.
2040 * Use that object to get the dispatch table.
2041 *
2042 * NOTE: We do not validate physicalDevice or any dispatchable
2043 * object as the first parameter. We couldn't get here if it was wrong!
2044 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002045 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002046 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002047 if(result == VK_SUCCESS)
2048 {
2049 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2050 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2051 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2052 }
2053
2054 return result;
2055}
2056
Chia-I Wu9ab61502015-11-06 06:42:02 +08002057VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002058 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002059 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002060{
2061 layer_debug_report_destroy_device(device);
2062
2063 dispatch_key key = get_dispatch_key(device);
2064#if DISPATCH_MAP_DEBUG
2065 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2066#endif
2067
Chia-I Wuf7458c52015-10-26 21:10:41 +08002068 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002069 pc_device_table_map.erase(key);
2070 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002071}
2072
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002073bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002074 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002075 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002076 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002077 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002078{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002079
2080
2081
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002082 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002083 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002084 }
2085
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002086 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002087}
2088
Chia-I Wu9ab61502015-11-06 06:42:02 +08002089VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002090 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002091 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002092 uint32_t queueIndex,
2093 VkQueue* pQueue)
2094{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002095 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002096
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002097 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002098}
2099
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002100bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002102 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002103{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002104 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002105 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002106 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002107 return false;
2108 }
2109
2110 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002111 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002113
2114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002115}
2116
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002117bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002118 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002119 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002120 VkFence fence,
2121 VkResult result)
2122{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002123
2124
Jeremy Hayes99a96322015-06-26 12:48:09 -06002125
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002126 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002127 {
2128 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002129 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 -06002130 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002131 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002132
2133 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002134}
2135
Chia-I Wu9ab61502015-11-06 06:42:02 +08002136VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002137 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002138 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002139 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002140 VkFence fence)
2141{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002142 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002143 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002144 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002145
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002146 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002147
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002148 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002149
2150 return result;
2151}
2152
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002153bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002154 VkQueue queue,
2155 VkResult result)
2156{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002157
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002158 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 {
2160 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002161 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 -06002162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002163 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002164
2165 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002166}
2167
Chia-I Wu9ab61502015-11-06 06:42:02 +08002168VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002169 VkQueue queue)
2170{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002171 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2172
2173 PostQueueWaitIdle(queue, result);
2174
2175 return result;
2176}
2177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002178bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002179 VkDevice device,
2180 VkResult result)
2181{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002182
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002183 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 {
2185 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002186 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 -06002187 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002188 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002189
2190 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002191}
2192
Chia-I Wu9ab61502015-11-06 06:42:02 +08002193VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002194 VkDevice device)
2195{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2197
2198 PostDeviceWaitIdle(device, result);
2199
2200 return result;
2201}
2202
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002203bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002204 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002205 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002206{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002207 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002208 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002209 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002210 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002211 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002212 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002213 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002214 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002216
2217 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002218}
2219
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002220bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002221 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002222 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223 VkResult result)
2224{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002225
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002226 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002227 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228 }
2229
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002230 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002231 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002232 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002233 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 -06002234 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002235 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002236
2237 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002238}
2239
Chia-I Wu9ab61502015-11-06 06:42:02 +08002240VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002241 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002242 const VkMemoryAllocateInfo* pAllocateInfo,
2243 const VkAllocationCallbacks* pAllocator,
2244 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002245{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002246 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002247
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002248 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002249
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002250 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002251
2252 return result;
2253}
2254
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002255bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256 VkDevice device,
2257 VkDeviceMemory mem,
2258 VkDeviceSize offset,
2259 VkDeviceSize size,
2260 VkMemoryMapFlags flags,
2261 void** ppData,
2262 VkResult result)
2263{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002264
Jeremy Hayes99a96322015-06-26 12:48:09 -06002265
2266
2267
2268
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002269 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002271 }
2272
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002273 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002274 {
2275 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002276 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 -06002277 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002278 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002279
2280 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002281}
2282
Chia-I Wu9ab61502015-11-06 06:42:02 +08002283VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002284 VkDevice device,
2285 VkDeviceMemory mem,
2286 VkDeviceSize offset,
2287 VkDeviceSize size,
2288 VkMemoryMapFlags flags,
2289 void** ppData)
2290{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002291 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2292
2293 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2294
2295 return result;
2296}
2297
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002298bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002299 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002300 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002301{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002302 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002303 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002304 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002305 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002306 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002308 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002309 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002310 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002311
2312 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002313}
2314
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002315bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002316 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002317 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318 VkResult result)
2319{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002320
2321
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002322 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 {
2324 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002325 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 -06002326 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002327 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002328
2329 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002330}
2331
Chia-I Wu9ab61502015-11-06 06:42:02 +08002332VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002333 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002334 uint32_t memoryRangeCount,
2335 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002336{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002337 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002338
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002339 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002340
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002341 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002342
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002343 return result;
2344}
2345
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002346bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002348 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002349{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002350 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002351 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002352 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002353 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002354 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002355 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002356 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002357 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002359
2360 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002361}
2362
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002363bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002364 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002365 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366 VkResult result)
2367{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002368
2369
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002370 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002371 {
2372 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002373 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 -06002374 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002375 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002376
2377 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002378}
2379
Chia-I Wu9ab61502015-11-06 06:42:02 +08002380VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002381 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002382 uint32_t memoryRangeCount,
2383 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002384{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002385 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002386
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002387 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002388
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002389 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002390
Tony Barbourb1250542015-04-16 19:23:13 -06002391 return result;
2392}
2393
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002394bool PostGetDeviceMemoryCommitment(
2395 VkDevice device,
2396 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002397 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002398{
2399
2400
2401 if(pCommittedMemoryInBytes != nullptr)
2402 {
2403 }
2404
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002405 return true;
2406}
2407
Chia-I Wu9ab61502015-11-06 06:42:02 +08002408VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002409 VkDevice device,
2410 VkDeviceMemory memory,
2411 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002412{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002413 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002414
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002415 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002416}
2417
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002418bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002419 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002420 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002421 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002422 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002423 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002424{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002425
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002426
Jeremy Hayes99a96322015-06-26 12:48:09 -06002427
2428
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002429 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002431 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002432 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 -06002433 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002434 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002435
2436 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002437}
2438
Chia-I Wu9ab61502015-11-06 06:42:02 +08002439VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002440 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002441 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002443 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002444{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002445 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002446
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002447 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002448
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002449 return result;
2450}
2451
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002452bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002453 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002454 VkImage image,
2455 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002456 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002457 VkResult result)
2458{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002459
2460
2461
2462
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002463 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002464 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002465 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002466 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 -06002467 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002468 }
2469
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002470 return true;
2471}
2472
Chia-I Wu9ab61502015-11-06 06:42:02 +08002473VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002474 VkDevice device,
2475 VkImage image,
2476 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002477 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002478{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002479 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002480
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002481 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002482
2483 return result;
2484}
2485
2486bool PostGetBufferMemoryRequirements(
2487 VkDevice device,
2488 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002489 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002490{
2491
2492
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002493 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002494 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002495 }
2496
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002497 return true;
2498}
2499
Chia-I Wu9ab61502015-11-06 06:42:02 +08002500VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002501 VkDevice device,
2502 VkBuffer buffer,
2503 VkMemoryRequirements* pMemoryRequirements)
2504{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002505 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002506
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002507 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002508}
2509
2510bool PostGetImageMemoryRequirements(
2511 VkDevice device,
2512 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002513 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002514{
2515
2516
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002517 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002518 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519 }
2520
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002521 return true;
2522}
2523
Chia-I Wu9ab61502015-11-06 06:42:02 +08002524VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002525 VkDevice device,
2526 VkImage image,
2527 VkMemoryRequirements* pMemoryRequirements)
2528{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002529 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002530
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002531 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002532}
2533
2534bool PostGetImageSparseMemoryRequirements(
2535 VkDevice device,
2536 VkImage image,
2537 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002538 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002539{
2540
2541
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002542 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002543 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544 }
2545
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002546 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002547 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002548 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002549 (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 -06002550 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002551 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002552 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002553 return false;
2554 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002555 }
2556
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002557 return true;
2558}
2559
Chia-I Wu9ab61502015-11-06 06:42:02 +08002560VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002561 VkDevice device,
2562 VkImage image,
2563 uint32_t* pNumRequirements,
2564 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2565{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002566 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002567
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002568 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002569}
2570
2571bool PostGetPhysicalDeviceSparseImageFormatProperties(
2572 VkPhysicalDevice physicalDevice,
2573 VkFormat format,
2574 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002575 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002576 VkImageUsageFlags usage,
2577 VkImageTiling tiling,
2578 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002579 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002580{
2581
2582 if(format < VK_FORMAT_BEGIN_RANGE ||
2583 format > VK_FORMAT_END_RANGE)
2584 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002585 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002586 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002587 return false;
2588 }
2589
2590 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2591 type > VK_IMAGE_TYPE_END_RANGE)
2592 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002593 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002594 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002595 return false;
2596 }
2597
2598
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002599
2600 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2601 tiling > VK_IMAGE_TILING_END_RANGE)
2602 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002603 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002604 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002605 return false;
2606 }
2607
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002608 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002609 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610 }
2611
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002612 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002613 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002614 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002615 (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 -06002616 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002617 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002618 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002619 return false;
2620 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002621 }
2622
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002623 return true;
2624}
2625
Chia-I Wu9ab61502015-11-06 06:42:02 +08002626VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002627 VkPhysicalDevice physicalDevice,
2628 VkFormat format,
2629 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002630 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002631 VkImageUsageFlags usage,
2632 VkImageTiling tiling,
2633 uint32_t* pNumProperties,
2634 VkSparseImageFormatProperties* pProperties)
2635{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002636 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002637
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002638 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002639}
2640
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002641bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002642 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002643 uint32_t bindInfoCount,
2644 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002645{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002646 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002648 }
2649
2650 return true;
2651}
2652
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002653bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002654 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002655 uint32_t bindInfoCount,
2656 const VkBindSparseInfo* pBindInfo,
2657 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002658 VkResult result)
2659{
2660
2661
2662
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002663 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002664 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002665 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002666 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 -06002667 return false;
2668 }
2669
2670 return true;
2671}
2672
Chia-I Wu9ab61502015-11-06 06:42:02 +08002673VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002674 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002675 uint32_t bindInfoCount,
2676 const VkBindSparseInfo* pBindInfo,
2677 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002678{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002679 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002680
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002681 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002682
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002683 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002684
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002685 return result;
2686}
2687
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002688bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002689 VkDevice device,
2690 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002691{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002692 if(pCreateInfo != nullptr)
2693 {
2694 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002695 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002696 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002697 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002698 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002699 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002700 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002701
2702 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002703}
2704
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002705bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002706 VkDevice device,
2707 VkFence* pFence,
2708 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002709{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002710
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002711 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002712 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002713 }
2714
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002715 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002716 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002717 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002718 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 -06002719 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002720 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002721
2722 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002723}
2724
Chia-I Wu9ab61502015-11-06 06:42:02 +08002725VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002726 VkDevice device,
2727 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002728 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002729 VkFence* pFence)
2730{
2731 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002732
Chia-I Wuf7458c52015-10-26 21:10:41 +08002733 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002734
2735 PostCreateFence(device, pFence, result);
2736
2737 return result;
2738}
2739
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002740bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002741 VkDevice device,
2742 const VkFence* pFences)
2743{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002744 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002745 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002746 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002747
2748 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002749}
2750
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002751bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002752 VkDevice device,
2753 uint32_t fenceCount,
2754 VkResult result)
2755{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002756
2757
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002758 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002759 {
2760 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002761 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 -06002762 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002763 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002764
2765 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002766}
2767
Chia-I Wu9ab61502015-11-06 06:42:02 +08002768VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002769 VkDevice device,
2770 uint32_t fenceCount,
2771 const VkFence* pFences)
2772{
2773 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002774
Jeremy Hayes99a96322015-06-26 12:48:09 -06002775 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2776
2777 PostResetFences(device, fenceCount, result);
2778
2779 return result;
2780}
2781
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002782bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002783 VkDevice device,
2784 VkFence fence,
2785 VkResult result)
2786{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002787
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002789 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002790 {
2791 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002792 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 -06002793 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002794 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002795
2796 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002797}
2798
Chia-I Wu9ab61502015-11-06 06:42:02 +08002799VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002800 VkDevice device,
2801 VkFence fence)
2802{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002803 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2804
2805 PostGetFenceStatus(device, fence, result);
2806
2807 return result;
2808}
2809
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002810bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002811 VkDevice device,
2812 const VkFence* pFences)
2813{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002814 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002815 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002816 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002817
2818 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002819}
2820
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002821bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002822 VkDevice device,
2823 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002824 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002825 uint64_t timeout,
2826 VkResult result)
2827{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002828
2829
2830
2831
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002832 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833 {
2834 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002835 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 -06002836 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002837 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002838
2839 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002840}
2841
Chia-I Wu9ab61502015-11-06 06:42:02 +08002842VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002843 VkDevice device,
2844 uint32_t fenceCount,
2845 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002846 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002847 uint64_t timeout)
2848{
2849 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002850
Jeremy Hayes99a96322015-06-26 12:48:09 -06002851 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2852
2853 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2854
2855 return result;
2856}
2857
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002858bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002859 VkDevice device,
2860 const VkSemaphoreCreateInfo* pCreateInfo)
2861{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002862 if(pCreateInfo != nullptr)
2863 {
2864 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002865 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002866 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002867 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002868 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002869 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002871
2872 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002873}
2874
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002875bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002876 VkDevice device,
2877 VkSemaphore* pSemaphore,
2878 VkResult result)
2879{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002880
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002881 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002882 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002883 }
2884
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002885 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002886 {
2887 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002888 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 -06002889 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002890 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002891
2892 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002893}
2894
Chia-I Wu9ab61502015-11-06 06:42:02 +08002895VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002896 VkDevice device,
2897 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002898 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002899 VkSemaphore* pSemaphore)
2900{
2901 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002902
Chia-I Wuf7458c52015-10-26 21:10:41 +08002903 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002904
2905 PostCreateSemaphore(device, pSemaphore, result);
2906
2907 return result;
2908}
2909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002910bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002911 VkDevice device,
2912 const VkEventCreateInfo* pCreateInfo)
2913{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002914 if(pCreateInfo != nullptr)
2915 {
2916 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002917 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002918 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002919 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002920 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002921 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002922 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002923
2924 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002925}
2926
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002927bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002928 VkDevice device,
2929 VkEvent* pEvent,
2930 VkResult result)
2931{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002932
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002933 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002934 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002935 }
2936
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002937 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002938 {
2939 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002940 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 -06002941 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002942 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002943
2944 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002945}
2946
Chia-I Wu9ab61502015-11-06 06:42:02 +08002947VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002948 VkDevice device,
2949 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002950 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002951 VkEvent* pEvent)
2952{
2953 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002954
Chia-I Wuf7458c52015-10-26 21:10:41 +08002955 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002956
2957 PostCreateEvent(device, pEvent, result);
2958
2959 return result;
2960}
2961
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002962bool PostGetEventStatus(
2963 VkDevice device,
2964 VkEvent event,
2965 VkResult result)
2966{
2967
Jeremy Hayes99a96322015-06-26 12:48:09 -06002968
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002969 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002970 {
2971 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07002972 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 -06002973 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002974 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002975
2976 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002977}
2978
Chia-I Wu9ab61502015-11-06 06:42:02 +08002979VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002980 VkDevice device,
2981 VkEvent event)
2982{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002983 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2984
2985 PostGetEventStatus(device, event, result);
2986
2987 return result;
2988}
2989
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002990bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002991 VkDevice device,
2992 VkEvent event,
2993 VkResult result)
2994{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002995
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002997 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002998 {
2999 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003000 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 -06003001 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003002 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003003
3004 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003005}
3006
Chia-I Wu9ab61502015-11-06 06:42:02 +08003007VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003008 VkDevice device,
3009 VkEvent event)
3010{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003011 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3012
3013 PostSetEvent(device, event, result);
3014
3015 return result;
3016}
3017
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003018bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003019 VkDevice device,
3020 VkEvent event,
3021 VkResult result)
3022{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003023
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003025 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003026 {
3027 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003028 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 -06003029 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003030 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003031
3032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003033}
3034
Chia-I Wu9ab61502015-11-06 06:42:02 +08003035VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003036 VkDevice device,
3037 VkEvent event)
3038{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003039 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3040
3041 PostResetEvent(device, event, result);
3042
3043 return result;
3044}
3045
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003046bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003047 VkDevice device,
3048 const VkQueryPoolCreateInfo* pCreateInfo)
3049{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003050 if(pCreateInfo != nullptr)
3051 {
3052 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003053 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003054 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003055 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003056 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003057 }
3058 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3059 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3060 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003061 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003062 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003063 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003064 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003065 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003066
3067 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003068}
3069
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003070bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003071 VkDevice device,
3072 VkQueryPool* pQueryPool,
3073 VkResult result)
3074{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003075
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003076 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003077 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003078 }
3079
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003080 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003081 {
3082 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003083 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 -06003084 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003085 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003086
3087 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003088}
3089
Chia-I Wu9ab61502015-11-06 06:42:02 +08003090VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003091 VkDevice device,
3092 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003093 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003094 VkQueryPool* pQueryPool)
3095{
3096 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003097
Chia-I Wuf7458c52015-10-26 21:10:41 +08003098 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099
3100 PostCreateQueryPool(device, pQueryPool, result);
3101
3102 return result;
3103}
3104
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003105bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003106 VkDevice device,
3107 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003108 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003109 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003110 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003112 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003113 VkQueryResultFlags flags,
3114 VkResult result)
3115{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116
Jeremy Hayes99a96322015-06-26 12:48:09 -06003117
3118
3119
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003120 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122 }
3123
Jeremy Hayes99a96322015-06-26 12:48:09 -06003124
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003125 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126 {
3127 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003128 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 -06003129 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003130 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003131
3132 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003133}
3134
Chia-I Wu9ab61502015-11-06 06:42:02 +08003135VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003136 VkDevice device,
3137 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003138 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003139 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003140 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003142 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003143 VkQueryResultFlags flags)
3144{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003145 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 -06003146
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003147 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003148
3149 return result;
3150}
3151
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003152bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003153 VkDevice device,
3154 const VkBufferCreateInfo* pCreateInfo)
3155{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003156 if(pCreateInfo != nullptr)
3157 {
3158 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003159 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003160 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003161 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003162 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003163 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003164 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3165 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003166 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003167 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003168 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003169 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003170 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003171 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003172 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003173 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003174 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003175
3176 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003177}
3178
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003179bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003180 VkDevice device,
3181 VkBuffer* pBuffer,
3182 VkResult result)
3183{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003184
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003185 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003186 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003187 }
3188
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003189 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003190 {
3191 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003192 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 -06003193 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003194 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003195
3196 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003197}
3198
Chia-I Wu9ab61502015-11-06 06:42:02 +08003199VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003200 VkDevice device,
3201 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003202 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003203 VkBuffer* pBuffer)
3204{
3205 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003206
Chia-I Wuf7458c52015-10-26 21:10:41 +08003207 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208
3209 PostCreateBuffer(device, pBuffer, result);
3210
3211 return result;
3212}
3213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003214bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003215 VkDevice device,
3216 const VkBufferViewCreateInfo* pCreateInfo)
3217{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003218 if(pCreateInfo != nullptr)
3219 {
3220 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003221 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003222 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003223 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003224 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003225 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3227 pCreateInfo->format > VK_FORMAT_END_RANGE)
3228 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003229 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003230 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003231 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003232 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003233 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003234
3235 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003236}
3237
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003238bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003239 VkDevice device,
3240 VkBufferView* pView,
3241 VkResult result)
3242{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003243
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003244 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003245 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003246 }
3247
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003248 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003249 {
3250 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003251 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 -06003252 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003253 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003254
3255 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003256}
3257
Chia-I Wu9ab61502015-11-06 06:42:02 +08003258VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003259 VkDevice device,
3260 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003261 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003262 VkBufferView* pView)
3263{
3264 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003265
Chia-I Wuf7458c52015-10-26 21:10:41 +08003266 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267
3268 PostCreateBufferView(device, pView, result);
3269
3270 return result;
3271}
3272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003273bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003274 VkDevice device,
3275 const VkImageCreateInfo* pCreateInfo)
3276{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003277 if(pCreateInfo != nullptr)
3278 {
3279 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003280 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003281 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003283 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003284 }
3285 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3286 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3287 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003288 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003289 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003290 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003291 }
3292 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3293 pCreateInfo->format > VK_FORMAT_END_RANGE)
3294 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003295 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003296 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003297 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003298 }
3299 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3300 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3301 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003302 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003303 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003304 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003305 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003306 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3307 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003308 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003309 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003310 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003311 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003312 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003313 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003314 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003316 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003317
3318 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319}
3320
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003321bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003322 VkDevice device,
3323 VkImage* pImage,
3324 VkResult result)
3325{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003326
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003327 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003328 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003329 }
3330
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003331 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003332 {
3333 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003334 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 -06003335 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003336 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003337
3338 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003339}
3340
Chia-I Wu9ab61502015-11-06 06:42:02 +08003341VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003342 VkDevice device,
3343 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003344 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003345 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003346{
3347 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003348
Chia-I Wuf7458c52015-10-26 21:10:41 +08003349 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003350
3351 PostCreateImage(device, pImage, result);
3352
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003353 return result;
3354}
3355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003356bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003357 VkDevice device,
3358 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003359{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003360 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003361 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003362 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003363 (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 -06003364 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003365 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003366 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003367 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003368 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003369 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003370
3371 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003372}
3373
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003374bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003375 VkDevice device,
3376 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003377 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003378{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003379
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003381 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003382 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383 }
3384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003385 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003386}
3387
Chia-I Wu9ab61502015-11-06 06:42:02 +08003388VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003389 VkDevice device,
3390 VkImage image,
3391 const VkImageSubresource* pSubresource,
3392 VkSubresourceLayout* pLayout)
3393{
3394 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003395
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003396 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003397
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003398 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003399}
3400
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003401bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402 VkDevice device,
3403 const VkImageViewCreateInfo* pCreateInfo)
3404{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003405 if(pCreateInfo != nullptr)
3406 {
3407 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003408 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003409 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003410 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003411 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003412 }
3413 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3414 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3415 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003416 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003417 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003418 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003419 }
3420 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3421 pCreateInfo->format > VK_FORMAT_END_RANGE)
3422 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003423 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003424 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003425 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003426 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003427 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3428 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003429 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003430 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003431 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003432 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003433 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003434 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3435 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003436 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003437 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003438 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003439 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003440 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003441 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3442 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003443 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003444 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003445 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003446 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003447 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003448 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3449 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003450 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003451 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003452 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003453 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003454 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003455 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003456
3457 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003458}
3459
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003460bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003461 VkDevice device,
3462 VkImageView* pView,
3463 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003464{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003465
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003466 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003467 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003468 }
3469
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003470 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003471 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003472 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003473 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 -06003474 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003475 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003476
3477 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003478}
3479
Chia-I Wu9ab61502015-11-06 06:42:02 +08003480VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003481 VkDevice device,
3482 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003483 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003484 VkImageView* pView)
3485{
3486 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003487
Chia-I Wuf7458c52015-10-26 21:10:41 +08003488 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489
3490 PostCreateImageView(device, pView, result);
3491
3492 return result;
3493}
3494
Michael Lentine03d8e572015-09-15 14:59:14 -05003495bool PreCreateShaderModule(
3496 VkDevice device,
3497 const VkShaderModuleCreateInfo* pCreateInfo)
3498{
3499 if(pCreateInfo) {
3500 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003501 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003502 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3503 return false;
3504 }
3505 if(!pCreateInfo->pCode) {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003506 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003507 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3508 return false;
3509 }
3510 } else {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003512 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3513 return false;
3514 }
3515
3516 return true;
3517}
3518
3519bool PostCreateShaderModule(
3520 VkDevice device,
3521 VkShaderModule* pShaderModule,
3522 VkResult result)
3523{
3524 if(result < VK_SUCCESS) {
3525 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003526 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 -05003527 return false;
3528 }
3529
3530 return true;
3531}
3532
Chia-I Wu9ab61502015-11-06 06:42:02 +08003533VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003534 VkDevice device,
3535 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003536 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003537 VkShaderModule* pShaderModule)
3538{
3539 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003540 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003541 PostCreateShaderModule(device, pShaderModule, result);
3542 return result;
3543}
3544
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003545bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003546 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003547 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003548{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003549 if(pCreateInfo != nullptr)
3550 {
3551 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003552 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003553 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003554 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003555 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003556 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003557 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003558 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003559 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003560 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003561
3562 return true;
3563}
3564
3565bool PostCreatePipelineCache(
3566 VkDevice device,
3567 VkPipelineCache* pPipelineCache,
3568 VkResult result)
3569{
3570
3571 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003572 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003573 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003574
3575 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003576 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003577 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003578 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 -06003579 return false;
3580 }
3581
3582 return true;
3583}
3584
Chia-I Wu9ab61502015-11-06 06:42:02 +08003585VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003586 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003587 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003588 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003589 VkPipelineCache* pPipelineCache)
3590{
3591 PreCreatePipelineCache(device, pCreateInfo);
3592
Chia-I Wuf7458c52015-10-26 21:10:41 +08003593 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003594
3595 PostCreatePipelineCache(device, pPipelineCache, result);
3596
3597 return result;
3598}
3599
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003600bool PostGetPipelineCacheData(
3601 VkDevice device,
3602 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003603 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003604 void* pData,
3605 VkResult result)
3606{
3607
3608
Chia-I Wub16facd2015-10-26 19:17:06 +08003609 if(pDataSize != nullptr)
3610 {
3611 }
3612
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003613 if(pData != nullptr)
3614 {
3615 }
3616
3617 if(result < VK_SUCCESS)
3618 {
3619 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003620 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 -06003621 return false;
3622 }
3623
3624 return true;
3625}
3626
Chia-I Wu9ab61502015-11-06 06:42:02 +08003627VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003628 VkDevice device,
3629 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003630 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003631 void* pData)
3632{
Chia-I Wub16facd2015-10-26 19:17:06 +08003633 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003634
Chia-I Wub16facd2015-10-26 19:17:06 +08003635 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003636
3637 return result;
3638}
3639
3640bool PreMergePipelineCaches(
3641 VkDevice device,
3642 const VkPipelineCache* pSrcCaches)
3643{
3644 if(pSrcCaches != nullptr)
3645 {
3646 }
3647
3648 return true;
3649}
3650
3651bool PostMergePipelineCaches(
3652 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003653 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003654 uint32_t srcCacheCount,
3655 VkResult result)
3656{
3657
3658
3659
3660 if(result < VK_SUCCESS)
3661 {
3662 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003663 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 -06003664 return false;
3665 }
3666
3667 return true;
3668}
3669
Chia-I Wu9ab61502015-11-06 06:42:02 +08003670VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003671 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003672 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003673 uint32_t srcCacheCount,
3674 const VkPipelineCache* pSrcCaches)
3675{
3676 PreMergePipelineCaches(device, pSrcCaches);
3677
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003678 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003679
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003680 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003681
3682 return result;
3683}
3684
3685bool PreCreateGraphicsPipelines(
3686 VkDevice device,
3687 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3688{
3689 if(pCreateInfos != nullptr)
3690 {
3691 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3692 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003693 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003694 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3695 return false;
3696 }
3697 if(pCreateInfos->pStages != nullptr)
3698 {
3699 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3700 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003701 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003702 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3703 return false;
3704 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003705 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3706 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003707 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003708 {
3709 }
3710 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3711 {
3712 }
3713 }
3714 }
3715 if(pCreateInfos->pVertexInputState != nullptr)
3716 {
3717 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3718 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003719 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003720 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3721 return false;
3722 }
3723 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3724 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003725 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3726 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003727 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003728 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003729 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003730 return false;
3731 }
3732 }
3733 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3734 {
3735 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3736 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3737 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003738 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003739 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3740 return false;
3741 }
3742 }
3743 }
3744 if(pCreateInfos->pInputAssemblyState != nullptr)
3745 {
3746 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3747 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003748 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003749 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3750 return false;
3751 }
3752 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3753 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3754 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003755 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003756 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3757 return false;
3758 }
3759 }
3760 if(pCreateInfos->pTessellationState != nullptr)
3761 {
3762 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3763 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003764 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003765 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3766 return false;
3767 }
3768 }
3769 if(pCreateInfos->pViewportState != nullptr)
3770 {
3771 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3772 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003773 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003774 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3775 return false;
3776 }
3777 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003778 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003780 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003781 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003782 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003783 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784 return false;
3785 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003786 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3787 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003788 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003789 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003790 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003791 return false;
3792 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003793 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003794 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003795 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003796 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003797 return false;
3798 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003799 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3800 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003801 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003802 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003803 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003804 return false;
3805 }
3806 }
3807 if(pCreateInfos->pMultisampleState != nullptr)
3808 {
3809 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3810 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003811 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003812 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3813 return false;
3814 }
3815 }
3816 if(pCreateInfos->pDepthStencilState != nullptr)
3817 {
3818 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3819 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003820 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003821 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3822 return false;
3823 }
3824 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3825 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3826 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003827 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003828 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3829 return false;
3830 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003831 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3832 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003834 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003835 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003836 return false;
3837 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003838 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3839 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003840 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003841 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003842 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003843 return false;
3844 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003845 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3846 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003847 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003848 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003849 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003850 return false;
3851 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003852 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3853 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003854 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003855 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003856 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003857 return false;
3858 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003859 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3860 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003861 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003862 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003863 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003864 return false;
3865 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003866 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3867 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003868 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003869 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003870 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003871 return false;
3872 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003873 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3874 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003875 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003876 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003877 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003878 return false;
3879 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003880 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3881 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003882 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003883 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003884 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003885 return false;
3886 }
3887 }
3888 if(pCreateInfos->pColorBlendState != nullptr)
3889 {
3890 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3891 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003892 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003893 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3894 return false;
3895 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003896 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3897 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003898 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3899 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003900 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003901 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3902 return false;
3903 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003904 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003905 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003906 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3907 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003908 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003909 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003910 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003911 return false;
3912 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003913 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3914 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003915 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003916 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003917 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003918 return false;
3919 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003920 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3921 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003922 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003924 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003925 return false;
3926 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003927 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3928 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003929 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003930 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003931 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003932 return false;
3933 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003934 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3935 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003936 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003937 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003938 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003939 return false;
3940 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003941 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3942 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003943 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003944 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003945 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003946 return false;
3947 }
3948 }
3949 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003950 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3951 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003952 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003953 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3954 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003955 }
3956
3957 return true;
3958}
3959
3960bool PostCreateGraphicsPipelines(
3961 VkDevice device,
3962 VkPipelineCache pipelineCache,
3963 uint32_t count,
3964 VkPipeline* pPipelines,
3965 VkResult result)
3966{
3967
3968
3969
3970 if(pPipelines != nullptr)
3971 {
3972 }
3973
3974 if(result < VK_SUCCESS)
3975 {
3976 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07003977 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 -06003978 return false;
3979 }
3980
3981 return true;
3982}
3983
Chia-I Wu9ab61502015-11-06 06:42:02 +08003984VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003985 VkDevice device,
3986 VkPipelineCache pipelineCache,
3987 uint32_t count,
3988 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003989 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003990 VkPipeline* pPipelines)
3991{
3992 PreCreateGraphicsPipelines(device, pCreateInfos);
3993
Chia-I Wuf7458c52015-10-26 21:10:41 +08003994 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003995
3996 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
3997
3998 return result;
3999}
4000
4001bool PreCreateComputePipelines(
4002 VkDevice device,
4003 const VkComputePipelineCreateInfo* pCreateInfos)
4004{
4005 if(pCreateInfos != nullptr)
4006 {
4007 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4008 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004009 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004010 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4011 return false;
4012 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004013 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004014 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004015 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004016 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4017 return false;
4018 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004019 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004020 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004021 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004022 {
4023 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004024 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004025 {
4026 }
4027 }
4028 }
4029
4030 return true;
4031}
4032
4033bool PostCreateComputePipelines(
4034 VkDevice device,
4035 VkPipelineCache pipelineCache,
4036 uint32_t count,
4037 VkPipeline* pPipelines,
4038 VkResult result)
4039{
4040
4041
4042
4043 if(pPipelines != nullptr)
4044 {
4045 }
4046
4047 if(result < VK_SUCCESS)
4048 {
4049 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004050 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 -06004051 return false;
4052 }
4053
4054 return true;
4055}
4056
Chia-I Wu9ab61502015-11-06 06:42:02 +08004057VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004058 VkDevice device,
4059 VkPipelineCache pipelineCache,
4060 uint32_t count,
4061 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004062 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004063 VkPipeline* pPipelines)
4064{
4065 PreCreateComputePipelines(device, pCreateInfos);
4066
Chia-I Wuf7458c52015-10-26 21:10:41 +08004067 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004068
4069 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4070
4071 return result;
4072}
4073
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004074bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004075 VkDevice device,
4076 const VkPipelineLayoutCreateInfo* pCreateInfo)
4077{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004078 if(pCreateInfo != nullptr)
4079 {
4080 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004081 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004082 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004083 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4084 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004085 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004086 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004087 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004088 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004089 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004090 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004091 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004092 }
4093
4094 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004095}
4096
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004097bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004098 VkDevice device,
4099 VkPipelineLayout* pPipelineLayout,
4100 VkResult result)
4101{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004102
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004103 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004104 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004105 }
4106
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004107 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004108 {
4109 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004110 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 -06004111 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004112 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004113
4114 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004115}
4116
Chia-I Wu9ab61502015-11-06 06:42:02 +08004117VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004118 VkDevice device,
4119 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004120 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004121 VkPipelineLayout* pPipelineLayout)
4122{
4123 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004124
Chia-I Wuf7458c52015-10-26 21:10:41 +08004125 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126
4127 PostCreatePipelineLayout(device, pPipelineLayout, result);
4128
4129 return result;
4130}
4131
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004132bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004133 VkDevice device,
4134 const VkSamplerCreateInfo* pCreateInfo)
4135{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004136 if(pCreateInfo != nullptr)
4137 {
4138 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004139 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004140 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004141 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004142 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004143 }
Chia-I Wub99df442015-10-26 16:49:32 +08004144 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4145 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004146 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004147 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004148 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004149 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004150 }
Chia-I Wub99df442015-10-26 16:49:32 +08004151 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4152 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004153 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004154 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004155 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004156 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004157 }
Chia-I Wub99df442015-10-26 16:49:32 +08004158 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4159 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004160 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004161 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004162 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004163 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004164 }
Chia-I Wub99df442015-10-26 16:49:32 +08004165 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4166 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004167 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004168 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004169 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004170 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004171 }
Chia-I Wub99df442015-10-26 16:49:32 +08004172 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4173 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004174 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004175 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004176 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004177 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004178 }
Chia-I Wub99df442015-10-26 16:49:32 +08004179 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4180 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004181 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004182 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004183 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004184 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004185 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004186 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004187 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004188 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4189 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4190 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004191 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004192 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4193 return false;
4194 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004195 }
4196 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4197 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4198 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004199 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004200 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004201 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004202 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004203 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004204
4205 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004206}
4207
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004208bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004209 VkDevice device,
4210 VkSampler* pSampler,
4211 VkResult result)
4212{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004213
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004214 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004215 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004216 }
4217
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004218 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004219 {
4220 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004221 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 -06004222 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004223 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004224
4225 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004226}
4227
Chia-I Wu9ab61502015-11-06 06:42:02 +08004228VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004229 VkDevice device,
4230 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004231 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004232 VkSampler* pSampler)
4233{
4234 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004235
Chia-I Wuf7458c52015-10-26 21:10:41 +08004236 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004237
4238 PostCreateSampler(device, pSampler, result);
4239
4240 return result;
4241}
4242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004243bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004244 VkDevice device,
4245 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4246{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004247 if(pCreateInfo != nullptr)
4248 {
4249 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004250 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004251 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004252 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004253 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004254 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004255 if(pCreateInfo->pBindings != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004256 {
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004257 if(pCreateInfo->pBindings->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4258 pCreateInfo->pBindings->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004260 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004261 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBindings->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004262 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004263 }
Jon Ashburn6e23c1f2015-12-30 18:01:16 -07004264 if(pCreateInfo->pBindings->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004265 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004266 }
4267 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004269
4270 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004271}
4272
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004273bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004274 VkDevice device,
4275 VkDescriptorSetLayout* pSetLayout,
4276 VkResult result)
4277{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004278
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004279 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004280 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004281 }
4282
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004283 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004284 {
4285 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004286 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 -06004287 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004288 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004289
4290 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004291}
4292
Chia-I Wu9ab61502015-11-06 06:42:02 +08004293VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004294 VkDevice device,
4295 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004296 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004297 VkDescriptorSetLayout* pSetLayout)
4298{
4299 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004300
Chia-I Wuf7458c52015-10-26 21:10:41 +08004301 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004302
4303 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4304
4305 return result;
4306}
4307
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004308bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004309 VkDevice device,
4310 const VkDescriptorPoolCreateInfo* pCreateInfo)
4311{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004312 if(pCreateInfo != nullptr)
4313 {
4314 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004315 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004316 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004317 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004318 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004319 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004320 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004321 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004322 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4323 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004325 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004326 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004327 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004328 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004329 }
4330 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004331
4332 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333}
4334
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004335bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004336 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004337 uint32_t maxSets,
4338 VkDescriptorPool* pDescriptorPool,
4339 VkResult result)
4340{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004342 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004343
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004344 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004345 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346 }
4347
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004348 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004349 {
4350 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004351 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 -06004352 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004353 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004354
4355 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004356}
4357
Chia-I Wu9ab61502015-11-06 06:42:02 +08004358VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004359 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004360 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004361 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004362 VkDescriptorPool* pDescriptorPool)
4363{
4364 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004365
Chia-I Wuf7458c52015-10-26 21:10:41 +08004366 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004368 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004369
4370 return result;
4371}
4372
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004373bool PostResetDescriptorPool(
4374 VkDevice device,
4375 VkDescriptorPool descriptorPool,
4376 VkResult result)
4377{
4378
Jeremy Hayes99a96322015-06-26 12:48:09 -06004379
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004380 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004381 {
4382 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004383 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 -06004384 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004385 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004386
4387 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004388}
4389
Chia-I Wu9ab61502015-11-06 06:42:02 +08004390VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004391 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004392 VkDescriptorPool descriptorPool,
4393 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004394{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004395 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396
4397 PostResetDescriptorPool(device, descriptorPool, result);
4398
4399 return result;
4400}
4401
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004402bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004403 VkDevice device,
4404 const VkDescriptorSetLayout* pSetLayouts)
4405{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004406 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004407 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004409
4410 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004411}
4412
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004413bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004414 VkDevice device,
4415 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416 uint32_t count,
4417 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004418 VkResult result)
4419{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004420
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004422 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004424 }
4425
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004426 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004427 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004428 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004429 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 -06004430 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004431 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004432
4433 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004434}
4435
Chia-I Wu9ab61502015-11-06 06:42:02 +08004436VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004437 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004438 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004439 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004440{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004441 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004442
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004443 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004444
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004445 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004446
4447 return result;
4448}
4449
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004450bool PreFreeDescriptorSets(
4451 VkDevice device,
4452 const VkDescriptorSet* pDescriptorSets)
4453{
4454 if(pDescriptorSets != nullptr)
4455 {
4456 }
4457
4458 return true;
4459}
4460
4461bool PostFreeDescriptorSets(
4462 VkDevice device,
4463 VkDescriptorPool descriptorPool,
4464 uint32_t count,
4465 VkResult result)
4466{
4467
4468
4469
4470 if(result < VK_SUCCESS)
4471 {
4472 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004473 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 -06004474 return false;
4475 }
4476
4477 return true;
4478}
4479
Chia-I Wu9ab61502015-11-06 06:42:02 +08004480VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004481 VkDevice device,
4482 VkDescriptorPool descriptorPool,
4483 uint32_t count,
4484 const VkDescriptorSet* pDescriptorSets)
4485{
4486 PreFreeDescriptorSets(device, pDescriptorSets);
4487
4488 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4489
4490 PostFreeDescriptorSets(device, descriptorPool, count, result);
4491
4492 return result;
4493}
4494
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004495bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004496 VkDevice device,
4497 const VkWriteDescriptorSet* pDescriptorWrites,
4498 const VkCopyDescriptorSet* pDescriptorCopies)
4499{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004500 if(pDescriptorWrites != nullptr)
4501 {
4502 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004503 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004504 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004505 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004507 }
4508 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4509 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4510 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004512 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004513 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004514 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004515 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4516 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4517 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004518 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004519 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4520 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004521 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004522 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004523 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004524 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004525 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004526 }
4527 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004528
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004529 if(pDescriptorCopies != nullptr)
4530 {
4531 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004532 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004533 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004535 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004536 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004538
4539 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004540}
4541
Chia-I Wu9ab61502015-11-06 06:42:02 +08004542VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004543 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004544 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004545 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004546 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004547 const VkCopyDescriptorSet* pDescriptorCopies)
4548{
4549 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004550
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004551 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552}
4553
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004554bool PreCreateFramebuffer(
4555 VkDevice device,
4556 const VkFramebufferCreateInfo* pCreateInfo)
4557{
4558 if(pCreateInfo != nullptr)
4559 {
4560 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4561 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004562 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004563 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4564 return false;
4565 }
4566 if(pCreateInfo->pAttachments != nullptr)
4567 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004568 }
4569 }
4570
4571 return true;
4572}
4573
4574bool PostCreateFramebuffer(
4575 VkDevice device,
4576 VkFramebuffer* pFramebuffer,
4577 VkResult result)
4578{
4579
4580 if(pFramebuffer != nullptr)
4581 {
4582 }
4583
4584 if(result < VK_SUCCESS)
4585 {
4586 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004587 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 -06004588 return false;
4589 }
4590
4591 return true;
4592}
4593
Chia-I Wu9ab61502015-11-06 06:42:02 +08004594VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004595 VkDevice device,
4596 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004597 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004598 VkFramebuffer* pFramebuffer)
4599{
4600 PreCreateFramebuffer(device, pCreateInfo);
4601
Chia-I Wuf7458c52015-10-26 21:10:41 +08004602 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004603
4604 PostCreateFramebuffer(device, pFramebuffer, result);
4605
4606 return result;
4607}
4608
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004609bool PreCreateRenderPass(
4610 VkDevice device,
4611 const VkRenderPassCreateInfo* pCreateInfo)
4612{
4613 if(pCreateInfo != nullptr)
4614 {
4615 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4616 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004617 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004618 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4619 return false;
4620 }
4621 if(pCreateInfo->pAttachments != nullptr)
4622 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004623 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4624 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4625 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004626 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004627 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4628 return false;
4629 }
4630 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4631 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4632 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004633 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004634 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4635 return false;
4636 }
4637 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4638 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4639 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004640 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004641 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4642 return false;
4643 }
4644 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4645 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4646 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004647 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004648 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4649 return false;
4650 }
4651 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4652 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4653 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004654 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004655 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4656 return false;
4657 }
4658 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4659 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4660 {
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 }
4665 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4666 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4667 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004668 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004669 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4670 return false;
4671 }
4672 }
4673 if(pCreateInfo->pSubpasses != nullptr)
4674 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004675 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4676 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4677 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004678 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004679 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4680 return false;
4681 }
Cody Northropa505dda2015-08-04 11:16:41 -06004682 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004683 {
Cody Northropa505dda2015-08-04 11:16:41 -06004684 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4685 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004686 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004687 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004688 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004689 return false;
4690 }
4691 }
Cody Northropa505dda2015-08-04 11:16:41 -06004692 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004693 {
Cody Northropa505dda2015-08-04 11:16:41 -06004694 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4695 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004696 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004697 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004698 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004699 return false;
4700 }
4701 }
Cody Northropa505dda2015-08-04 11:16:41 -06004702 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004703 {
Cody Northropa505dda2015-08-04 11:16:41 -06004704 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4705 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004706 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004707 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004708 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004709 return false;
4710 }
4711 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004712 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4713 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4714 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004715 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004716 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004717 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004718 return false;
4719 }
Cody Northropa505dda2015-08-04 11:16:41 -06004720 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004721 {
Cody Northropa505dda2015-08-04 11:16:41 -06004722 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4723 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004724 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004725 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004726 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004727 return false;
4728 }
4729 }
4730 }
4731 if(pCreateInfo->pDependencies != nullptr)
4732 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004733 }
4734 }
4735
4736 return true;
4737}
4738
4739bool PostCreateRenderPass(
4740 VkDevice device,
4741 VkRenderPass* pRenderPass,
4742 VkResult result)
4743{
4744
4745 if(pRenderPass != nullptr)
4746 {
4747 }
4748
4749 if(result < VK_SUCCESS)
4750 {
4751 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004752 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 -06004753 return false;
4754 }
4755
4756 return true;
4757}
4758
Chia-I Wu9ab61502015-11-06 06:42:02 +08004759VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004760 VkDevice device,
4761 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004762 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004763 VkRenderPass* pRenderPass)
4764{
4765 PreCreateRenderPass(device, pCreateInfo);
4766
Chia-I Wuf7458c52015-10-26 21:10:41 +08004767 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004768
4769 PostCreateRenderPass(device, pRenderPass, result);
4770
4771 return result;
4772}
4773
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004774bool PostGetRenderAreaGranularity(
4775 VkDevice device,
4776 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004777 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004778{
4779
4780
4781 if(pGranularity != nullptr)
4782 {
4783 }
4784
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004785 return true;
4786}
4787
Chia-I Wu9ab61502015-11-06 06:42:02 +08004788VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004789 VkDevice device,
4790 VkRenderPass renderPass,
4791 VkExtent2D* pGranularity)
4792{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004793 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004794
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004795 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004796}
4797
4798bool PreCreateCommandPool(
4799 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004800 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004801{
4802 if(pCreateInfo != nullptr)
4803 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004804 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004805 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004806 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004807 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4808 return false;
4809 }
4810 }
4811
4812 return true;
4813}
4814
4815bool PostCreateCommandPool(
4816 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004817 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004818 VkResult result)
4819{
4820
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004821 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004822 {
4823 }
4824
4825 if(result < VK_SUCCESS)
4826 {
4827 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004828 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 -06004829 return false;
4830 }
4831
4832 return true;
4833}
4834
Chia-I Wu9ab61502015-11-06 06:42:02 +08004835VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004836 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004837 const VkCommandPoolCreateInfo* pCreateInfo,
4838 const VkAllocationCallbacks* pAllocator,
4839 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004840{
4841 PreCreateCommandPool(device, pCreateInfo);
4842
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004843 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004844
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004845 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004846
4847 return result;
4848}
4849
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004850bool PostResetCommandPool(
4851 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004852 VkCommandPool commandPool,
4853 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004854 VkResult result)
4855{
4856
4857
4858
4859 if(result < VK_SUCCESS)
4860 {
4861 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004862 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 -06004863 return false;
4864 }
4865
4866 return true;
4867}
4868
Chia-I Wu9ab61502015-11-06 06:42:02 +08004869VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004870 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004871 VkCommandPool commandPool,
4872 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004873{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004874 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004875
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004876 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004877
4878 return result;
4879}
4880
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004881bool PreCreateCommandBuffer(
4882 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004883 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004884{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004885 if(pCreateInfo != nullptr)
4886 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004887 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004888 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004889 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004890 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004891 return false;
4892 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004893 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4894 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004895 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004896 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004897 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004898 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004899 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004900 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004901
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004902 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004903}
4904
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004905bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004906 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004907 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004908 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004909{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004910
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004911 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004912 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004913 }
4914
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004915 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004916 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004917 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004918 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 -06004919 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004920 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004921
4922 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004923}
4924
Chia-I Wu9ab61502015-11-06 06:42:02 +08004925VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004926 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004927 const VkCommandBufferAllocateInfo* pCreateInfo,
4928 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004929{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004930 PreCreateCommandBuffer(device, pCreateInfo);
4931
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004932 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004933
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004934 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004935
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004936 return result;
4937}
4938
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004939bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004940 VkCommandBuffer commandBuffer,
4941 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004942{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004943 if(pBeginInfo != nullptr)
4944 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004945 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004946 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004947 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004948 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004949 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004950 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004952
4953 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004954}
4955
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004956bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004957 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004958 VkResult result)
4959{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004960
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004961 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004962 {
4963 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004964 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 -06004965 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004966 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004967
4968 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004969}
4970
Chia-I Wu9ab61502015-11-06 06:42:02 +08004971VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004972 VkCommandBuffer commandBuffer,
4973 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004974{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004975 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004976
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004977 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004978
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004979 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004980
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004981 return result;
4982}
4983
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004984bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004985 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004986 VkResult result)
4987{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004988
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004989 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004990 {
4991 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07004992 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 -06004993 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004994 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004995
4996 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004997}
4998
Chia-I Wu9ab61502015-11-06 06:42:02 +08004999VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005000 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005001{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005002 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005003
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005004 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005005
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005006 return result;
5007}
5008
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005009bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005010 VkCommandBuffer commandBuffer,
5011 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005012 VkResult result)
5013{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005014
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005015
5016 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005017 {
5018 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005019 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 -06005020 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005021 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005022
5023 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005024}
5025
Chia-I Wu9ab61502015-11-06 06:42:02 +08005026VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005027 VkCommandBuffer commandBuffer,
5028 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005029{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005030 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005031
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005033
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005034 return result;
5035}
5036
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005037bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005038 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005039 VkPipelineBindPoint pipelineBindPoint,
5040 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005041{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005042
5043 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5044 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5045 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005046 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005047 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005048 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005049 }
5050
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005051
5052 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005053}
5054
Chia-I Wu9ab61502015-11-06 06:42:02 +08005055VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005056 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005057 VkPipelineBindPoint pipelineBindPoint,
5058 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005059{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005060 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005061
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005062 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005063}
5064
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005065VK_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 -06005066{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005067 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005068}
5069
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005070VK_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 -06005071{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005072 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
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 vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005076{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005077 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005078}
5079
Chia-I Wu9ab61502015-11-06 06:42:02 +08005080VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
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)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005083}
5084
Chia-I Wu9ab61502015-11-06 06:42:02 +08005085VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005086{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005087 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
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 vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005091{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005093}
5094
Chia-I Wu9ab61502015-11-06 06:42:02 +08005095VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005096{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005097 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
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 vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
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)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005103}
5104
Chia-I Wu9ab61502015-11-06 06:42:02 +08005105VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005106{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005107 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108}
5109
5110bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005111 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005112 const VkDescriptorSet* pDescriptorSets,
5113 const uint32_t* pDynamicOffsets)
5114{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005115 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005116 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005118
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005119 if(pDynamicOffsets != nullptr)
5120 {
5121 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005122
5123 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005124}
5125
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005126bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005127 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005128 VkPipelineBindPoint pipelineBindPoint,
5129 VkPipelineLayout layout,
5130 uint32_t firstSet,
5131 uint32_t setCount,
5132 uint32_t dynamicOffsetCount)
5133{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005134
5135 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5136 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5137 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005138 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005139 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005140 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005141 }
5142
5143
5144
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145
5146
5147 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005148}
5149
Chia-I Wu9ab61502015-11-06 06:42:02 +08005150VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005151 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005152 VkPipelineBindPoint pipelineBindPoint,
5153 VkPipelineLayout layout,
5154 uint32_t firstSet,
5155 uint32_t setCount,
5156 const VkDescriptorSet* pDescriptorSets,
5157 uint32_t dynamicOffsetCount,
5158 const uint32_t* pDynamicOffsets)
5159{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005160 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005161
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005162 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005163
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005164 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005165}
5166
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005167bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005168 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005169 VkBuffer buffer,
5170 VkDeviceSize offset,
5171 VkIndexType indexType)
5172{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005173
Jeremy Hayes99a96322015-06-26 12:48:09 -06005174
5175
5176 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5177 indexType > VK_INDEX_TYPE_END_RANGE)
5178 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005179 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005180 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005181 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005182 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005183
5184 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005185}
5186
Chia-I Wu9ab61502015-11-06 06:42:02 +08005187VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005188 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005189 VkBuffer buffer,
5190 VkDeviceSize offset,
5191 VkIndexType indexType)
5192{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005193 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005194
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005195 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005196}
5197
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005198bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005199 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005200 const VkBuffer* pBuffers,
5201 const VkDeviceSize* pOffsets)
5202{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005203 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005204 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005205 }
5206
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005207 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005208 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005209 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005210
5211 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005212}
5213
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005214bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005215 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005216 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005217 uint32_t bindingCount)
5218{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005219
5220
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005221
5222 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005223}
5224
Chia-I Wu9ab61502015-11-06 06:42:02 +08005225VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005226 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005227 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005228 uint32_t bindingCount,
5229 const VkBuffer* pBuffers,
5230 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005231{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005232 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005233
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005234 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005235
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005236 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005237}
5238
Michael Lentine55a913f2015-11-24 09:48:23 -06005239bool PreCmdDraw(
5240 VkCommandBuffer commandBuffer,
5241 uint32_t vertexCount,
5242 uint32_t instanceCount,
5243 uint32_t firstVertex,
5244 uint32_t firstInstance)
5245{
5246 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005247 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5248 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005249 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005250 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5251 return false;
5252 }
5253
5254 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005255 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5256 // this an error or leave as is.
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005257 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005258 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5259 return false;
5260 }
5261
5262 return true;
5263}
5264
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005265bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005266 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005267 uint32_t firstVertex,
5268 uint32_t vertexCount,
5269 uint32_t firstInstance,
5270 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005271{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005272
5273
5274
5275
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005276
5277 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005278}
5279
Chia-I Wu9ab61502015-11-06 06:42:02 +08005280VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005281 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005282 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005283 uint32_t instanceCount,
5284 uint32_t firstVertex,
5285 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005286{
Michael Lentine55a913f2015-11-24 09:48:23 -06005287 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5288
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005289 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005290
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005291 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005292}
5293
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005294bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005295 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005296 uint32_t firstIndex,
5297 uint32_t indexCount,
5298 int32_t vertexOffset,
5299 uint32_t firstInstance,
5300 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005301{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005302
5303
5304
5305
5306
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005307
5308 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005309}
5310
Chia-I Wu9ab61502015-11-06 06:42:02 +08005311VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005312 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005313 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005314 uint32_t instanceCount,
5315 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005316 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005317 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005318{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005319 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005320
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005321 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005322}
5323
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005324bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005325 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005326 VkBuffer buffer,
5327 VkDeviceSize offset,
5328 uint32_t count,
5329 uint32_t stride)
5330{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005331
5332
5333
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005334
5335
5336 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005337}
5338
Chia-I Wu9ab61502015-11-06 06:42:02 +08005339VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005340 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005341 VkBuffer buffer,
5342 VkDeviceSize offset,
5343 uint32_t count,
5344 uint32_t stride)
5345{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005346 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005347
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005348 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005349}
5350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005351bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005352 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005353 VkBuffer buffer,
5354 VkDeviceSize offset,
5355 uint32_t count,
5356 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005357{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005358
5359
5360
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005361
5362
5363 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005364}
5365
Chia-I Wu9ab61502015-11-06 06:42:02 +08005366VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005367 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005368 VkBuffer buffer,
5369 VkDeviceSize offset,
5370 uint32_t count,
5371 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005372{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005373 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005374
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005375 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005376}
5377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005378bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005379 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005380 uint32_t x,
5381 uint32_t y,
5382 uint32_t z)
5383{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005384
5385
5386
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005387
5388 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005389}
5390
Chia-I Wu9ab61502015-11-06 06:42:02 +08005391VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005392 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005393 uint32_t x,
5394 uint32_t y,
5395 uint32_t z)
5396{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005397 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005399 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005400}
5401
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005402bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005403 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005404 VkBuffer buffer,
5405 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005406{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005407
Jeremy Hayes99a96322015-06-26 12:48:09 -06005408
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005409
5410 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005411}
5412
Chia-I Wu9ab61502015-11-06 06:42:02 +08005413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005414 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005415 VkBuffer buffer,
5416 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005417{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005418 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005419
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005420 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005421}
5422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005423bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005424 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005425 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005426{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005427 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005428 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005429 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005430
5431 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005432}
5433
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005434bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005435 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005436 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005437 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005438 uint32_t regionCount)
5439{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005440
Jeremy Hayes99a96322015-06-26 12:48:09 -06005441
Jeremy Hayes99a96322015-06-26 12:48:09 -06005442
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005443
5444 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005445}
5446
Chia-I Wu9ab61502015-11-06 06:42:02 +08005447VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005448 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005449 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005450 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005451 uint32_t regionCount,
5452 const VkBufferCopy* pRegions)
5453{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005454 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005455
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005456 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005457
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005458 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005459}
5460
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005461bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005462 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005463 const VkImageCopy* pRegions)
5464{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005465 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005466 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005467 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005468 (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 -06005469 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005470 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005471 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005472 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005473 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005474 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005475 (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 -06005476 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005477 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005478 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005479 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005480 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005481 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005482
5483 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005484}
5485
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005486bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005487 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005488 VkImage srcImage,
5489 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005490 VkImage dstImage,
5491 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005492 uint32_t regionCount)
5493{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005494
Jeremy Hayes99a96322015-06-26 12:48:09 -06005495
5496 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5497 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5498 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005499 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005500 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005501 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005502 }
5503
Jeremy Hayes99a96322015-06-26 12:48:09 -06005504
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005505 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5506 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005507 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005508 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005509 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005510 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005511 }
5512
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005513
5514 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005515}
5516
Chia-I Wu9ab61502015-11-06 06:42:02 +08005517VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005518 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005519 VkImage srcImage,
5520 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005521 VkImage dstImage,
5522 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005523 uint32_t regionCount,
5524 const VkImageCopy* pRegions)
5525{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005526 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005527
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005528 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005529
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005530 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005531}
5532
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005533bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005534 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005535 const VkImageBlit* pRegions)
5536{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005537 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005538 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005539 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005540 (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 -06005541 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005542 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005543 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005545 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005546 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005547 (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 -06005548 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005549 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005550 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005551 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005552 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005553 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005554
5555 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005556}
5557
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005558bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005559 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005560 VkImage srcImage,
5561 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005562 VkImage dstImage,
5563 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005564 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005565 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005566{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005567
Jeremy Hayes99a96322015-06-26 12:48:09 -06005568
5569 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5570 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5571 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005572 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005573 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005574 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005575 }
5576
Jeremy Hayes99a96322015-06-26 12:48:09 -06005577
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005578 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5579 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005580 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005581 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005582 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005583 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005584 }
5585
5586
Chia-I Wub99df442015-10-26 16:49:32 +08005587 if(filter < VK_FILTER_BEGIN_RANGE ||
5588 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005590 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005591 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005592 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005593 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005594
5595 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005596}
5597
Chia-I Wu9ab61502015-11-06 06:42:02 +08005598VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005599 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005600 VkImage srcImage,
5601 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005602 VkImage dstImage,
5603 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005604 uint32_t regionCount,
5605 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005606 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005607{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005608 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005609
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005610 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005611
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005612 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005613}
5614
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005615bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005616 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005617 const VkBufferImageCopy* pRegions)
5618{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005619 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005620 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005621 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005622 (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 -06005623 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005624 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005625 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005626 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005627 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005628 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005629
5630 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005631}
5632
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005633bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005634 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005635 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005636 VkImage dstImage,
5637 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005638 uint32_t regionCount)
5639{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640
Jeremy Hayes99a96322015-06-26 12:48:09 -06005641
Jeremy Hayes99a96322015-06-26 12:48:09 -06005642
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005643 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5644 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005646 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005647 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005648 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005649 }
5650
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005651
5652 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005653}
5654
Chia-I Wu9ab61502015-11-06 06:42:02 +08005655VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005656 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005657 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005658 VkImage dstImage,
5659 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005660 uint32_t regionCount,
5661 const VkBufferImageCopy* pRegions)
5662{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005664
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005665 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005666
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005667 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005668}
5669
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005670bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005671 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005672 const VkBufferImageCopy* pRegions)
5673{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005674 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005675 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005676 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005677 (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 -06005678 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005679 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005680 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005681 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005682 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005683 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005684
5685 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005686}
5687
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005688bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005689 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005690 VkImage srcImage,
5691 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005692 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005693 uint32_t regionCount)
5694{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695
Jeremy Hayes99a96322015-06-26 12:48:09 -06005696
5697 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5698 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5699 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005700 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005701 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005702 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005703 }
5704
Jeremy Hayes99a96322015-06-26 12:48:09 -06005705
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005706
5707 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005708}
5709
Chia-I Wu9ab61502015-11-06 06:42:02 +08005710VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005711 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005712 VkImage srcImage,
5713 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005714 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005715 uint32_t regionCount,
5716 const VkBufferImageCopy* pRegions)
5717{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005718 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005719
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005720 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005721
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005722 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005723}
5724
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005725bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005726 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005727 const uint32_t* pData)
5728{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005729 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005730 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005731 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005732
5733 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005734}
5735
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005736bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005737 VkCommandBuffer commandBuffer,
5738 VkBuffer dstBuffer,
5739 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005740 VkDeviceSize dataSize)
5741{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005742
5743
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005744
5745
5746 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747}
5748
Chia-I Wu9ab61502015-11-06 06:42:02 +08005749VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005750 VkCommandBuffer commandBuffer,
5751 VkBuffer dstBuffer,
5752 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005753 VkDeviceSize dataSize,
5754 const uint32_t* pData)
5755{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005756 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005757
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005758 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005759
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005760 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005761}
5762
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005763bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005764 VkCommandBuffer commandBuffer,
5765 VkBuffer dstBuffer,
5766 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005767 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005768 uint32_t data)
5769{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005770
5771
5772
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005773
5774
5775 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005776}
5777
Chia-I Wu9ab61502015-11-06 06:42:02 +08005778VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005779 VkCommandBuffer commandBuffer,
5780 VkBuffer dstBuffer,
5781 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005782 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005783 uint32_t data)
5784{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005785 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005786
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005787 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005788}
5789
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005790bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005791 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005792 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793 const VkImageSubresourceRange* pRanges)
5794{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005795 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005796 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005797 }
5798
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005799 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005800 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005801 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005802 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005803
5804 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005805}
5806
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005807bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005808 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005809 VkImage image,
5810 VkImageLayout imageLayout,
5811 uint32_t rangeCount)
5812{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005813
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814
5815 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5816 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5817 {
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
5867 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5868 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5869 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005870 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005871 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005872 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005873 }
5874
5875
5876
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877
5878 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005879}
5880
Chia-I Wu9ab61502015-11-06 06:42:02 +08005881VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005882 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005883 VkImage image,
5884 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005885 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005886 uint32_t rangeCount,
5887 const VkImageSubresourceRange* pRanges)
5888{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005889 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005890
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005891 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005892
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005893 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005894}
5895
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005896bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005897 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005898 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005899 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005900{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005901 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005902 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903 }
5904
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005905 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005906 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005907 }
5908
5909 return true;
5910}
5911
Chia-I Wu9ab61502015-11-06 06:42:02 +08005912VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005913 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005914 uint32_t attachmentCount,
5915 const VkClearAttachment* pAttachments,
5916 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005917 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005918{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005919 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005920 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005921 }
5922
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005923 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005924}
5925
5926bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005927 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005928 const VkImageResolve* pRegions)
5929{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005930 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005931 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005932 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005933 (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 -06005934 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005935 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005936 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005937 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005938 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005939 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005940 (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 -06005941 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005942 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005943 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005944 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005945 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005946 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005947
5948 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005949}
5950
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005951bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005952 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005953 VkImage srcImage,
5954 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005955 VkImage dstImage,
5956 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005957 uint32_t regionCount)
5958{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005959
Jeremy Hayes99a96322015-06-26 12:48:09 -06005960
5961 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5962 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5963 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005964 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005965 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005966 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005967 }
5968
Jeremy Hayes99a96322015-06-26 12:48:09 -06005969
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005970 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5971 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005972 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07005973 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005974 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005975 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005976 }
5977
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005978
5979 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005980}
5981
Chia-I Wu9ab61502015-11-06 06:42:02 +08005982VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005983 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005984 VkImage srcImage,
5985 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005986 VkImage dstImage,
5987 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005988 uint32_t regionCount,
5989 const VkImageResolve* pRegions)
5990{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005991 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005992
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005993 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005994
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005995 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005996}
5997
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005998bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005999 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006000 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006001 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006002{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006003
Jeremy Hayes99a96322015-06-26 12:48:09 -06006004
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006005
6006 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007}
6008
Chia-I Wu9ab61502015-11-06 06:42:02 +08006009VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006010 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006011 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006012 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006013{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006014 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006015
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006016 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006017}
6018
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006019bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006020 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006021 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006022 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006023{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006024
Jeremy Hayes99a96322015-06-26 12:48:09 -06006025
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006026
6027 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028}
6029
Chia-I Wu9ab61502015-11-06 06:42:02 +08006030VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006031 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006032 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006033 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006034{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006035 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006036
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006037 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006038}
6039
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006040bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006041 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006042 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006043 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006044{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006045 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006046 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047 }
6048
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006049 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006050 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006052
6053 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006054}
6055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006056bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006057 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006058 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006059 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006060 VkPipelineStageFlags dstStageMask,
6061 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006062{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006064
Jeremy Hayes99a96322015-06-26 12:48:09 -06006065
6066
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006067
6068 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006069}
6070
Chia-I Wu9ab61502015-11-06 06:42:02 +08006071VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006072 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006073 uint32_t eventCount,
6074 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006075 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006076 VkPipelineStageFlags dstStageMask,
6077 uint32_t memoryBarrierCount,
6078 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006079{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006080 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006081
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006083
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006084 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006085}
6086
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006087bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006088 VkCommandBuffer commandBuffer,
6089 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006090{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006091 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006092 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006093 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006094
6095 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006096}
6097
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006098bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006099 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006100 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006101 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006102 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006103 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006104{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006105
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006106
Jeremy Hayes99a96322015-06-26 12:48:09 -06006107
6108
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006109
6110 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006111}
6112
Chia-I Wu9ab61502015-11-06 06:42:02 +08006113VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006114 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006115 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006116 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006117 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006118 uint32_t memoryBarrierCount,
6119 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006120{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006121 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006122
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006123 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006124
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006125 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006126}
6127
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006128bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006129 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006130 VkQueryPool queryPool,
6131 uint32_t slot,
6132 VkQueryControlFlags flags)
6133{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006134
Jeremy Hayes99a96322015-06-26 12:48:09 -06006135
6136
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006137
6138 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006139}
6140
Chia-I Wu9ab61502015-11-06 06:42:02 +08006141VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006142 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006143 VkQueryPool queryPool,
6144 uint32_t slot,
6145 VkQueryControlFlags flags)
6146{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006147 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006148
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006149 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006150}
6151
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006152bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006153 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006154 VkQueryPool queryPool,
6155 uint32_t slot)
6156{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006157
Jeremy Hayes99a96322015-06-26 12:48:09 -06006158
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006159
6160 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006161}
6162
Chia-I Wu9ab61502015-11-06 06:42:02 +08006163VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006164 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006165 VkQueryPool queryPool,
6166 uint32_t slot)
6167{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006168 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006169
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006170 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006171}
6172
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006173bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006174 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006175 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006176 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006177 uint32_t queryCount)
6178{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006179
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006180
6181
6182
6183 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006184}
6185
Chia-I Wu9ab61502015-11-06 06:42:02 +08006186VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006187 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006188 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006189 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006190 uint32_t queryCount)
6191{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006192 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006194 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195}
6196
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006197bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006198 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006199 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006200 VkQueryPool queryPool,
6201 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006202{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006203
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006204 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006205
6206 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207}
6208
Chia-I Wu9ab61502015-11-06 06:42:02 +08006209VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006210 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006211 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006212 VkQueryPool queryPool,
6213 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006214{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006215 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006216
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006217 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006218}
6219
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006220bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006221 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006222 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006223 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006224 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006225 VkBuffer dstBuffer,
6226 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006227 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006228 VkQueryResultFlags flags)
6229{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006230
6231
6232
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006233
Jeremy Hayes99a96322015-06-26 12:48:09 -06006234
6235
6236
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006237
6238 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006239}
6240
Chia-I Wu9ab61502015-11-06 06:42:02 +08006241VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
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)
Jeremy Hayesad367152015-04-17 10:36:53 -06006250{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006251 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006252
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006253 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006254}
6255
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006256bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006257 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006258 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006259{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006260 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006261 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006262 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006263
6264 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006265}
6266
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006267bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006268 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006269 VkPipelineLayout layout,
6270 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006271 uint32_t offset,
6272 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006273{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006274
Jeremy Hayes99a96322015-06-26 12:48:09 -06006275
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006276
6277
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006278
6279 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280}
6281
Chia-I Wu9ab61502015-11-06 06:42:02 +08006282VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006283 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006284 VkPipelineLayout layout,
6285 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006286 uint32_t offset,
6287 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006288 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006289{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006290 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006291
Chia-I Wuce9b1772015-11-12 06:09:22 +08006292 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006293
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006294 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006295}
6296
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006297bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006298 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006299 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006300{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006301 if(pRenderPassBegin != nullptr)
6302 {
6303 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006304 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006305 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006306 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006307 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006308 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006309 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006310 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006311 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006312 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006313
6314 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006315}
6316
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006317bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006318 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006319 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006320{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006321
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006322 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6323 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006324 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006325 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006326 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006327 return false;
6328 }
6329
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006330 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006331}
6332
Chia-I Wu9ab61502015-11-06 06:42:02 +08006333VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006334 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006335 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006336 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006337{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006338 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006339
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006340 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006341
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006342 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006343}
6344
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006345bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006346 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006347 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006348{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006349
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006350 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6351 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006352 {
Mark Lobodzinskif0b3b7d2016-01-04 13:48:15 -07006353 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, __LINE__, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006354 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006355 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006356 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006357
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006358 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006359}
6360
Chia-I Wu9ab61502015-11-06 06:42:02 +08006361VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006362 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006363 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006364{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006365 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006366
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006367 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006368}
6369
6370bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006371 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006372{
6373
6374 return true;
6375}
6376
Chia-I Wu9ab61502015-11-06 06:42:02 +08006377VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006378 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006379{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006380 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006381
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006382 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006383}
6384
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006385bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006386 VkCommandBuffer commandBuffer,
6387 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006388{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006389 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006390 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006391 }
6392
6393 return true;
6394}
6395
6396bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006397 VkCommandBuffer commandBuffer,
6398 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006399{
6400
6401
6402 return true;
6403}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006404
Chia-I Wu9ab61502015-11-06 06:42:02 +08006405VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006406 VkCommandBuffer commandBuffer,
6407 uint32_t commandBuffersCount,
6408 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006409{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006410 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006411
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006412 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006413
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006414 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006415}
6416
Chia-I Wu9ab61502015-11-06 06:42:02 +08006417VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006418{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006419 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006420 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006421 }
6422
Jon Ashburn8fd08252015-05-28 16:25:02 -06006423 /* loader uses this to force layer initialization; device object is wrapped */
6424 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006425 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006426 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006427 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006428
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006429 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006430 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006431 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006432 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006433 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006434 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006435 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006436 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006437 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006438 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006439 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006440 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006441 if (!strcmp(funcName, "vkAllocateMemory"))
6442 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006443 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006444 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006445 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006446 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006447 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006448 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006449 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006450 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006451 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006452 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006453 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006454 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006455 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006456 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006457 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006458 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006459 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006460 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006461 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006462 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006463 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006464 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006465 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006466 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006467 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006468 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006469 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006470 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006471 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006472 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006473 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006474 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006475 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006476 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006477 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006478 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006479 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006480 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006481 if (!strcmp(funcName, "vkCreateShaderModule"))
6482 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006483 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006484 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006485 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006486 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006487 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006488 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006489 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006490 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006491 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006492 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006493 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006494 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006495 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006496 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006497 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6498 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006499 if (!strcmp(funcName, "vkCmdSetViewport"))
6500 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006501 if (!strcmp(funcName, "vkCmdSetScissor"))
6502 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006503 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6504 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6505 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6506 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6507 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6508 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6509 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6510 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6511 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6512 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6513 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6514 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6515 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6516 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006517 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6518 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006519 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006520 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006521 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006522 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006523 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006524 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006525 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006526 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006527 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006528 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006529 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006530 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006531 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006532 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006533 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006534 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006535 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006536 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006537 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006538 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006539 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006540 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006541 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006542 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006543 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006544 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006545 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006546 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006547 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006548 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006549 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006550 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006551 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006552 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006553 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006554 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006555 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006556 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006557 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006558 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006559 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006560 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006561 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006562 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006563 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006564 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006565 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006566 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006567 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006568 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006569 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006570 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006571 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006572 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006573 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006574 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006575 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006576 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006577 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006578 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006579 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006580 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006581 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006582 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006583 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006584 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006585 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006586 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006587 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006588 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006589
Jon Ashburneab34492015-06-01 09:37:38 -06006590 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006591 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006592 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006593 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006594 }
6595}
6596
Chia-I Wu9ab61502015-11-06 06:42:02 +08006597VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006598{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006599 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006600 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006601 }
6602
Jon Ashburn8fd08252015-05-28 16:25:02 -06006603 /* loader uses this to force layer initialization; instance object is wrapped */
6604 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006605 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006606 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006607 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006608
Jeremy Hayes99a96322015-06-26 12:48:09 -06006609 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006610 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006611 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006612 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006613 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006614 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006615 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006616 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006617 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006618 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006619 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006620 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006621 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6622 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6623 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6624 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6625 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6626 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6627 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6628 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006629
Jeremy Hayes99a96322015-06-26 12:48:09 -06006630 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006631 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006632 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006633 return fptr;
6634
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635 {
6636 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6637 return NULL;
6638 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6639 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006640}