blob: e5976a306f36029a19d788264f21b538a7a92050 [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 |
831 VK_QUERY_RESULT_64_BIT |
832 VK_QUERY_RESULT_DEFAULT);
833 if(enumerator & (~allFlags))
834 {
835 return false;
836 }
837
838 return true;
839}
840
841static
842std::string EnumeratorString(VkQueryResultFlagBits const& enumerator)
843{
844 if(!ValidateEnumerator(enumerator))
845 {
846 return "unrecognized enumerator";
847 }
848
849 std::vector<std::string> strings;
850 if(enumerator & VK_QUERY_RESULT_PARTIAL_BIT)
851 {
852 strings.push_back("VK_QUERY_RESULT_PARTIAL_BIT");
853 }
854 if(enumerator & VK_QUERY_RESULT_WITH_AVAILABILITY_BIT)
855 {
856 strings.push_back("VK_QUERY_RESULT_WITH_AVAILABILITY_BIT");
857 }
858 if(enumerator & VK_QUERY_RESULT_WAIT_BIT)
859 {
860 strings.push_back("VK_QUERY_RESULT_WAIT_BIT");
861 }
862 if(enumerator & VK_QUERY_RESULT_64_BIT)
863 {
864 strings.push_back("VK_QUERY_RESULT_64_BIT");
865 }
866 if(enumerator & VK_QUERY_RESULT_DEFAULT)
867 {
868 strings.push_back("VK_QUERY_RESULT_DEFAULT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600869 }
870
871 std::string enumeratorString;
872 for(auto const& string : strings)
873 {
874 enumeratorString += string;
875
876 if(string != strings.back())
877 {
878 enumeratorString += '|';
879 }
880 }
881
882 return enumeratorString;
883}
884
885static
886bool ValidateEnumerator(VkBufferUsageFlagBits const& enumerator)
887{
888 VkBufferUsageFlagBits allFlags = (VkBufferUsageFlagBits)(VK_BUFFER_USAGE_VERTEX_BUFFER_BIT |
889 VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
890 VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT |
891 VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
892 VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800893 VK_BUFFER_USAGE_TRANSFER_DST_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -0600894 VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800895 VK_BUFFER_USAGE_TRANSFER_SRC_BIT |
Cody Northrop84fa7902015-08-25 15:39:48 -0600896 VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600897 if(enumerator & (~allFlags))
898 {
899 return false;
900 }
901
902 return true;
903}
904
905static
906std::string EnumeratorString(VkBufferUsageFlagBits const& enumerator)
907{
908 if(!ValidateEnumerator(enumerator))
909 {
910 return "unrecognized enumerator";
911 }
912
913 std::vector<std::string> strings;
914 if(enumerator & VK_BUFFER_USAGE_VERTEX_BUFFER_BIT)
915 {
916 strings.push_back("VK_BUFFER_USAGE_VERTEX_BUFFER_BIT");
917 }
918 if(enumerator & VK_BUFFER_USAGE_INDEX_BUFFER_BIT)
919 {
920 strings.push_back("VK_BUFFER_USAGE_INDEX_BUFFER_BIT");
921 }
922 if(enumerator & VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT)
923 {
924 strings.push_back("VK_BUFFER_USAGE_INDIRECT_BUFFER_BIT");
925 }
926 if(enumerator & VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT)
927 {
928 strings.push_back("VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT");
929 }
930 if(enumerator & VK_BUFFER_USAGE_STORAGE_BUFFER_BIT)
931 {
932 strings.push_back("VK_BUFFER_USAGE_STORAGE_BUFFER_BIT");
933 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800934 if(enumerator & VK_BUFFER_USAGE_TRANSFER_DST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600935 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800936 strings.push_back("VK_BUFFER_USAGE_TRANSFER_DST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600937 }
938 if(enumerator & VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT)
939 {
940 strings.push_back("VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT");
941 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800942 if(enumerator & VK_BUFFER_USAGE_TRANSFER_SRC_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600943 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +0800944 strings.push_back("VK_BUFFER_USAGE_TRANSFER_SRC_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600945 }
946 if(enumerator & VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT)
947 {
948 strings.push_back("VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT");
949 }
Jeremy Hayes99a96322015-06-26 12:48:09 -0600950
951 std::string enumeratorString;
952 for(auto const& string : strings)
953 {
954 enumeratorString += string;
955
956 if(string != strings.back())
957 {
958 enumeratorString += '|';
959 }
960 }
961
962 return enumeratorString;
963}
964
965static
966bool ValidateEnumerator(VkBufferCreateFlagBits const& enumerator)
967{
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600968 VkBufferCreateFlagBits allFlags = (VkBufferCreateFlagBits)(VK_BUFFER_CREATE_SPARSE_ALIASED_BIT |
969 VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600970 VK_BUFFER_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -0600971 if(enumerator & (~allFlags))
972 {
973 return false;
974 }
975
976 return true;
977}
978
979static
980std::string EnumeratorString(VkBufferCreateFlagBits const& enumerator)
981{
982 if(!ValidateEnumerator(enumerator))
983 {
984 return "unrecognized enumerator";
985 }
986
987 std::vector<std::string> strings;
Jeremy Hayes359eeb92015-07-09 17:11:25 -0600988 if(enumerator & VK_BUFFER_CREATE_SPARSE_ALIASED_BIT)
989 {
990 strings.push_back("VK_BUFFER_CREATE_SPARSE_ALIASED_BIT");
991 }
992 if(enumerator & VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT)
993 {
994 strings.push_back("VK_BUFFER_CREATE_SPARSE_RESIDENCY_BIT");
995 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600996 if(enumerator & VK_BUFFER_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -0600997 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -0600998 strings.push_back("VK_BUFFER_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -0600999 }
1000
1001 std::string enumeratorString;
1002 for(auto const& string : strings)
1003 {
1004 enumeratorString += string;
1005
1006 if(string != strings.back())
1007 {
1008 enumeratorString += '|';
1009 }
1010 }
1011
1012 return enumeratorString;
1013}
1014
1015static
Jeremy Hayes99a96322015-06-26 12:48:09 -06001016bool ValidateEnumerator(VkImageCreateFlagBits const& enumerator)
1017{
1018 VkImageCreateFlagBits allFlags = (VkImageCreateFlagBits)(VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT |
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001019 VK_IMAGE_CREATE_SPARSE_ALIASED_BIT |
1020 VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT |
Jeremy Hayes99a96322015-06-26 12:48:09 -06001021 VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT |
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001022 VK_IMAGE_CREATE_SPARSE_BINDING_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001023 if(enumerator & (~allFlags))
1024 {
1025 return false;
1026 }
1027
1028 return true;
1029}
1030
1031static
1032std::string EnumeratorString(VkImageCreateFlagBits const& enumerator)
1033{
1034 if(!ValidateEnumerator(enumerator))
1035 {
1036 return "unrecognized enumerator";
1037 }
1038
1039 std::vector<std::string> strings;
1040 if(enumerator & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)
1041 {
1042 strings.push_back("VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT");
1043 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001044 if(enumerator & VK_IMAGE_CREATE_SPARSE_ALIASED_BIT)
1045 {
1046 strings.push_back("VK_IMAGE_CREATE_SPARSE_ALIASED_BIT");
1047 }
1048 if(enumerator & VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT)
1049 {
1050 strings.push_back("VK_IMAGE_CREATE_SPARSE_RESIDENCY_BIT");
1051 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001052 if(enumerator & VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT)
1053 {
1054 strings.push_back("VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT");
1055 }
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001056 if(enumerator & VK_IMAGE_CREATE_SPARSE_BINDING_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001057 {
Courtney Goeltzenleuchter8134da02015-09-10 17:00:22 -06001058 strings.push_back("VK_IMAGE_CREATE_SPARSE_BINDING_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001059 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001060
1061 std::string enumeratorString;
1062 for(auto const& string : strings)
1063 {
1064 enumeratorString += string;
1065
1066 if(string != strings.back())
1067 {
1068 enumeratorString += '|';
1069 }
1070 }
1071
1072 return enumeratorString;
1073}
1074
1075static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001076bool ValidateEnumerator(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001077{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001078 VkColorComponentFlagBits allFlags = (VkColorComponentFlagBits)(VK_COLOR_COMPONENT_A_BIT |
1079 VK_COLOR_COMPONENT_B_BIT |
1080 VK_COLOR_COMPONENT_G_BIT |
1081 VK_COLOR_COMPONENT_R_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001082 if(enumerator & (~allFlags))
1083 {
1084 return false;
1085 }
1086
1087 return true;
1088}
1089
1090static
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001091std::string EnumeratorString(VkColorComponentFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001092{
1093 if(!ValidateEnumerator(enumerator))
1094 {
1095 return "unrecognized enumerator";
1096 }
1097
1098 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001099 if(enumerator & VK_COLOR_COMPONENT_A_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001100 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001101 strings.push_back("VK_COLOR_COMPONENT_A_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001102 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001103 if(enumerator & VK_COLOR_COMPONENT_B_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001104 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001105 strings.push_back("VK_COLOR_COMPONENT_B_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001106 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001107 if(enumerator & VK_COLOR_COMPONENT_G_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001108 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001109 strings.push_back("VK_COLOR_COMPONENT_G_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001110 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001111 if(enumerator & VK_COLOR_COMPONENT_R_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001112 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001113 strings.push_back("VK_COLOR_COMPONENT_R_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001114 }
1115
1116 std::string enumeratorString;
1117 for(auto const& string : strings)
1118 {
1119 enumeratorString += string;
1120
1121 if(string != strings.back())
1122 {
1123 enumeratorString += '|';
1124 }
1125 }
1126
1127 return enumeratorString;
1128}
1129
1130static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001131bool ValidateEnumerator(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001132{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001133 VkPipelineCreateFlagBits allFlags = (VkPipelineCreateFlagBits)(VK_PIPELINE_CREATE_DERIVATIVE_BIT |
1134 VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT |
1135 VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001136 if(enumerator & (~allFlags))
1137 {
1138 return false;
1139 }
1140
1141 return true;
1142}
1143
1144static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001145std::string EnumeratorString(VkPipelineCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001146{
1147 if(!ValidateEnumerator(enumerator))
1148 {
1149 return "unrecognized enumerator";
1150 }
1151
1152 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001153 if(enumerator & VK_PIPELINE_CREATE_DERIVATIVE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001154 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001155 strings.push_back("VK_PIPELINE_CREATE_DERIVATIVE_BIT");
1156 }
1157 if(enumerator & VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT)
1158 {
1159 strings.push_back("VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT");
1160 }
1161 if(enumerator & VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT)
1162 {
1163 strings.push_back("VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001164 }
1165
1166 std::string enumeratorString;
1167 for(auto const& string : strings)
1168 {
1169 enumeratorString += string;
1170
1171 if(string != strings.back())
1172 {
1173 enumeratorString += '|';
1174 }
1175 }
1176
1177 return enumeratorString;
1178}
1179
1180static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001181bool ValidateEnumerator(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001182{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001183 VkShaderStageFlagBits allFlags = (VkShaderStageFlagBits)(VK_SHADER_STAGE_ALL |
1184 VK_SHADER_STAGE_FRAGMENT_BIT |
1185 VK_SHADER_STAGE_GEOMETRY_BIT |
1186 VK_SHADER_STAGE_COMPUTE_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001187 VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT |
1188 VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001189 VK_SHADER_STAGE_VERTEX_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001190 if(enumerator & (~allFlags))
1191 {
1192 return false;
1193 }
1194
1195 return true;
1196}
1197
1198static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001199std::string EnumeratorString(VkShaderStageFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001200{
1201 if(!ValidateEnumerator(enumerator))
1202 {
1203 return "unrecognized enumerator";
1204 }
1205
1206 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001207 if(enumerator & VK_SHADER_STAGE_ALL)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001208 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001209 strings.push_back("VK_SHADER_STAGE_ALL");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001210 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001211 if(enumerator & VK_SHADER_STAGE_FRAGMENT_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001212 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001213 strings.push_back("VK_SHADER_STAGE_FRAGMENT_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001214 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001215 if(enumerator & VK_SHADER_STAGE_GEOMETRY_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001216 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001217 strings.push_back("VK_SHADER_STAGE_GEOMETRY_BIT");
1218 }
1219 if(enumerator & VK_SHADER_STAGE_COMPUTE_BIT)
1220 {
1221 strings.push_back("VK_SHADER_STAGE_COMPUTE_BIT");
1222 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001223 if(enumerator & VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001224 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001225 strings.push_back("VK_SHADER_STAGE_TESSELLATION_EVALUATION_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001226 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001227 if(enumerator & VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001228 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001229 strings.push_back("VK_SHADER_STAGE_TESSELLATION_CONTROL_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001230 }
1231 if(enumerator & VK_SHADER_STAGE_VERTEX_BIT)
1232 {
1233 strings.push_back("VK_SHADER_STAGE_VERTEX_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001234 }
1235
1236 std::string enumeratorString;
1237 for(auto const& string : strings)
1238 {
1239 enumeratorString += string;
1240
1241 if(string != strings.back())
1242 {
1243 enumeratorString += '|';
1244 }
1245 }
1246
1247 return enumeratorString;
1248}
1249
1250static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001251bool ValidateEnumerator(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001252{
Chia-I Wu89d0f942015-10-31 00:31:16 +08001253 VkPipelineStageFlagBits allFlags = (VkPipelineStageFlagBits)(
1254 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT|
1255 VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT|
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001256 VK_PIPELINE_STAGE_HOST_BIT |
1257 VK_PIPELINE_STAGE_TRANSFER_BIT |
1258 VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT |
Chia-I Wu89d0f942015-10-31 00:31:16 +08001259 VK_PIPELINE_STAGE_ALL_COMMANDS_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001260 VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001261 VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001262 VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001263 VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT |
1264 VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT |
1265 VK_PIPELINE_STAGE_VERTEX_SHADER_BIT |
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001266 VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT |
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001267 VK_PIPELINE_STAGE_VERTEX_INPUT_BIT |
1268 VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT |
1269 VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT |
1270 VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001271 if(enumerator & (~allFlags))
1272 {
1273 return false;
1274 }
1275
1276 return true;
1277}
1278
1279static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001280std::string EnumeratorString(VkPipelineStageFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001281{
1282 if(!ValidateEnumerator(enumerator))
1283 {
1284 return "unrecognized enumerator";
1285 }
1286
1287 std::vector<std::string> strings;
Chia-I Wu89d0f942015-10-31 00:31:16 +08001288 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001289 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001290 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
1291 }
1292 if(enumerator & VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT)
1293 {
1294 strings.push_back("VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001295 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001296 if(enumerator & VK_PIPELINE_STAGE_HOST_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001297 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001298 strings.push_back("VK_PIPELINE_STAGE_HOST_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001299 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001300 if(enumerator & VK_PIPELINE_STAGE_TRANSFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001301 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001302 strings.push_back("VK_PIPELINE_STAGE_TRANSFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001303 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001304 if(enumerator & VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001305 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001306 strings.push_back("VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001307 }
Chia-I Wu89d0f942015-10-31 00:31:16 +08001308 if(enumerator & VK_PIPELINE_STAGE_ALL_COMMANDS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001309 {
Chia-I Wu89d0f942015-10-31 00:31:16 +08001310 strings.push_back("VK_PIPELINE_STAGE_ALL_COMMANDS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001311 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001312 if(enumerator & VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001313 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001314 strings.push_back("VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001315 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001316 if(enumerator & VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001317 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001318 strings.push_back("VK_PIPELINE_STAGE_COMPUTE_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001319 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001320 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001321 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001322 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_CONTROL_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001323 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001324 if(enumerator & VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001325 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001326 strings.push_back("VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001327 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001328 if(enumerator & VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001329 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001330 strings.push_back("VK_PIPELINE_STAGE_DRAW_INDIRECT_BIT");
1331 }
1332 if(enumerator & VK_PIPELINE_STAGE_VERTEX_SHADER_BIT)
1333 {
1334 strings.push_back("VK_PIPELINE_STAGE_VERTEX_SHADER_BIT");
1335 }
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001336 if(enumerator & VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001337 {
Courtney Goeltzenleuchter96835892015-10-15 17:35:38 -06001338 strings.push_back("VK_PIPELINE_STAGE_TESSELLATION_EVALUATION_SHADER_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001339 }
1340 if(enumerator & VK_PIPELINE_STAGE_VERTEX_INPUT_BIT)
1341 {
1342 strings.push_back("VK_PIPELINE_STAGE_VERTEX_INPUT_BIT");
1343 }
1344 if(enumerator & VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT)
1345 {
1346 strings.push_back("VK_PIPELINE_STAGE_GEOMETRY_SHADER_BIT");
1347 }
1348 if(enumerator & VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT)
1349 {
1350 strings.push_back("VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT");
1351 }
1352 if(enumerator & VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT)
1353 {
1354 strings.push_back("VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001355 }
1356
1357 std::string enumeratorString;
1358 for(auto const& string : strings)
1359 {
1360 enumeratorString += string;
1361
1362 if(string != strings.back())
1363 {
1364 enumeratorString += '|';
1365 }
1366 }
1367
1368 return enumeratorString;
1369}
1370
1371static
Chia-I Wua4594202015-10-27 19:54:37 +08001372bool ValidateEnumerator(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001373{
Chia-I Wua4594202015-10-27 19:54:37 +08001374 VkAccessFlagBits allFlags = (VkAccessFlagBits)(
1375 VK_ACCESS_INDIRECT_COMMAND_READ_BIT |
1376 VK_ACCESS_INDEX_READ_BIT |
1377 VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT |
1378 VK_ACCESS_UNIFORM_READ_BIT |
1379 VK_ACCESS_INPUT_ATTACHMENT_READ_BIT |
1380 VK_ACCESS_SHADER_READ_BIT |
1381 VK_ACCESS_SHADER_WRITE_BIT |
1382 VK_ACCESS_COLOR_ATTACHMENT_READ_BIT |
1383 VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT |
1384 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
1385 VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
1386 VK_ACCESS_TRANSFER_READ_BIT |
1387 VK_ACCESS_TRANSFER_WRITE_BIT |
1388 VK_ACCESS_HOST_READ_BIT |
1389 VK_ACCESS_HOST_WRITE_BIT |
1390 VK_ACCESS_MEMORY_READ_BIT |
1391 VK_ACCESS_MEMORY_WRITE_BIT);
1392
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001393 if(enumerator & (~allFlags))
1394 {
1395 return false;
1396 }
1397
1398 return true;
1399}
1400
1401static
Chia-I Wua4594202015-10-27 19:54:37 +08001402std::string EnumeratorString(VkAccessFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001403{
1404 if(!ValidateEnumerator(enumerator))
1405 {
1406 return "unrecognized enumerator";
1407 }
1408
1409 std::vector<std::string> strings;
Chia-I Wua4594202015-10-27 19:54:37 +08001410 if(enumerator & VK_ACCESS_INDIRECT_COMMAND_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001411 {
Chia-I Wua4594202015-10-27 19:54:37 +08001412 strings.push_back("VK_ACCESS_INDIRECT_COMMAND_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001413 }
Chia-I Wua4594202015-10-27 19:54:37 +08001414 if(enumerator & VK_ACCESS_INDEX_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001415 {
Chia-I Wua4594202015-10-27 19:54:37 +08001416 strings.push_back("VK_ACCESS_INDEX_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001417 }
Chia-I Wua4594202015-10-27 19:54:37 +08001418 if(enumerator & VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001419 {
Chia-I Wua4594202015-10-27 19:54:37 +08001420 strings.push_back("VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001421 }
Chia-I Wua4594202015-10-27 19:54:37 +08001422 if(enumerator & VK_ACCESS_UNIFORM_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001423 {
Chia-I Wua4594202015-10-27 19:54:37 +08001424 strings.push_back("VK_ACCESS_UNIFORM_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001425 }
Chia-I Wua4594202015-10-27 19:54:37 +08001426 if(enumerator & VK_ACCESS_INPUT_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001427 {
Chia-I Wua4594202015-10-27 19:54:37 +08001428 strings.push_back("VK_ACCESS_INPUT_ATTACHMENT_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001429 }
Chia-I Wua4594202015-10-27 19:54:37 +08001430 if(enumerator & VK_ACCESS_SHADER_READ_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001431 {
Chia-I Wua4594202015-10-27 19:54:37 +08001432 strings.push_back("VK_ACCESS_SHADER_READ_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001433 }
Chia-I Wua4594202015-10-27 19:54:37 +08001434 if(enumerator & VK_ACCESS_SHADER_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001435 {
Chia-I Wua4594202015-10-27 19:54:37 +08001436 strings.push_back("VK_ACCESS_SHADER_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001437 }
Chia-I Wua4594202015-10-27 19:54:37 +08001438 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_READ_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001439 {
Chia-I Wua4594202015-10-27 19:54:37 +08001440 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_READ_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001441 }
Chia-I Wua4594202015-10-27 19:54:37 +08001442 if(enumerator & VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001443 {
Chia-I Wua4594202015-10-27 19:54:37 +08001444 strings.push_back("VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001445 }
Chia-I Wua4594202015-10-27 19:54:37 +08001446 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001447 {
Chia-I Wua4594202015-10-27 19:54:37 +08001448 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001449 }
Chia-I Wua4594202015-10-27 19:54:37 +08001450 if(enumerator & VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001451 {
Chia-I Wua4594202015-10-27 19:54:37 +08001452 strings.push_back("VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001453 }
Chia-I Wua4594202015-10-27 19:54:37 +08001454 if(enumerator & VK_ACCESS_TRANSFER_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001455 {
Chia-I Wua4594202015-10-27 19:54:37 +08001456 strings.push_back("VK_ACCESS_TRANSFER_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001457 }
Chia-I Wua4594202015-10-27 19:54:37 +08001458 if(enumerator & VK_ACCESS_TRANSFER_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001459 {
Chia-I Wua4594202015-10-27 19:54:37 +08001460 strings.push_back("VK_ACCESS_TRANSFER_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001461 }
Chia-I Wua4594202015-10-27 19:54:37 +08001462 if(enumerator & VK_ACCESS_HOST_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001463 {
Chia-I Wua4594202015-10-27 19:54:37 +08001464 strings.push_back("VK_ACCESS_HOST_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001465 }
Chia-I Wua4594202015-10-27 19:54:37 +08001466 if(enumerator & VK_ACCESS_HOST_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001467 {
Chia-I Wua4594202015-10-27 19:54:37 +08001468 strings.push_back("VK_ACCESS_HOST_WRITE_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001469 }
Chia-I Wua4594202015-10-27 19:54:37 +08001470 if(enumerator & VK_ACCESS_MEMORY_READ_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001471 {
Chia-I Wua4594202015-10-27 19:54:37 +08001472 strings.push_back("VK_ACCESS_MEMORY_READ_BIT");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001473 }
Chia-I Wua4594202015-10-27 19:54:37 +08001474 if(enumerator & VK_ACCESS_MEMORY_WRITE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001475 {
Chia-I Wua4594202015-10-27 19:54:37 +08001476 strings.push_back("VK_ACCESS_MEMORY_WRITE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001477 }
1478
1479 std::string enumeratorString;
1480 for(auto const& string : strings)
1481 {
1482 enumeratorString += string;
1483
1484 if(string != strings.back())
1485 {
1486 enumeratorString += '|';
1487 }
1488 }
1489
1490 return enumeratorString;
1491}
1492
1493static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001494bool ValidateEnumerator(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001495{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001496 VkCommandPoolCreateFlagBits allFlags = (VkCommandPoolCreateFlagBits)(VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT |
1497 VK_COMMAND_POOL_CREATE_TRANSIENT_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001498 if(enumerator & (~allFlags))
1499 {
1500 return false;
1501 }
1502
1503 return true;
1504}
1505
1506static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001507std::string EnumeratorString(VkCommandPoolCreateFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001508{
1509 if(!ValidateEnumerator(enumerator))
1510 {
1511 return "unrecognized enumerator";
1512 }
1513
1514 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001515 if(enumerator & VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001516 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001517 strings.push_back("VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001518 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001519 if(enumerator & VK_COMMAND_POOL_CREATE_TRANSIENT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001520 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001521 strings.push_back("VK_COMMAND_POOL_CREATE_TRANSIENT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001522 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001523
1524 std::string enumeratorString;
1525 for(auto const& string : strings)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001526 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001527 enumeratorString += string;
1528
1529 if(string != strings.back())
1530 {
1531 enumeratorString += '|';
1532 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06001533 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001534
1535 return enumeratorString;
1536}
1537
1538static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001539bool ValidateEnumerator(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001540{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001541 VkCommandPoolResetFlagBits allFlags = (VkCommandPoolResetFlagBits)(VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001542 if(enumerator & (~allFlags))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001543 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001544 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001545 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001546
1547 return true;
1548}
1549
1550static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001551std::string EnumeratorString(VkCommandPoolResetFlagBits const& enumerator)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001552{
1553 if(!ValidateEnumerator(enumerator))
Jeremy Hayes99a96322015-06-26 12:48:09 -06001554 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001555 return "unrecognized enumerator";
1556 }
1557
1558 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001559 if(enumerator & VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001560 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001561 strings.push_back("VK_COMMAND_POOL_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001562 }
1563
1564 std::string enumeratorString;
1565 for(auto const& string : strings)
1566 {
1567 enumeratorString += string;
1568
1569 if(string != strings.back())
1570 {
1571 enumeratorString += '|';
1572 }
1573 }
1574
1575 return enumeratorString;
1576}
1577
1578static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001579bool ValidateEnumerator(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001580{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001581 VkCommandBufferUsageFlags allFlags = (VkCommandBufferUsageFlags)(VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT |
1582 VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT |
1583 VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001584 if(enumerator & (~allFlags))
1585 {
1586 return false;
1587 }
1588
1589 return true;
1590}
1591
1592static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001593std::string EnumeratorString(VkCommandBufferUsageFlags const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001594{
1595 if(!ValidateEnumerator(enumerator))
1596 {
1597 return "unrecognized enumerator";
1598 }
1599
1600 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001601 if(enumerator & VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001602 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001603 strings.push_back("VK_COMMAND_BUFFER_USAGE_SIMULTANEOUS_USE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001604 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001605 if(enumerator & VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001606 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001607 strings.push_back("VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001608 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001609 if(enumerator & VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001610 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001611 strings.push_back("VK_COMMAND_BUFFER_USAGE_RENDER_PASS_CONTINUE_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001612 }
1613
1614 std::string enumeratorString;
1615 for(auto const& string : strings)
1616 {
1617 enumeratorString += string;
1618
1619 if(string != strings.back())
1620 {
1621 enumeratorString += '|';
1622 }
1623 }
1624
1625 return enumeratorString;
1626}
1627
1628static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001629bool ValidateEnumerator(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001630{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001631 VkCommandBufferResetFlagBits allFlags = (VkCommandBufferResetFlagBits)(VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001632 if(enumerator & (~allFlags))
1633 {
1634 return false;
1635 }
1636
1637 return true;
1638}
1639
1640static
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001641std::string EnumeratorString(VkCommandBufferResetFlagBits const& enumerator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001642{
1643 if(!ValidateEnumerator(enumerator))
1644 {
1645 return "unrecognized enumerator";
1646 }
1647
1648 std::vector<std::string> strings;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001649 if(enumerator & VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001650 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001651 strings.push_back("VK_COMMAND_BUFFER_RESET_RELEASE_RESOURCES_BIT");
Jeremy Hayes99a96322015-06-26 12:48:09 -06001652 }
1653
1654 std::string enumeratorString;
1655 for(auto const& string : strings)
1656 {
1657 enumeratorString += string;
1658
1659 if(string != strings.back())
1660 {
1661 enumeratorString += '|';
1662 }
1663 }
1664
1665 return enumeratorString;
1666}
1667
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001668static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001669bool ValidateEnumerator(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001670{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001671 VkImageAspectFlagBits allFlags = (VkImageAspectFlagBits)(VK_IMAGE_ASPECT_METADATA_BIT |
1672 VK_IMAGE_ASPECT_STENCIL_BIT |
1673 VK_IMAGE_ASPECT_DEPTH_BIT |
1674 VK_IMAGE_ASPECT_COLOR_BIT);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001675 if(enumerator & (~allFlags))
1676 {
1677 return false;
1678 }
1679
1680 return true;
1681}
1682
1683static
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001684std::string EnumeratorString(VkImageAspectFlagBits const& enumerator)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001685{
1686 if(!ValidateEnumerator(enumerator))
1687 {
1688 return "unrecognized enumerator";
1689 }
1690
1691 std::vector<std::string> strings;
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001692 if(enumerator & VK_IMAGE_ASPECT_METADATA_BIT)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001693 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001694 strings.push_back("VK_IMAGE_ASPECT_METADATA_BIT");
1695 }
1696 if(enumerator & VK_IMAGE_ASPECT_STENCIL_BIT)
1697 {
1698 strings.push_back("VK_IMAGE_ASPECT_STENCIL_BIT");
1699 }
1700 if(enumerator & VK_IMAGE_ASPECT_DEPTH_BIT)
1701 {
1702 strings.push_back("VK_IMAGE_ASPECT_DEPTH_BIT");
1703 }
1704 if(enumerator & VK_IMAGE_ASPECT_COLOR_BIT)
1705 {
1706 strings.push_back("VK_IMAGE_ASPECT_COLOR_BIT");
1707 }
1708
1709 std::string enumeratorString;
1710 for(auto const& string : strings)
1711 {
1712 enumeratorString += string;
1713
1714 if(string != strings.back())
1715 {
1716 enumeratorString += '|';
1717 }
1718 }
1719
1720 return enumeratorString;
1721}
1722
1723static
1724bool ValidateEnumerator(VkQueryControlFlagBits const& enumerator)
1725{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001726 VkQueryControlFlagBits allFlags = (VkQueryControlFlagBits)(VK_QUERY_CONTROL_PRECISE_BIT);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001727 if(enumerator & (~allFlags))
1728 {
1729 return false;
1730 }
1731
1732 return true;
1733}
1734
1735static
1736std::string EnumeratorString(VkQueryControlFlagBits const& enumerator)
1737{
1738 if(!ValidateEnumerator(enumerator))
1739 {
1740 return "unrecognized enumerator";
1741 }
1742
1743 std::vector<std::string> strings;
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001744 if(enumerator & VK_QUERY_CONTROL_PRECISE_BIT)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001745 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08001746 strings.push_back("VK_QUERY_CONTROL_PRECISE_BIT");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001747 }
1748
1749 std::string enumeratorString;
1750 for(auto const& string : strings)
1751 {
1752 enumeratorString += string;
1753
1754 if(string != strings.back())
1755 {
1756 enumeratorString += '|';
1757 }
1758 }
1759
1760 return enumeratorString;
1761}
1762
Chia-I Wu9ab61502015-11-06 06:42:02 +08001763VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateInstance(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001764 const VkInstanceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001765 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06001766 VkInstance* pInstance)
1767{
1768 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, *pInstance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001769 VkResult result = pTable->CreateInstance(pCreateInfo, pAllocator, pInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001770
1771 if (result == VK_SUCCESS) {
1772 layer_data *data = get_my_data_ptr(get_dispatch_key(*pInstance), layer_data_map);
Chia-I Wud50a7d72015-10-26 20:48:51 +08001773 data->report_data = debug_report_create_instance(pTable, *pInstance, pCreateInfo->enabledExtensionNameCount,
Courtney Goeltzenleuchterf13293f2015-07-07 11:02:42 -06001774 pCreateInfo->ppEnabledExtensionNames);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001775
Courtney Goeltzenleuchter6d8e8182015-11-25 14:31:49 -07001776 InitParamChecker(data, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001777 }
1778
1779 return result;
1780}
1781
Chia-I Wu9ab61502015-11-06 06:42:02 +08001782VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyInstance(
Chia-I Wuf7458c52015-10-26 21:10:41 +08001783 VkInstance instance,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08001784 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001785{
1786 // Grab the key before the instance is destroyed.
1787 dispatch_key key = get_dispatch_key(instance);
1788 VkLayerInstanceDispatchTable *pTable = get_dispatch_table(pc_instance_table_map, instance);
Chia-I Wuf7458c52015-10-26 21:10:41 +08001789 pTable->DestroyInstance(instance, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001790
1791 // Clean up logging callback, if any
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001792 layer_data *my_data = get_my_data_ptr(key, layer_data_map);
1793 while (my_data->logging_callback.size() > 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001794 VkDebugReportCallbackEXT callback = my_data->logging_callback.back();
Courtney Goeltzenleuchter05854bf2015-11-30 12:13:14 -07001795 layer_destroy_msg_callback(my_data->report_data, callback, pAllocator);
Courtney Goeltzenleuchterd29f4f02015-10-05 15:59:45 -06001796 my_data->logging_callback.pop_back();
Jeremy Hayes99a96322015-06-26 12:48:09 -06001797 }
1798
1799 layer_debug_report_destroy_instance(mid(instance));
1800 layer_data_map.erase(pTable);
1801
1802 pc_instance_table_map.erase(key);
1803 assert(pc_instance_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001804}
1805
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001806bool PostEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001807 VkInstance instance,
1808 uint32_t* pPhysicalDeviceCount,
1809 VkPhysicalDevice* pPhysicalDevices,
1810 VkResult result)
1811{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001812
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001813 if(pPhysicalDeviceCount != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001814 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001815 }
1816
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001817 if(pPhysicalDevices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001818 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001819 }
1820
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001821 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001822 {
1823 std::string reason = "vkEnumeratePhysicalDevices parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001824 log_msg(mid(instance), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001825 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001826 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001827
1828 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001829}
1830
Chia-I Wu9ab61502015-11-06 06:42:02 +08001831VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEnumeratePhysicalDevices(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001832 VkInstance instance,
1833 uint32_t* pPhysicalDeviceCount,
1834 VkPhysicalDevice* pPhysicalDevices)
1835{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001836 VkResult result = get_dispatch_table(pc_instance_table_map, instance)->EnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices);
1837
1838 PostEnumeratePhysicalDevices(instance, pPhysicalDeviceCount, pPhysicalDevices, result);
1839
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001840 return result;
1841}
1842
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001843bool PostGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001844 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001845 VkPhysicalDeviceFeatures* pFeatures)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001846{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001847
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001848 if(pFeatures != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001849 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001850 }
1851
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001852 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001853}
1854
Chia-I Wu9ab61502015-11-06 06:42:02 +08001855VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFeatures(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001856 VkPhysicalDevice physicalDevice,
1857 VkPhysicalDeviceFeatures* pFeatures)
1858{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001859 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001860
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001861 PostGetPhysicalDeviceFeatures(physicalDevice, pFeatures);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001862}
1863
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06001864bool PostGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001865 VkPhysicalDevice physicalDevice,
1866 VkFormat format,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001867 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001868{
Jeremy Hayes99a96322015-06-26 12:48:09 -06001869
1870 if(format < VK_FORMAT_BEGIN_RANGE ||
1871 format > VK_FORMAT_END_RANGE)
1872 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001873 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001874 "vkGetPhysicalDeviceFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001875 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001876 }
1877
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001878 if(pFormatProperties != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001879 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06001880 }
1881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06001882 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06001883}
1884
Chia-I Wu9ab61502015-11-06 06:42:02 +08001885VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceFormatProperties(
Jeremy Hayes99a96322015-06-26 12:48:09 -06001886 VkPhysicalDevice physicalDevice,
1887 VkFormat format,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001888 VkFormatProperties* pFormatProperties)
Jeremy Hayes99a96322015-06-26 12:48:09 -06001889{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001890 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayes99a96322015-06-26 12:48:09 -06001891
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001892 PostGetPhysicalDeviceFormatProperties(physicalDevice, format, pFormatProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001893}
1894
1895bool PostGetPhysicalDeviceImageFormatProperties(
1896 VkPhysicalDevice physicalDevice,
1897 VkFormat format,
1898 VkImageType type,
1899 VkImageTiling tiling,
1900 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001901 VkImageCreateFlags flags,
Chia-I Wu17241042015-10-31 00:31:16 +08001902 VkImageFormatProperties* pImageFormatProperties,
1903 VkResult result)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001904{
1905
1906 if(format < VK_FORMAT_BEGIN_RANGE ||
1907 format > VK_FORMAT_END_RANGE)
1908 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001909 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001910 "vkGetPhysicalDeviceImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
1911 return false;
1912 }
1913
1914 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
1915 type > VK_IMAGE_TYPE_END_RANGE)
1916 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001917 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001918 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
1919 return false;
1920 }
1921
1922 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
1923 tiling > VK_IMAGE_TILING_END_RANGE)
1924 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001925 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001926 "vkGetPhysicalDeviceImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
1927 return false;
1928 }
1929
1930
1931 if(pImageFormatProperties != nullptr)
1932 {
1933 }
1934
Chia-I Wu17241042015-10-31 00:31:16 +08001935 if(result < VK_SUCCESS)
1936 {
1937 std::string reason = "vkGetPhysicalDeviceImageFormatProperties parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001938 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Chia-I Wu17241042015-10-31 00:31:16 +08001939 return false;
1940 }
1941
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001942 return true;
1943}
1944
Chia-I Wu9ab61502015-11-06 06:42:02 +08001945VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceImageFormatProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001946 VkPhysicalDevice physicalDevice,
1947 VkFormat format,
1948 VkImageType type,
1949 VkImageTiling tiling,
1950 VkImageUsageFlags usage,
Courtney Goeltzenleuchtera22097a2015-09-10 13:44:12 -06001951 VkImageCreateFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001952 VkImageFormatProperties* pImageFormatProperties)
1953{
Chia-I Wu17241042015-10-31 00:31:16 +08001954 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 -06001955
Chia-I Wu17241042015-10-31 00:31:16 +08001956 PostGetPhysicalDeviceImageFormatProperties(physicalDevice, format, type, tiling, usage, flags, pImageFormatProperties, result);
1957
1958 return result;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06001959}
1960
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001961bool PostGetPhysicalDeviceProperties(
1962 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001963 VkPhysicalDeviceProperties* pProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001964{
1965
1966 if(pProperties != nullptr)
1967 {
1968 if(pProperties->deviceType < VK_PHYSICAL_DEVICE_TYPE_BEGIN_RANGE ||
1969 pProperties->deviceType > VK_PHYSICAL_DEVICE_TYPE_END_RANGE)
1970 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07001971 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001972 "vkGetPhysicalDeviceProperties parameter, VkPhysicalDeviceType pProperties->deviceType, is an unrecognized enumerator");
1973 return false;
1974 }
1975 }
1976
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001977 return true;
1978}
1979
Chia-I Wu9ab61502015-11-06 06:42:02 +08001980VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001981 VkPhysicalDevice physicalDevice,
1982 VkPhysicalDeviceProperties* pProperties)
1983{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001984 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001985
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001986 PostGetPhysicalDeviceProperties(physicalDevice, pProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001987}
1988
Cody Northropd0802882015-08-03 17:04:53 -06001989bool PostGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001990 VkPhysicalDevice physicalDevice,
1991 uint32_t* pCount,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06001992 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001993{
1994
Cody Northropd0802882015-08-03 17:04:53 -06001995 if(pQueueProperties == nullptr && pCount != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001996 {
1997 }
1998
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06001999 if(pQueueProperties != nullptr)
2000 {
2001 }
2002
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002003 return true;
2004}
2005
Chia-I Wu9ab61502015-11-06 06:42:02 +08002006VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceQueueFamilyProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002007 VkPhysicalDevice physicalDevice,
Cody Northropd0802882015-08-03 17:04:53 -06002008 uint32_t* pCount,
2009 VkQueueFamilyProperties* pQueueProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002010{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002011 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002012
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002013 PostGetPhysicalDeviceQueueFamilyProperties(physicalDevice, pCount, pQueueProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002014}
2015
2016bool PostGetPhysicalDeviceMemoryProperties(
2017 VkPhysicalDevice physicalDevice,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002018 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002019{
2020
2021 if(pMemoryProperties != nullptr)
2022 {
2023 }
2024
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002025 return true;
2026}
2027
Chia-I Wu9ab61502015-11-06 06:42:02 +08002028VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceMemoryProperties(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002029 VkPhysicalDevice physicalDevice,
2030 VkPhysicalDeviceMemoryProperties* pMemoryProperties)
2031{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002032 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002033
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002034 PostGetPhysicalDeviceMemoryProperties(physicalDevice, pMemoryProperties);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002035}
2036
Chia-I Wu9ab61502015-11-06 06:42:02 +08002037VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDevice(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002038 VkPhysicalDevice physicalDevice,
2039 const VkDeviceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002040 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002041 VkDevice* pDevice)
2042{
Courtney Goeltzenleuchterbafcdf32015-09-08 17:42:57 -06002043 /*
2044 * NOTE: The loader fills in the ICD's device object in *pDevice.
2045 * Use that object to get the dispatch table.
2046 *
2047 * NOTE: We do not validate physicalDevice or any dispatchable
2048 * object as the first parameter. We couldn't get here if it was wrong!
2049 */
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06002050 VkLayerDispatchTable *pTable = get_dispatch_table(pc_device_table_map, *pDevice);
Chia-I Wuf7458c52015-10-26 21:10:41 +08002051 VkResult result = pTable->CreateDevice(physicalDevice, pCreateInfo, pAllocator, pDevice);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002052 if(result == VK_SUCCESS)
2053 {
2054 layer_data *instance_data = get_my_data_ptr(get_dispatch_key(physicalDevice), layer_data_map);
2055 layer_data *device_data = get_my_data_ptr(get_dispatch_key(*pDevice), layer_data_map);
2056 device_data->report_data = layer_debug_report_create_device(instance_data->report_data, *pDevice);
2057 }
2058
2059 return result;
2060}
2061
Chia-I Wu9ab61502015-11-06 06:42:02 +08002062VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkDestroyDevice(
Chia-I Wuf7458c52015-10-26 21:10:41 +08002063 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002064 const VkAllocationCallbacks* pAllocator)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002065{
2066 layer_debug_report_destroy_device(device);
2067
2068 dispatch_key key = get_dispatch_key(device);
2069#if DISPATCH_MAP_DEBUG
2070 fprintf(stderr, "Device: %p, key: %p\n", device, key);
2071#endif
2072
Chia-I Wuf7458c52015-10-26 21:10:41 +08002073 get_dispatch_table(pc_device_table_map, device)->DestroyDevice(device, pAllocator);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002074 pc_device_table_map.erase(key);
2075 assert(pc_device_table_map.size() == 0 && "Should not have any instance mappings hanging around");
Jeremy Hayes99a96322015-06-26 12:48:09 -06002076}
2077
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002078bool PostGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002079 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002080 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002081 uint32_t queueIndex,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002082 VkQueue* pQueue)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002083{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002084
2085
2086
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002087 if(pQueue != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002088 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002089 }
2090
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002091 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002092}
2093
Chia-I Wu9ab61502015-11-06 06:42:02 +08002094VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002095 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002096 uint32_t queueFamilyIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002097 uint32_t queueIndex,
2098 VkQueue* pQueue)
2099{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002100 get_dispatch_table(pc_device_table_map, device)->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002101
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002102 PostGetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002103}
2104
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002105bool PreQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002106 VkQueue queue,
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002107 const VkSubmitInfo* submit)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002108{
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002109 if(submit->sType != VK_STRUCTURE_TYPE_SUBMIT_INFO) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002110 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002111 "vkQueueSubmit parameter, VkStructureType pSubmits->sType, is an invalid enumerator");
Chia-I Wuf9be13c2015-10-26 20:37:06 +08002112 return false;
2113 }
2114
2115 if(submit->pCommandBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002116 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002117 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002118
2119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002120}
2121
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002122bool PostQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002123 VkQueue queue,
Chia-I Wud50a7d72015-10-26 20:48:51 +08002124 uint32_t commandBufferCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002125 VkFence fence,
2126 VkResult result)
2127{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002128
2129
Jeremy Hayes99a96322015-06-26 12:48:09 -06002130
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002131 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002132 {
2133 std::string reason = "vkQueueSubmit parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002134 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002135 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002136 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002137
2138 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002139}
2140
Chia-I Wu9ab61502015-11-06 06:42:02 +08002141VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002142 VkQueue queue,
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002143 uint32_t submitCount,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002144 const VkSubmitInfo* pSubmits,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002145 VkFence fence)
2146{
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002147 for (uint32_t i = 0; i < submitCount; i++) {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002148 PreQueueSubmit(queue, &pSubmits[i]);
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002149 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002150
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08002151 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueSubmit(queue, submitCount, pSubmits, fence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002152
Courtney Goeltzenleuchter646b9072015-10-20 18:04:07 -06002153 PostQueueSubmit(queue, submitCount, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002154
2155 return result;
2156}
2157
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002158bool PostQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002159 VkQueue queue,
2160 VkResult result)
2161{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002162
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002163 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002164 {
2165 std::string reason = "vkQueueWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002166 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002168 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002169
2170 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002171}
2172
Chia-I Wu9ab61502015-11-06 06:42:02 +08002173VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002174 VkQueue queue)
2175{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002176 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueWaitIdle(queue);
2177
2178 PostQueueWaitIdle(queue, result);
2179
2180 return result;
2181}
2182
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002183bool PostDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002184 VkDevice device,
2185 VkResult result)
2186{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002187
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002188 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002189 {
2190 std::string reason = "vkDeviceWaitIdle parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002191 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002192 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002193 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002194
2195 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002196}
2197
Chia-I Wu9ab61502015-11-06 06:42:02 +08002198VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkDeviceWaitIdle(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002199 VkDevice device)
2200{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002201 VkResult result = get_dispatch_table(pc_device_table_map, device)->DeviceWaitIdle(device);
2202
2203 PostDeviceWaitIdle(device, result);
2204
2205 return result;
2206}
2207
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002208bool PreAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002209 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002210 const VkMemoryAllocateInfo* pAllocateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002211{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002212 if(pAllocateInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002213 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08002214 if(pAllocateInfo->sType != VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002215 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002216 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002217 "vkAllocateMemory parameter, VkStructureType pAllocateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002218 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002219 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002220 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002221
2222 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002223}
2224
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002225bool PostAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002226 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002227 VkDeviceMemory* pMemory,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002228 VkResult result)
2229{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002230
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002231 if(pMemory != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002232 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002233 }
2234
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002235 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002236 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002237 std::string reason = "vkAllocateMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002238 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002239 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002240 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002241
2242 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002243}
2244
Chia-I Wu9ab61502015-11-06 06:42:02 +08002245VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002246 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002247 const VkMemoryAllocateInfo* pAllocateInfo,
2248 const VkAllocationCallbacks* pAllocator,
2249 VkDeviceMemory* pMemory)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002250{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002251 PreAllocateMemory(device, pAllocateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002252
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002253 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002254
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002255 PostAllocateMemory(device, pMemory, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002256
2257 return result;
2258}
2259
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002260bool PostMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002261 VkDevice device,
2262 VkDeviceMemory mem,
2263 VkDeviceSize offset,
2264 VkDeviceSize size,
2265 VkMemoryMapFlags flags,
2266 void** ppData,
2267 VkResult result)
2268{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002269
Jeremy Hayes99a96322015-06-26 12:48:09 -06002270
2271
2272
2273
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002274 if(ppData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002275 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002276 }
2277
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002278 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002279 {
2280 std::string reason = "vkMapMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002281 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002282 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002283 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002284
2285 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002286}
2287
Chia-I Wu9ab61502015-11-06 06:42:02 +08002288VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMapMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002289 VkDevice device,
2290 VkDeviceMemory mem,
2291 VkDeviceSize offset,
2292 VkDeviceSize size,
2293 VkMemoryMapFlags flags,
2294 void** ppData)
2295{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002296 VkResult result = get_dispatch_table(pc_device_table_map, device)->MapMemory(device, mem, offset, size, flags, ppData);
2297
2298 PostMapMemory(device, mem, offset, size, flags, ppData, result);
2299
2300 return result;
2301}
2302
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002303bool PreFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002304 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002305 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002306{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002307 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002308 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002309 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002310 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002311 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002312 "vkFlushMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002313 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002314 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002315 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002316
2317 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002318}
2319
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002320bool PostFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002321 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002322 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002323 VkResult result)
2324{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002325
2326
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002327 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002328 {
2329 std::string reason = "vkFlushMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002330 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002331 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002332 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002333
2334 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002335}
2336
Chia-I Wu9ab61502015-11-06 06:42:02 +08002337VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFlushMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002338 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002339 uint32_t memoryRangeCount,
2340 const VkMappedMemoryRange* pMemoryRanges)
Tony Barbourb1250542015-04-16 19:23:13 -06002341{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002342 PreFlushMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002343
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002344 VkResult result = get_dispatch_table(pc_device_table_map, device)->FlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Tony Barbourb1250542015-04-16 19:23:13 -06002345
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002346 PostFlushMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002347
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002348 return result;
2349}
2350
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002351bool PreInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002352 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002353 const VkMappedMemoryRange* pMemoryRanges)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002354{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002355 if(pMemoryRanges != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002356 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002357 if(pMemoryRanges->sType != VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002358 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002359 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002360 "vkInvalidateMappedMemoryRanges parameter, VkStructureType pMemoryRanges->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002361 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002362 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002363 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002364
2365 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002366}
2367
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002368bool PostInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002369 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002370 uint32_t memoryRangeCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002371 VkResult result)
2372{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002373
2374
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002375 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002376 {
2377 std::string reason = "vkInvalidateMappedMemoryRanges parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002378 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002379 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002380 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002381
2382 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002383}
2384
Chia-I Wu9ab61502015-11-06 06:42:02 +08002385VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkInvalidateMappedMemoryRanges(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002386 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002387 uint32_t memoryRangeCount,
2388 const VkMappedMemoryRange* pMemoryRanges)
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002389{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002390 PreInvalidateMappedMemoryRanges(device, pMemoryRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002391
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002392 VkResult result = get_dispatch_table(pc_device_table_map, device)->InvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
Courtney Goeltzenleuchterf69f8a22015-04-29 17:16:21 -06002393
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002394 PostInvalidateMappedMemoryRanges(device, memoryRangeCount, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002395
Tony Barbourb1250542015-04-16 19:23:13 -06002396 return result;
2397}
2398
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002399bool PostGetDeviceMemoryCommitment(
2400 VkDevice device,
2401 VkDeviceMemory memory,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002402 VkDeviceSize* pCommittedMemoryInBytes)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002403{
2404
2405
2406 if(pCommittedMemoryInBytes != nullptr)
2407 {
2408 }
2409
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002410 return true;
2411}
2412
Chia-I Wu9ab61502015-11-06 06:42:02 +08002413VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceMemoryCommitment(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002414 VkDevice device,
2415 VkDeviceMemory memory,
2416 VkDeviceSize* pCommittedMemoryInBytes)
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002417{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002418 get_dispatch_table(pc_device_table_map, device)->GetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002419
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002420 PostGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
Courtney Goeltzenleuchterfb71f222015-07-09 21:57:28 -06002421}
2422
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002423bool PostBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002424 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002425 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002426 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002427 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002428 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002429{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002430
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002431
Jeremy Hayes99a96322015-06-26 12:48:09 -06002432
2433
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002434 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002435 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002436 std::string reason = "vkBindBufferMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002437 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002438 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002439 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002440
2441 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002442}
2443
Chia-I Wu9ab61502015-11-06 06:42:02 +08002444VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindBufferMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002445 VkDevice device,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002446 VkBuffer buffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002447 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002448 VkDeviceSize memoryOffset)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002449{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002450 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindBufferMemory(device, buffer, mem, memoryOffset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002451
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002452 PostBindBufferMemory(device, buffer, mem, memoryOffset, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002453
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002454 return result;
2455}
2456
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002457bool PostBindImageMemory(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002458 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002459 VkImage image,
2460 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002461 VkDeviceSize memoryOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002462 VkResult result)
2463{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002464
2465
2466
2467
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002468 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002469 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002470 std::string reason = "vkBindImageMemory parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002471 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002472 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002473 }
2474
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002475 return true;
2476}
2477
Chia-I Wu9ab61502015-11-06 06:42:02 +08002478VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002479 VkDevice device,
2480 VkImage image,
2481 VkDeviceMemory mem,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002482 VkDeviceSize memoryOffset)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002483{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002484 VkResult result = get_dispatch_table(pc_device_table_map, device)->BindImageMemory(device, image, mem, memoryOffset);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002485
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002486 PostBindImageMemory(device, image, mem, memoryOffset, result);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002487
2488 return result;
2489}
2490
2491bool PostGetBufferMemoryRequirements(
2492 VkDevice device,
2493 VkBuffer buffer,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002494 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002495{
2496
2497
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002498 if(pMemoryRequirements != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002499 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002500 }
2501
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002502 return true;
2503}
2504
Chia-I Wu9ab61502015-11-06 06:42:02 +08002505VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetBufferMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002506 VkDevice device,
2507 VkBuffer buffer,
2508 VkMemoryRequirements* pMemoryRequirements)
2509{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002510 get_dispatch_table(pc_device_table_map, device)->GetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002511
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002512 PostGetBufferMemoryRequirements(device, buffer, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002513}
2514
2515bool PostGetImageMemoryRequirements(
2516 VkDevice device,
2517 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002518 VkMemoryRequirements* pMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002519{
2520
2521
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002522 if(pMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002523 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002524 }
2525
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002526 return true;
2527}
2528
Chia-I Wu9ab61502015-11-06 06:42:02 +08002529VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002530 VkDevice device,
2531 VkImage image,
2532 VkMemoryRequirements* pMemoryRequirements)
2533{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002534 get_dispatch_table(pc_device_table_map, device)->GetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002535
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002536 PostGetImageMemoryRequirements(device, image, pMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002537}
2538
2539bool PostGetImageSparseMemoryRequirements(
2540 VkDevice device,
2541 VkImage image,
2542 uint32_t* pNumRequirements,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002543 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002544{
2545
2546
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002547 if(pNumRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002548 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002549 }
2550
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002551 if(pSparseMemoryRequirements != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002552 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002553 if ((pSparseMemoryRequirements->formatProperties.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002554 (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 -06002555 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002556 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002557 "vkGetImageSparseMemoryRequirements parameter, VkImageAspect pSparseMemoryRequirements->formatProperties.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002558 return false;
2559 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002560 }
2561
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002562 return true;
2563}
2564
Chia-I Wu9ab61502015-11-06 06:42:02 +08002565VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSparseMemoryRequirements(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002566 VkDevice device,
2567 VkImage image,
2568 uint32_t* pNumRequirements,
2569 VkSparseImageMemoryRequirements* pSparseMemoryRequirements)
2570{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002571 get_dispatch_table(pc_device_table_map, device)->GetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002572
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002573 PostGetImageSparseMemoryRequirements(device, image, pNumRequirements, pSparseMemoryRequirements);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002574}
2575
2576bool PostGetPhysicalDeviceSparseImageFormatProperties(
2577 VkPhysicalDevice physicalDevice,
2578 VkFormat format,
2579 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002580 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002581 VkImageUsageFlags usage,
2582 VkImageTiling tiling,
2583 uint32_t* pNumProperties,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002584 VkSparseImageFormatProperties* pProperties)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002585{
2586
2587 if(format < VK_FORMAT_BEGIN_RANGE ||
2588 format > VK_FORMAT_END_RANGE)
2589 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002590 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002591 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkFormat format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002592 return false;
2593 }
2594
2595 if(type < VK_IMAGE_TYPE_BEGIN_RANGE ||
2596 type > VK_IMAGE_TYPE_END_RANGE)
2597 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002598 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002599 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageType type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002600 return false;
2601 }
2602
2603
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002604
2605 if(tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
2606 tiling > VK_IMAGE_TILING_END_RANGE)
2607 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002608 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002609 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageTiling tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002610 return false;
2611 }
2612
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002613 if(pNumProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002614 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002615 }
2616
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002617 if(pProperties != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002618 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08002619 if ((pProperties->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06002620 (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 -06002621 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002622 log_msg(mdd(physicalDevice), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08002623 "vkGetPhysicalDeviceSparseImageFormatProperties parameter, VkImageAspect pProperties->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002624 return false;
2625 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002626 }
2627
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002628 return true;
2629}
2630
Chia-I Wu9ab61502015-11-06 06:42:02 +08002631VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetPhysicalDeviceSparseImageFormatProperties(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002632 VkPhysicalDevice physicalDevice,
2633 VkFormat format,
2634 VkImageType type,
Chia-I Wu5c17c962015-10-31 00:31:16 +08002635 VkSampleCountFlagBits samples,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002636 VkImageUsageFlags usage,
2637 VkImageTiling tiling,
2638 uint32_t* pNumProperties,
2639 VkSparseImageFormatProperties* pProperties)
2640{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002641 get_dispatch_table(pc_instance_table_map, physicalDevice)->GetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002642
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06002643 PostGetPhysicalDeviceSparseImageFormatProperties(physicalDevice, format, type, samples, usage, tiling, pNumProperties, pProperties);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002644}
2645
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002646bool PreQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002647 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002648 uint32_t bindInfoCount,
2649 const VkBindSparseInfo* pBindInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002650{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002651 if(pBindInfo != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002652 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002653 }
2654
2655 return true;
2656}
2657
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002658bool PostQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002659 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002660 uint32_t bindInfoCount,
2661 const VkBindSparseInfo* pBindInfo,
2662 VkFence fence,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002663 VkResult result)
2664{
2665
2666
2667
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002668 if(result < VK_SUCCESS)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002669 {
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002670 std::string reason = "vkQueueBindSparse parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002671 log_msg(mdd(queue), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002672 return false;
2673 }
2674
2675 return true;
2676}
2677
Chia-I Wu9ab61502015-11-06 06:42:02 +08002678VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkQueueBindSparse(
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002679 VkQueue queue,
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002680 uint32_t bindInfoCount,
2681 const VkBindSparseInfo* pBindInfo,
2682 VkFence fence)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002683{
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002684 PreQueueBindSparse(queue, bindInfoCount, pBindInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002685
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002686 VkResult result = get_dispatch_table(pc_device_table_map, queue)->QueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002687
Chia-I Wu1ff4c3d2015-10-26 16:55:27 +08002688 PostQueueBindSparse(queue, bindInfoCount, pBindInfo, fence, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002689
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002690 return result;
2691}
2692
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002693bool PreCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002694 VkDevice device,
2695 const VkFenceCreateInfo* pCreateInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002696{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002697 if(pCreateInfo != nullptr)
2698 {
2699 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FENCE_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002700 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002701 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002702 "vkCreateFence parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002703 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002704 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002705 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002706
2707 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002708}
2709
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002710bool PostCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002711 VkDevice device,
2712 VkFence* pFence,
2713 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002714{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002715
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002716 if(pFence != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002717 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002718 }
2719
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002720 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06002721 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002722 std::string reason = "vkCreateFence parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002723 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002724 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002725 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002726
2727 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002728}
2729
Chia-I Wu9ab61502015-11-06 06:42:02 +08002730VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFence(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002731 VkDevice device,
2732 const VkFenceCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002733 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002734 VkFence* pFence)
2735{
2736 PreCreateFence(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002737
Chia-I Wuf7458c52015-10-26 21:10:41 +08002738 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFence(device, pCreateInfo, pAllocator, pFence);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002739
2740 PostCreateFence(device, pFence, result);
2741
2742 return result;
2743}
2744
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002745bool PreResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002746 VkDevice device,
2747 const VkFence* pFences)
2748{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002749 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002750 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002751 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002752
2753 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002754}
2755
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002756bool PostResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002757 VkDevice device,
2758 uint32_t fenceCount,
2759 VkResult result)
2760{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002761
2762
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002763 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002764 {
2765 std::string reason = "vkResetFences parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002766 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002767 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002768 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002769
2770 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002771}
2772
Chia-I Wu9ab61502015-11-06 06:42:02 +08002773VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002774 VkDevice device,
2775 uint32_t fenceCount,
2776 const VkFence* pFences)
2777{
2778 PreResetFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002779
Jeremy Hayes99a96322015-06-26 12:48:09 -06002780 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetFences(device, fenceCount, pFences);
2781
2782 PostResetFences(device, fenceCount, result);
2783
2784 return result;
2785}
2786
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002787bool PostGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002788 VkDevice device,
2789 VkFence fence,
2790 VkResult result)
2791{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002792
Jeremy Hayes99a96322015-06-26 12:48:09 -06002793
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002794 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002795 {
2796 std::string reason = "vkGetFenceStatus parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002797 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002798 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002799 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002800
2801 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002802}
2803
Chia-I Wu9ab61502015-11-06 06:42:02 +08002804VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002805 VkDevice device,
2806 VkFence fence)
2807{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002808 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetFenceStatus(device, fence);
2809
2810 PostGetFenceStatus(device, fence, result);
2811
2812 return result;
2813}
2814
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002815bool PreWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002816 VkDevice device,
2817 const VkFence* pFences)
2818{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002819 if(pFences != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002820 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002821 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002822
2823 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002824}
2825
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002826bool PostWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002827 VkDevice device,
2828 uint32_t fenceCount,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002829 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002830 uint64_t timeout,
2831 VkResult result)
2832{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002833
2834
2835
2836
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002837 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002838 {
2839 std::string reason = "vkWaitForFences parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002840 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002841 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002842 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002843
2844 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002845}
2846
Chia-I Wu9ab61502015-11-06 06:42:02 +08002847VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkWaitForFences(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002848 VkDevice device,
2849 uint32_t fenceCount,
2850 const VkFence* pFences,
Courtney Goeltzenleuchtercd2a0992015-07-09 11:44:38 -06002851 VkBool32 waitAll,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002852 uint64_t timeout)
2853{
2854 PreWaitForFences(device, pFences);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002855
Jeremy Hayes99a96322015-06-26 12:48:09 -06002856 VkResult result = get_dispatch_table(pc_device_table_map, device)->WaitForFences(device, fenceCount, pFences, waitAll, timeout);
2857
2858 PostWaitForFences(device, fenceCount, waitAll, timeout, result);
2859
2860 return result;
2861}
2862
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002863bool PreCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002864 VkDevice device,
2865 const VkSemaphoreCreateInfo* pCreateInfo)
2866{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002867 if(pCreateInfo != nullptr)
2868 {
2869 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002870 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002871 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002872 "vkCreateSemaphore parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002873 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002874 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002875 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002876
2877 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002878}
2879
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002880bool PostCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002881 VkDevice device,
2882 VkSemaphore* pSemaphore,
2883 VkResult result)
2884{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002885
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002886 if(pSemaphore != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002887 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002888 }
2889
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002890 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002891 {
2892 std::string reason = "vkCreateSemaphore parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002893 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002894 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002895 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002896
2897 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002898}
2899
Chia-I Wu9ab61502015-11-06 06:42:02 +08002900VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSemaphore(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002901 VkDevice device,
2902 const VkSemaphoreCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002903 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002904 VkSemaphore* pSemaphore)
2905{
2906 PreCreateSemaphore(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002907
Chia-I Wuf7458c52015-10-26 21:10:41 +08002908 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSemaphore(device, pCreateInfo, pAllocator, pSemaphore);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002909
2910 PostCreateSemaphore(device, pSemaphore, result);
2911
2912 return result;
2913}
2914
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002915bool PreCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002916 VkDevice device,
2917 const VkEventCreateInfo* pCreateInfo)
2918{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002919 if(pCreateInfo != nullptr)
2920 {
2921 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_EVENT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002922 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002924 "vkCreateEvent parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002925 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002926 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06002927 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002928
2929 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002930}
2931
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002932bool PostCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002933 VkDevice device,
2934 VkEvent* pEvent,
2935 VkResult result)
2936{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002937
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002938 if(pEvent != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002939 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06002940 }
2941
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002942 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002943 {
2944 std::string reason = "vkCreateEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002945 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002946 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002947 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002948
2949 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002950}
2951
Chia-I Wu9ab61502015-11-06 06:42:02 +08002952VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002953 VkDevice device,
2954 const VkEventCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08002955 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06002956 VkEvent* pEvent)
2957{
2958 PreCreateEvent(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002959
Chia-I Wuf7458c52015-10-26 21:10:41 +08002960 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateEvent(device, pCreateInfo, pAllocator, pEvent);
Jeremy Hayes99a96322015-06-26 12:48:09 -06002961
2962 PostCreateEvent(device, pEvent, result);
2963
2964 return result;
2965}
2966
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002967bool PostGetEventStatus(
2968 VkDevice device,
2969 VkEvent event,
2970 VkResult result)
2971{
2972
Jeremy Hayes99a96322015-06-26 12:48:09 -06002973
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06002974 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06002975 {
2976 std::string reason = "vkGetEventStatus parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07002977 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002978 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002979 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002980
2981 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06002982}
2983
Chia-I Wu9ab61502015-11-06 06:42:02 +08002984VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetEventStatus(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002985 VkDevice device,
2986 VkEvent event)
2987{
Jeremy Hayes99a96322015-06-26 12:48:09 -06002988 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetEventStatus(device, event);
2989
2990 PostGetEventStatus(device, event, result);
2991
2992 return result;
2993}
2994
Jeremy Hayes359eeb92015-07-09 17:11:25 -06002995bool PostSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06002996 VkDevice device,
2997 VkEvent event,
2998 VkResult result)
2999{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003000
Jeremy Hayes99a96322015-06-26 12:48:09 -06003001
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003002 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003003 {
3004 std::string reason = "vkSetEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003005 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003006 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003007 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003008
3009 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003010}
3011
Chia-I Wu9ab61502015-11-06 06:42:02 +08003012VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkSetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003013 VkDevice device,
3014 VkEvent event)
3015{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003016 VkResult result = get_dispatch_table(pc_device_table_map, device)->SetEvent(device, event);
3017
3018 PostSetEvent(device, event, result);
3019
3020 return result;
3021}
3022
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003023bool PostResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003024 VkDevice device,
3025 VkEvent event,
3026 VkResult result)
3027{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003028
Jeremy Hayes99a96322015-06-26 12:48:09 -06003029
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003030 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003031 {
3032 std::string reason = "vkResetEvent parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003033 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003034 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003035 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003036
3037 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003038}
3039
Chia-I Wu9ab61502015-11-06 06:42:02 +08003040VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetEvent(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003041 VkDevice device,
3042 VkEvent event)
3043{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003044 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetEvent(device, event);
3045
3046 PostResetEvent(device, event, result);
3047
3048 return result;
3049}
3050
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003051bool PreCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003052 VkDevice device,
3053 const VkQueryPoolCreateInfo* pCreateInfo)
3054{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003055 if(pCreateInfo != nullptr)
3056 {
3057 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003058 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003059 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003060 "vkCreateQueryPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003061 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003062 }
3063 if(pCreateInfo->queryType < VK_QUERY_TYPE_BEGIN_RANGE ||
3064 pCreateInfo->queryType > VK_QUERY_TYPE_END_RANGE)
3065 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003066 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003067 "vkCreateQueryPool parameter, VkQueryType pCreateInfo->queryType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003068 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003069 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003070 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003071
3072 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003073}
3074
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003075bool PostCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003076 VkDevice device,
3077 VkQueryPool* pQueryPool,
3078 VkResult result)
3079{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003080
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003081 if(pQueryPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003082 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003083 }
3084
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003085 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003086 {
3087 std::string reason = "vkCreateQueryPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003088 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003089 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003090 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003091
3092 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003093}
3094
Chia-I Wu9ab61502015-11-06 06:42:02 +08003095VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateQueryPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003096 VkDevice device,
3097 const VkQueryPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003098 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003099 VkQueryPool* pQueryPool)
3100{
3101 PreCreateQueryPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003102
Chia-I Wuf7458c52015-10-26 21:10:41 +08003103 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateQueryPool(device, pCreateInfo, pAllocator, pQueryPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003104
3105 PostCreateQueryPool(device, pQueryPool, result);
3106
3107 return result;
3108}
3109
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003110bool PostGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003111 VkDevice device,
3112 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003113 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003114 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003115 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003116 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003117 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003118 VkQueryResultFlags flags,
3119 VkResult result)
3120{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003121
Jeremy Hayes99a96322015-06-26 12:48:09 -06003122
3123
3124
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003125 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003126 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003127 }
3128
Jeremy Hayes99a96322015-06-26 12:48:09 -06003129
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003130 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003131 {
3132 std::string reason = "vkGetQueryPoolResults parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003133 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003134 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003135 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003136
3137 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003138}
3139
Chia-I Wu9ab61502015-11-06 06:42:02 +08003140VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetQueryPoolResults(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003141 VkDevice device,
3142 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003143 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003144 uint32_t queryCount,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003145 size_t dataSize,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003146 void* pData,
Chia-I Wuccc93a72015-10-26 18:36:20 +08003147 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003148 VkQueryResultFlags flags)
3149{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003150 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 -06003151
Jon Ashburn19d3bf12015-12-30 14:06:55 -07003152 PostGetQueryPoolResults(device, queryPool, firstQuery, queryCount, dataSize, pData, stride, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003153
3154 return result;
3155}
3156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003157bool PreCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003158 VkDevice device,
3159 const VkBufferCreateInfo* pCreateInfo)
3160{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003161 if(pCreateInfo != nullptr)
3162 {
3163 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003164 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003165 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003166 "vkCreateBuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003167 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003168 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003169 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3170 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003171 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003172 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003173 "vkCreateBuffer parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003174 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003175 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003176 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003177 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003178 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003179 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003180
3181 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003182}
3183
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003184bool PostCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003185 VkDevice device,
3186 VkBuffer* pBuffer,
3187 VkResult result)
3188{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003189
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003190 if(pBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003191 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003192 }
3193
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003194 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003195 {
3196 std::string reason = "vkCreateBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003197 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003198 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003199 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003200
3201 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003202}
3203
Chia-I Wu9ab61502015-11-06 06:42:02 +08003204VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003205 VkDevice device,
3206 const VkBufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003207 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003208 VkBuffer* pBuffer)
3209{
3210 PreCreateBuffer(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003211
Chia-I Wuf7458c52015-10-26 21:10:41 +08003212 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBuffer(device, pCreateInfo, pAllocator, pBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003213
3214 PostCreateBuffer(device, pBuffer, result);
3215
3216 return result;
3217}
3218
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003219bool PreCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003220 VkDevice device,
3221 const VkBufferViewCreateInfo* pCreateInfo)
3222{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003223 if(pCreateInfo != nullptr)
3224 {
3225 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_BUFFER_VIEW_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003226 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003227 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003228 "vkCreateBufferView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003229 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003230 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003231 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3232 pCreateInfo->format > VK_FORMAT_END_RANGE)
3233 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003234 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003235 "vkCreateBufferView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003236 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003237 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003238 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003239
3240 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003241}
3242
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003243bool PostCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003244 VkDevice device,
3245 VkBufferView* pView,
3246 VkResult result)
3247{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003248
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003249 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003250 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003251 }
3252
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003253 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003254 {
3255 std::string reason = "vkCreateBufferView parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003256 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003257 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003258 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003259
3260 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003261}
3262
Chia-I Wu9ab61502015-11-06 06:42:02 +08003263VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003264 VkDevice device,
3265 const VkBufferViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003266 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003267 VkBufferView* pView)
3268{
3269 PreCreateBufferView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003270
Chia-I Wuf7458c52015-10-26 21:10:41 +08003271 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateBufferView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003272
3273 PostCreateBufferView(device, pView, result);
3274
3275 return result;
3276}
3277
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003278bool PreCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003279 VkDevice device,
3280 const VkImageCreateInfo* pCreateInfo)
3281{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003282 if(pCreateInfo != nullptr)
3283 {
3284 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003285 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003286 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003287 "vkCreateImage parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003288 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003289 }
3290 if(pCreateInfo->imageType < VK_IMAGE_TYPE_BEGIN_RANGE ||
3291 pCreateInfo->imageType > VK_IMAGE_TYPE_END_RANGE)
3292 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003293 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003294 "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003295 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003296 }
3297 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3298 pCreateInfo->format > VK_FORMAT_END_RANGE)
3299 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003300 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003301 "vkCreateImage parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003302 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003303 }
3304 if(pCreateInfo->tiling < VK_IMAGE_TILING_BEGIN_RANGE ||
3305 pCreateInfo->tiling > VK_IMAGE_TILING_END_RANGE)
3306 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003307 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003308 "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003309 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003310 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003311 if(pCreateInfo->sharingMode < VK_SHARING_MODE_BEGIN_RANGE ||
3312 pCreateInfo->sharingMode > VK_SHARING_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003313 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003314 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003315 "vkCreateImage parameter, VkSharingMode pCreateInfo->sharingMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003316 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003317 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003318 if(pCreateInfo->pQueueFamilyIndices != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003319 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003320 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003321 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003322
3323 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003324}
3325
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003326bool PostCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003327 VkDevice device,
3328 VkImage* pImage,
3329 VkResult result)
3330{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003331
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003332 if(pImage != nullptr)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003333 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003334 }
3335
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003336 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003337 {
3338 std::string reason = "vkCreateImage parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003339 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003340 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003341 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003342
3343 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003344}
3345
Chia-I Wu9ab61502015-11-06 06:42:02 +08003346VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImage(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003347 VkDevice device,
3348 const VkImageCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003349 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003350 VkImage* pImage)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003351{
3352 PreCreateImage(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003353
Chia-I Wuf7458c52015-10-26 21:10:41 +08003354 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImage(device, pCreateInfo, pAllocator, pImage);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003355
3356 PostCreateImage(device, pImage, result);
3357
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003358 return result;
3359}
3360
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003361bool PreGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003362 VkDevice device,
3363 const VkImageSubresource* pSubresource)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003364{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003365 if(pSubresource != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003366 {
Chia-I Wu52b07e72015-10-27 19:55:05 +08003367 if ((pSubresource->aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06003368 (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 -06003369 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003370 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu52b07e72015-10-27 19:55:05 +08003371 "vkGetImageSubresourceLayout parameter, VkImageAspect pSubresource->aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003372 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003373 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003374 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003375
3376 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003377}
3378
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003379bool PostGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003380 VkDevice device,
3381 VkImage image,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003382 VkSubresourceLayout* pLayout)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003383{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003384
Jeremy Hayes99a96322015-06-26 12:48:09 -06003385
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003386 if(pLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003387 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003388 }
3389
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003390 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003391}
3392
Chia-I Wu9ab61502015-11-06 06:42:02 +08003393VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetImageSubresourceLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003394 VkDevice device,
3395 VkImage image,
3396 const VkImageSubresource* pSubresource,
3397 VkSubresourceLayout* pLayout)
3398{
3399 PreGetImageSubresourceLayout(device, pSubresource);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003400
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003401 get_dispatch_table(pc_device_table_map, device)->GetImageSubresourceLayout(device, image, pSubresource, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003402
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06003403 PostGetImageSubresourceLayout(device, image, pLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003404}
3405
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003406bool PreCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003407 VkDevice device,
3408 const VkImageViewCreateInfo* pCreateInfo)
3409{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003410 if(pCreateInfo != nullptr)
3411 {
3412 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003413 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003414 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003415 "vkCreateImageView parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003416 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003417 }
3418 if(pCreateInfo->viewType < VK_IMAGE_VIEW_TYPE_BEGIN_RANGE ||
3419 pCreateInfo->viewType > VK_IMAGE_VIEW_TYPE_END_RANGE)
3420 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003421 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003422 "vkCreateImageView parameter, VkImageViewType pCreateInfo->viewType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003423 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003424 }
3425 if(pCreateInfo->format < VK_FORMAT_BEGIN_RANGE ||
3426 pCreateInfo->format > VK_FORMAT_END_RANGE)
3427 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003428 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003429 "vkCreateImageView parameter, VkFormat pCreateInfo->format, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003430 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003431 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003432 if(pCreateInfo->components.r < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3433 pCreateInfo->components.r > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003434 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003435 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003436 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.r, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003437 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003438 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003439 if(pCreateInfo->components.g < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3440 pCreateInfo->components.g > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003441 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003442 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003443 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.g, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003444 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003445 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003446 if(pCreateInfo->components.b < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3447 pCreateInfo->components.b > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003448 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003449 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003450 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.b, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003451 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003452 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003453 if(pCreateInfo->components.a < VK_COMPONENT_SWIZZLE_BEGIN_RANGE ||
3454 pCreateInfo->components.a > VK_COMPONENT_SWIZZLE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003455 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003456 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003457 "vkCreateImageView parameter, VkComponentSwizzle pCreateInfo->components.a, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003458 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003459 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003460 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003461
3462 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003463}
3464
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003465bool PostCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003466 VkDevice device,
3467 VkImageView* pView,
3468 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003469{
Jeremy Hayes99a96322015-06-26 12:48:09 -06003470
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003471 if(pView != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003472 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003473 }
3474
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003475 if(result < VK_SUCCESS)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06003476 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003477 std::string reason = "vkCreateImageView parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003478 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003479 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003480 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003481
3482 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003483}
3484
Chia-I Wu9ab61502015-11-06 06:42:02 +08003485VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateImageView(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003486 VkDevice device,
3487 const VkImageViewCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003488 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06003489 VkImageView* pView)
3490{
3491 PreCreateImageView(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003492
Chia-I Wuf7458c52015-10-26 21:10:41 +08003493 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateImageView(device, pCreateInfo, pAllocator, pView);
Jeremy Hayes99a96322015-06-26 12:48:09 -06003494
3495 PostCreateImageView(device, pView, result);
3496
3497 return result;
3498}
3499
Michael Lentine03d8e572015-09-15 14:59:14 -05003500bool PreCreateShaderModule(
3501 VkDevice device,
3502 const VkShaderModuleCreateInfo* pCreateInfo)
3503{
3504 if(pCreateInfo) {
3505 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003506 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003507 "vkCreateShaderModule parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
3508 return false;
3509 }
3510 if(!pCreateInfo->pCode) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003511 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003512 "vkCreateShaderModule paramter, void* pCreateInfo->pCode, is null");
3513 return false;
3514 }
3515 } else {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003516 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine03d8e572015-09-15 14:59:14 -05003517 "vkCreateShaderModule parameter, VkShaderModuleCreateInfo pCreateInfo, is null");
3518 return false;
3519 }
3520
3521 return true;
3522}
3523
3524bool PostCreateShaderModule(
3525 VkDevice device,
3526 VkShaderModule* pShaderModule,
3527 VkResult result)
3528{
3529 if(result < VK_SUCCESS) {
3530 std::string reason = "vkCreateShaderModule parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003531 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Michael Lentine03d8e572015-09-15 14:59:14 -05003532 return false;
3533 }
3534
3535 return true;
3536}
3537
Chia-I Wu9ab61502015-11-06 06:42:02 +08003538VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateShaderModule(
Michael Lentine03d8e572015-09-15 14:59:14 -05003539 VkDevice device,
3540 const VkShaderModuleCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003541 const VkAllocationCallbacks* pAllocator,
Michael Lentine03d8e572015-09-15 14:59:14 -05003542 VkShaderModule* pShaderModule)
3543{
3544 PreCreateShaderModule(device, pCreateInfo);
Chia-I Wuf7458c52015-10-26 21:10:41 +08003545 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateShaderModule(device, pCreateInfo, pAllocator, pShaderModule);
Michael Lentine03d8e572015-09-15 14:59:14 -05003546 PostCreateShaderModule(device, pShaderModule, result);
3547 return result;
3548}
3549
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003550bool PreCreatePipelineCache(
Jeremy Hayes99a96322015-06-26 12:48:09 -06003551 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003552 const VkPipelineCacheCreateInfo* pCreateInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003553{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003554 if(pCreateInfo != nullptr)
3555 {
3556 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003557 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003558 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003559 "vkCreatePipelineCache parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06003560 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06003561 }
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08003562 if(pCreateInfo->pInitialData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003563 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003564 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06003565 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003566
3567 return true;
3568}
3569
3570bool PostCreatePipelineCache(
3571 VkDevice device,
3572 VkPipelineCache* pPipelineCache,
3573 VkResult result)
3574{
3575
3576 if(pPipelineCache != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003577 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06003578 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003579
3580 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06003581 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003582 std::string reason = "vkCreatePipelineCache parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003583 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003584 return false;
3585 }
3586
3587 return true;
3588}
3589
Chia-I Wu9ab61502015-11-06 06:42:02 +08003590VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineCache(
Tony Barbourdd6e32e2015-07-10 15:29:03 -06003591 VkDevice device,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003592 const VkPipelineCacheCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003593 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003594 VkPipelineCache* pPipelineCache)
3595{
3596 PreCreatePipelineCache(device, pCreateInfo);
3597
Chia-I Wuf7458c52015-10-26 21:10:41 +08003598 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineCache(device, pCreateInfo, pAllocator, pPipelineCache);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003599
3600 PostCreatePipelineCache(device, pPipelineCache, result);
3601
3602 return result;
3603}
3604
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003605bool PostGetPipelineCacheData(
3606 VkDevice device,
3607 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003608 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003609 void* pData,
3610 VkResult result)
3611{
3612
3613
Chia-I Wub16facd2015-10-26 19:17:06 +08003614 if(pDataSize != nullptr)
3615 {
3616 }
3617
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003618 if(pData != nullptr)
3619 {
3620 }
3621
3622 if(result < VK_SUCCESS)
3623 {
3624 std::string reason = "vkGetPipelineCacheData parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003625 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003626 return false;
3627 }
3628
3629 return true;
3630}
3631
Chia-I Wu9ab61502015-11-06 06:42:02 +08003632VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineCacheData(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003633 VkDevice device,
3634 VkPipelineCache pipelineCache,
Chia-I Wub16facd2015-10-26 19:17:06 +08003635 size_t* pDataSize,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003636 void* pData)
3637{
Chia-I Wub16facd2015-10-26 19:17:06 +08003638 VkResult result = get_dispatch_table(pc_device_table_map, device)->GetPipelineCacheData(device, pipelineCache, pDataSize, pData);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003639
Chia-I Wub16facd2015-10-26 19:17:06 +08003640 PostGetPipelineCacheData(device, pipelineCache, pDataSize, pData, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003641
3642 return result;
3643}
3644
3645bool PreMergePipelineCaches(
3646 VkDevice device,
3647 const VkPipelineCache* pSrcCaches)
3648{
3649 if(pSrcCaches != nullptr)
3650 {
3651 }
3652
3653 return true;
3654}
3655
3656bool PostMergePipelineCaches(
3657 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003658 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003659 uint32_t srcCacheCount,
3660 VkResult result)
3661{
3662
3663
3664
3665 if(result < VK_SUCCESS)
3666 {
3667 std::string reason = "vkMergePipelineCaches parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003668 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003669 return false;
3670 }
3671
3672 return true;
3673}
3674
Chia-I Wu9ab61502015-11-06 06:42:02 +08003675VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkMergePipelineCaches(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003676 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003677 VkPipelineCache dstCache,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003678 uint32_t srcCacheCount,
3679 const VkPipelineCache* pSrcCaches)
3680{
3681 PreMergePipelineCaches(device, pSrcCaches);
3682
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003683 VkResult result = get_dispatch_table(pc_device_table_map, device)->MergePipelineCaches(device, dstCache, srcCacheCount, pSrcCaches);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003684
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003685 PostMergePipelineCaches(device, dstCache, srcCacheCount, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003686
3687 return result;
3688}
3689
3690bool PreCreateGraphicsPipelines(
3691 VkDevice device,
3692 const VkGraphicsPipelineCreateInfo* pCreateInfos)
3693{
3694 if(pCreateInfos != nullptr)
3695 {
3696 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO)
3697 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003698 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003699 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
3700 return false;
3701 }
3702 if(pCreateInfos->pStages != nullptr)
3703 {
3704 if(pCreateInfos->pStages->sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
3705 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003706 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003707 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pStages->sType, is an invalid enumerator");
3708 return false;
3709 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003710 if(pCreateInfos->pStages->pSpecializationInfo != nullptr)
3711 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08003712 if(pCreateInfos->pStages->pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003713 {
3714 }
3715 if(pCreateInfos->pStages->pSpecializationInfo->pData != nullptr)
3716 {
3717 }
3718 }
3719 }
3720 if(pCreateInfos->pVertexInputState != nullptr)
3721 {
3722 if(pCreateInfos->pVertexInputState->sType != VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO)
3723 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003724 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003725 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pVertexInputState->sType, is an invalid enumerator");
3726 return false;
3727 }
3728 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions != nullptr)
3729 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003730 if(pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate < VK_VERTEX_INPUT_RATE_BEGIN_RANGE ||
3731 pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate > VK_VERTEX_INPUT_RATE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003732 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003733 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003734 "vkCreateGraphicsPipelines parameter, VkVertexInputRate pCreateInfos->pVertexInputState->pVertexBindingDescriptions->inputRate, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003735 return false;
3736 }
3737 }
3738 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions != nullptr)
3739 {
3740 if(pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format < VK_FORMAT_BEGIN_RANGE ||
3741 pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format > VK_FORMAT_END_RANGE)
3742 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003743 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003744 "vkCreateGraphicsPipelines parameter, VkFormat pCreateInfos->pVertexInputState->pVertexAttributeDescriptions->format, is an unrecognized enumerator");
3745 return false;
3746 }
3747 }
3748 }
3749 if(pCreateInfos->pInputAssemblyState != nullptr)
3750 {
3751 if(pCreateInfos->pInputAssemblyState->sType != VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO)
3752 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003753 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003754 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pInputAssemblyState->sType, is an invalid enumerator");
3755 return false;
3756 }
3757 if(pCreateInfos->pInputAssemblyState->topology < VK_PRIMITIVE_TOPOLOGY_BEGIN_RANGE ||
3758 pCreateInfos->pInputAssemblyState->topology > VK_PRIMITIVE_TOPOLOGY_END_RANGE)
3759 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003760 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003761 "vkCreateGraphicsPipelines parameter, VkPrimitiveTopology pCreateInfos->pInputAssemblyState->topology, is an unrecognized enumerator");
3762 return false;
3763 }
3764 }
3765 if(pCreateInfos->pTessellationState != nullptr)
3766 {
3767 if(pCreateInfos->pTessellationState->sType != VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO)
3768 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003769 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003770 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pTessellationState->sType, is an invalid enumerator");
3771 return false;
3772 }
3773 }
3774 if(pCreateInfos->pViewportState != nullptr)
3775 {
3776 if(pCreateInfos->pViewportState->sType != VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO)
3777 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003778 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003779 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pViewportState->sType, is an invalid enumerator");
3780 return false;
3781 }
3782 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003783 if(pCreateInfos->pRasterizationState != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003784 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003785 if(pCreateInfos->pRasterizationState->sType != VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003786 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003787 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003788 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pRasterizationState->sType, is an invalid enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003789 return false;
3790 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003791 if(pCreateInfos->pRasterizationState->polygonMode < VK_POLYGON_MODE_BEGIN_RANGE ||
3792 pCreateInfos->pRasterizationState->polygonMode > VK_POLYGON_MODE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003793 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003794 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003795 "vkCreateGraphicsPipelines parameter, VkPolygonMode pCreateInfos->pRasterizationState->polygonMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003796 return false;
3797 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003798 if(pCreateInfos->pRasterizationState->cullMode & ~VK_CULL_MODE_FRONT_AND_BACK)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003799 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003800 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003801 "vkCreateGraphicsPipelines parameter, VkCullMode pCreateInfos->pRasterizationState->cullMode, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003802 return false;
3803 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003804 if(pCreateInfos->pRasterizationState->frontFace < VK_FRONT_FACE_BEGIN_RANGE ||
3805 pCreateInfos->pRasterizationState->frontFace > VK_FRONT_FACE_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003806 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003807 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003808 "vkCreateGraphicsPipelines parameter, VkFrontFace pCreateInfos->pRasterizationState->frontFace, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003809 return false;
3810 }
3811 }
3812 if(pCreateInfos->pMultisampleState != nullptr)
3813 {
3814 if(pCreateInfos->pMultisampleState->sType != VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO)
3815 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003816 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003817 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pMultisampleState->sType, is an invalid enumerator");
3818 return false;
3819 }
3820 }
3821 if(pCreateInfos->pDepthStencilState != nullptr)
3822 {
3823 if(pCreateInfos->pDepthStencilState->sType != VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO)
3824 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003825 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003826 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pDepthStencilState->sType, is an invalid enumerator");
3827 return false;
3828 }
3829 if(pCreateInfos->pDepthStencilState->depthCompareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3830 pCreateInfos->pDepthStencilState->depthCompareOp > VK_COMPARE_OP_END_RANGE)
3831 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003832 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003833 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->depthCompareOp, is an unrecognized enumerator");
3834 return false;
3835 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003836 if(pCreateInfos->pDepthStencilState->front.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3837 pCreateInfos->pDepthStencilState->front.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003838 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003839 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003840 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003841 return false;
3842 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003843 if(pCreateInfos->pDepthStencilState->front.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3844 pCreateInfos->pDepthStencilState->front.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003845 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003846 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003847 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003848 return false;
3849 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003850 if(pCreateInfos->pDepthStencilState->front.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3851 pCreateInfos->pDepthStencilState->front.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003852 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003853 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003854 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->front.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003855 return false;
3856 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003857 if(pCreateInfos->pDepthStencilState->front.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3858 pCreateInfos->pDepthStencilState->front.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003859 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003860 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003861 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->front.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003862 return false;
3863 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003864 if(pCreateInfos->pDepthStencilState->back.failOp < VK_STENCIL_OP_BEGIN_RANGE ||
3865 pCreateInfos->pDepthStencilState->back.failOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003866 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003867 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003868 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.failOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003869 return false;
3870 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003871 if(pCreateInfos->pDepthStencilState->back.passOp < VK_STENCIL_OP_BEGIN_RANGE ||
3872 pCreateInfos->pDepthStencilState->back.passOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003873 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003874 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003875 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.passOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003876 return false;
3877 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003878 if(pCreateInfos->pDepthStencilState->back.depthFailOp < VK_STENCIL_OP_BEGIN_RANGE ||
3879 pCreateInfos->pDepthStencilState->back.depthFailOp > VK_STENCIL_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003880 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003881 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003882 "vkCreateGraphicsPipelines parameter, VkStencilOp pCreateInfos->pDepthStencilState->back.depthFailOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003883 return false;
3884 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003885 if(pCreateInfos->pDepthStencilState->back.compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
3886 pCreateInfos->pDepthStencilState->back.compareOp > VK_COMPARE_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003887 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003888 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003889 "vkCreateGraphicsPipelines parameter, VkCompareOp pCreateInfos->pDepthStencilState->back.compareOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003890 return false;
3891 }
3892 }
3893 if(pCreateInfos->pColorBlendState != nullptr)
3894 {
3895 if(pCreateInfos->pColorBlendState->sType != VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO)
3896 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003897 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003898 "vkCreateGraphicsPipelines parameter, VkStructureType pCreateInfos->pColorBlendState->sType, is an invalid enumerator");
3899 return false;
3900 }
Michael Lentine304b01f2015-10-06 14:55:54 -07003901 if(pCreateInfos->pColorBlendState->logicOpEnable == VK_TRUE &&
3902 pCreateInfos->pColorBlendState->logicOp < VK_LOGIC_OP_BEGIN_RANGE ||
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003903 pCreateInfos->pColorBlendState->logicOp > VK_LOGIC_OP_END_RANGE)
3904 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003905 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003906 "vkCreateGraphicsPipelines parameter, VkLogicOp pCreateInfos->pColorBlendState->logicOp, is an unrecognized enumerator");
3907 return false;
3908 }
Michael Lentine5f7cd462015-09-15 14:59:56 -05003909 if(pCreateInfos->pColorBlendState->pAttachments != nullptr && pCreateInfos->pColorBlendState->pAttachments->blendEnable == VK_TRUE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003910 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003911 if(pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3912 pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003913 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003914 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003915 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003916 return false;
3917 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003918 if(pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3919 pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003920 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003921 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003922 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstColorBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003923 return false;
3924 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003925 if(pCreateInfos->pColorBlendState->pAttachments->colorBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3926 pCreateInfos->pColorBlendState->pAttachments->colorBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003927 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003928 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003929 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->colorBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003930 return false;
3931 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003932 if(pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3933 pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003934 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003935 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003936 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->srcAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003937 return false;
3938 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08003939 if(pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor < VK_BLEND_FACTOR_BEGIN_RANGE ||
3940 pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor > VK_BLEND_FACTOR_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003941 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003942 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003943 "vkCreateGraphicsPipelines parameter, VkBlendFactor pCreateInfos->pColorBlendState->pAttachments->dstAlphaBlendFactor, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003944 return false;
3945 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003946 if(pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp < VK_BLEND_OP_BEGIN_RANGE ||
3947 pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp > VK_BLEND_OP_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003948 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003949 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08003950 "vkCreateGraphicsPipelines parameter, VkBlendOp pCreateInfos->pColorBlendState->pAttachments->alphaBlendOp, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003951 return false;
3952 }
3953 }
3954 }
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003955 if(pCreateInfos->renderPass == VK_NULL_HANDLE)
3956 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003957 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf06ae822015-07-31 14:16:20 -06003958 "vkCreateGraphicsPipelines parameter, VkRenderPass pCreateInfos->renderPass, is null pointer");
3959 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003960 }
3961
3962 return true;
3963}
3964
3965bool PostCreateGraphicsPipelines(
3966 VkDevice device,
3967 VkPipelineCache pipelineCache,
3968 uint32_t count,
3969 VkPipeline* pPipelines,
3970 VkResult result)
3971{
3972
3973
3974
3975 if(pPipelines != nullptr)
3976 {
3977 }
3978
3979 if(result < VK_SUCCESS)
3980 {
3981 std::string reason = "vkCreateGraphicsPipelines parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07003982 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003983 return false;
3984 }
3985
3986 return true;
3987}
3988
Chia-I Wu9ab61502015-11-06 06:42:02 +08003989VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateGraphicsPipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003990 VkDevice device,
3991 VkPipelineCache pipelineCache,
3992 uint32_t count,
3993 const VkGraphicsPipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08003994 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06003995 VkPipeline* pPipelines)
3996{
3997 PreCreateGraphicsPipelines(device, pCreateInfos);
3998
Chia-I Wuf7458c52015-10-26 21:10:41 +08003999 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateGraphicsPipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004000
4001 PostCreateGraphicsPipelines(device, pipelineCache, count, pPipelines, result);
4002
4003 return result;
4004}
4005
4006bool PreCreateComputePipelines(
4007 VkDevice device,
4008 const VkComputePipelineCreateInfo* pCreateInfos)
4009{
4010 if(pCreateInfos != nullptr)
4011 {
4012 if(pCreateInfos->sType != VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO)
4013 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004014 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004015 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->sType, is an invalid enumerator");
4016 return false;
4017 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004018 if(pCreateInfos->stage.sType != VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004019 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004020 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004021 "vkCreateComputePipelines parameter, VkStructureType pCreateInfos->cs.sType, is an invalid enumerator");
4022 return false;
4023 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004024 if(pCreateInfos->stage.pSpecializationInfo != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004025 {
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004026 if(pCreateInfos->stage.pSpecializationInfo->pMapEntries != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004027 {
4028 }
Courtney Goeltzenleuchterb1c93292015-09-02 13:07:51 -06004029 if(pCreateInfos->stage.pSpecializationInfo->pData != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004030 {
4031 }
4032 }
4033 }
4034
4035 return true;
4036}
4037
4038bool PostCreateComputePipelines(
4039 VkDevice device,
4040 VkPipelineCache pipelineCache,
4041 uint32_t count,
4042 VkPipeline* pPipelines,
4043 VkResult result)
4044{
4045
4046
4047
4048 if(pPipelines != nullptr)
4049 {
4050 }
4051
4052 if(result < VK_SUCCESS)
4053 {
4054 std::string reason = "vkCreateComputePipelines parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004055 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004056 return false;
4057 }
4058
4059 return true;
4060}
4061
Chia-I Wu9ab61502015-11-06 06:42:02 +08004062VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateComputePipelines(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004063 VkDevice device,
4064 VkPipelineCache pipelineCache,
4065 uint32_t count,
4066 const VkComputePipelineCreateInfo* pCreateInfos,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004067 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004068 VkPipeline* pPipelines)
4069{
4070 PreCreateComputePipelines(device, pCreateInfos);
4071
Chia-I Wuf7458c52015-10-26 21:10:41 +08004072 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateComputePipelines(device, pipelineCache, count, pCreateInfos, pAllocator, pPipelines);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004073
4074 PostCreateComputePipelines(device, pipelineCache, count, pPipelines, result);
4075
4076 return result;
4077}
4078
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004079bool PreCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004080 VkDevice device,
4081 const VkPipelineLayoutCreateInfo* pCreateInfo)
4082{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004083 if(pCreateInfo != nullptr)
4084 {
4085 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004086 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004087 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004088 "vkCreatePipelineLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4089 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004090 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004091 if(pCreateInfo->pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004092 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004093 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004094 if(pCreateInfo->pPushConstantRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004095 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004096 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004097 }
4098
4099 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004100}
4101
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004102bool PostCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004103 VkDevice device,
4104 VkPipelineLayout* pPipelineLayout,
4105 VkResult result)
4106{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004107
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004108 if(pPipelineLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004109 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004110 }
4111
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004112 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004113 {
4114 std::string reason = "vkCreatePipelineLayout parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004115 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004116 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004117 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004118
4119 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004120}
4121
Chia-I Wu9ab61502015-11-06 06:42:02 +08004122VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreatePipelineLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004123 VkDevice device,
4124 const VkPipelineLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004125 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004126 VkPipelineLayout* pPipelineLayout)
4127{
4128 PreCreatePipelineLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004129
Chia-I Wuf7458c52015-10-26 21:10:41 +08004130 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreatePipelineLayout(device, pCreateInfo, pAllocator, pPipelineLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004131
4132 PostCreatePipelineLayout(device, pPipelineLayout, result);
4133
4134 return result;
4135}
4136
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004137bool PreCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004138 VkDevice device,
4139 const VkSamplerCreateInfo* pCreateInfo)
4140{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004141 if(pCreateInfo != nullptr)
4142 {
4143 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004144 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004145 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004146 "vkCreateSampler parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004147 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004148 }
Chia-I Wub99df442015-10-26 16:49:32 +08004149 if(pCreateInfo->magFilter < VK_FILTER_BEGIN_RANGE ||
4150 pCreateInfo->magFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004151 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004152 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004153 "vkCreateSampler parameter, VkFilter pCreateInfo->magFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004154 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004155 }
Chia-I Wub99df442015-10-26 16:49:32 +08004156 if(pCreateInfo->minFilter < VK_FILTER_BEGIN_RANGE ||
4157 pCreateInfo->minFilter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004158 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004159 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004160 "vkCreateSampler parameter, VkFilter pCreateInfo->minFilter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004161 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004162 }
Chia-I Wub99df442015-10-26 16:49:32 +08004163 if(pCreateInfo->mipmapMode < VK_SAMPLER_MIPMAP_MODE_BEGIN_RANGE ||
4164 pCreateInfo->mipmapMode > VK_SAMPLER_MIPMAP_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004165 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004166 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08004167 "vkCreateSampler parameter, VkSamplerMipmapMode pCreateInfo->mipmapMode, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004168 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004169 }
Chia-I Wub99df442015-10-26 16:49:32 +08004170 if(pCreateInfo->addressModeU < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4171 pCreateInfo->addressModeU > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004172 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004173 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004174 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeU, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004175 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004176 }
Chia-I Wub99df442015-10-26 16:49:32 +08004177 if(pCreateInfo->addressModeV < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4178 pCreateInfo->addressModeV > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004179 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004180 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004181 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeV, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004182 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004183 }
Chia-I Wub99df442015-10-26 16:49:32 +08004184 if(pCreateInfo->addressModeW < VK_SAMPLER_ADDRESS_MODE_BEGIN_RANGE ||
4185 pCreateInfo->addressModeW > VK_SAMPLER_ADDRESS_MODE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004186 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004187 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Courtney Goeltzenleuchter97953352015-09-10 14:08:50 -06004188 "vkCreateSampler parameter, VkTexAddress pCreateInfo->addressModeW, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004189 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004190 }
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004191 if(pCreateInfo->compareEnable)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004192 {
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004193 if(pCreateInfo->compareOp < VK_COMPARE_OP_BEGIN_RANGE ||
4194 pCreateInfo->compareOp > VK_COMPARE_OP_END_RANGE)
4195 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004196 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayes85502ea2015-11-16 17:23:59 -07004197 "vkCreateSampler parameter, VkCompareOp pCreateInfo->compareOp, is an unrecognized enumerator");
4198 return false;
4199 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004200 }
4201 if(pCreateInfo->borderColor < VK_BORDER_COLOR_BEGIN_RANGE ||
4202 pCreateInfo->borderColor > VK_BORDER_COLOR_END_RANGE)
4203 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004204 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004205 "vkCreateSampler parameter, VkBorderColor pCreateInfo->borderColor, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004206 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004207 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004208 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004209
4210 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004211}
4212
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004213bool PostCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004214 VkDevice device,
4215 VkSampler* pSampler,
4216 VkResult result)
4217{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004218
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004219 if(pSampler != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004220 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004221 }
4222
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004223 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004224 {
4225 std::string reason = "vkCreateSampler parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004226 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004227 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004228 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004229
4230 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004231}
4232
Chia-I Wu9ab61502015-11-06 06:42:02 +08004233VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateSampler(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004234 VkDevice device,
4235 const VkSamplerCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004236 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004237 VkSampler* pSampler)
4238{
4239 PreCreateSampler(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004240
Chia-I Wuf7458c52015-10-26 21:10:41 +08004241 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateSampler(device, pCreateInfo, pAllocator, pSampler);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004242
4243 PostCreateSampler(device, pSampler, result);
4244
4245 return result;
4246}
4247
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004248bool PreCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004249 VkDevice device,
4250 const VkDescriptorSetLayoutCreateInfo* pCreateInfo)
4251{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004252 if(pCreateInfo != nullptr)
4253 {
4254 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004255 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004256 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004257 "vkCreateDescriptorSetLayout parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004258 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004259 }
Chia-I Wua745e512015-10-31 00:31:16 +08004260 if(pCreateInfo->pBinding != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004261 {
Chia-I Wua745e512015-10-31 00:31:16 +08004262 if(pCreateInfo->pBinding->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4263 pCreateInfo->pBinding->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004264 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004265 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004266 "vkCreateDescriptorSetLayout parameter, VkDescriptorType pCreateInfo->pBinding->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004267 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004268 }
Chia-I Wua745e512015-10-31 00:31:16 +08004269 if(pCreateInfo->pBinding->pImmutableSamplers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004270 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004271 }
4272 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004273 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004274
4275 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004276}
4277
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004278bool PostCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004279 VkDevice device,
4280 VkDescriptorSetLayout* pSetLayout,
4281 VkResult result)
4282{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004283
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004284 if(pSetLayout != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004285 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004286 }
4287
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004288 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004289 {
4290 std::string reason = "vkCreateDescriptorSetLayout parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004291 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004292 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004293 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004294
4295 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004296}
4297
Chia-I Wu9ab61502015-11-06 06:42:02 +08004298VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorSetLayout(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004299 VkDevice device,
4300 const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004301 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004302 VkDescriptorSetLayout* pSetLayout)
4303{
4304 PreCreateDescriptorSetLayout(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004305
Chia-I Wuf7458c52015-10-26 21:10:41 +08004306 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorSetLayout(device, pCreateInfo, pAllocator, pSetLayout);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004307
4308 PostCreateDescriptorSetLayout(device, pSetLayout, result);
4309
4310 return result;
4311}
4312
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004313bool PreCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004314 VkDevice device,
4315 const VkDescriptorPoolCreateInfo* pCreateInfo)
4316{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004317 if(pCreateInfo != nullptr)
4318 {
4319 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004320 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004321 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004322 "vkCreateDescriptorPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004323 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004324 }
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004325 if(pCreateInfo->pPoolSizes != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004326 {
Chia-I Wu1b99bb22015-10-27 19:25:11 +08004327 if(pCreateInfo->pPoolSizes->type < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4328 pCreateInfo->pPoolSizes->type > VK_DESCRIPTOR_TYPE_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004329 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004330 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004331 "vkCreateDescriptorPool parameter, VkDescriptorType pCreateInfo->pTypeCount->type, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004332 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004333 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004334 }
4335 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004336
4337 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004338}
4339
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004340bool PostCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004341 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004342 uint32_t maxSets,
4343 VkDescriptorPool* pDescriptorPool,
4344 VkResult result)
4345{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004346
Courtney Goeltzenleuchterfe908d32015-09-16 16:12:45 -06004347 /* TODOVV: How do we validate maxSets? Probably belongs in the limits layer? */
Jeremy Hayes99a96322015-06-26 12:48:09 -06004348
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004349 if(pDescriptorPool != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004350 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004351 }
4352
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004353 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004354 {
4355 std::string reason = "vkCreateDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004356 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004357 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004358 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004359
4360 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004361}
4362
Chia-I Wu9ab61502015-11-06 06:42:02 +08004363VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004364 VkDevice device,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004365 const VkDescriptorPoolCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004366 const VkAllocationCallbacks* pAllocator,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004367 VkDescriptorPool* pDescriptorPool)
4368{
4369 PreCreateDescriptorPool(device, pCreateInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004370
Chia-I Wuf7458c52015-10-26 21:10:41 +08004371 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateDescriptorPool(device, pCreateInfo, pAllocator, pDescriptorPool);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004372
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004373 PostCreateDescriptorPool(device, pCreateInfo->maxSets, pDescriptorPool, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004374
4375 return result;
4376}
4377
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004378bool PostResetDescriptorPool(
4379 VkDevice device,
4380 VkDescriptorPool descriptorPool,
4381 VkResult result)
4382{
4383
Jeremy Hayes99a96322015-06-26 12:48:09 -06004384
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004385 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004386 {
4387 std::string reason = "vkResetDescriptorPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004388 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004389 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004390 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004391
4392 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004393}
4394
Chia-I Wu9ab61502015-11-06 06:42:02 +08004395VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetDescriptorPool(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004396 VkDevice device,
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004397 VkDescriptorPool descriptorPool,
4398 VkDescriptorPoolResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004399{
Courtney Goeltzenleuchterbee18a92015-10-23 14:21:05 -06004400 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetDescriptorPool(device, descriptorPool, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004401
4402 PostResetDescriptorPool(device, descriptorPool, result);
4403
4404 return result;
4405}
4406
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004407bool PreAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004408 VkDevice device,
4409 const VkDescriptorSetLayout* pSetLayouts)
4410{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004411 if(pSetLayouts != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004412 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004413 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004414
4415 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004416}
4417
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004418bool PostAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004419 VkDevice device,
4420 VkDescriptorPool descriptorPool,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004421 uint32_t count,
4422 VkDescriptorSet* pDescriptorSets,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004423 VkResult result)
4424{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004425
Jeremy Hayes99a96322015-06-26 12:48:09 -06004426
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004427 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004428 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004429 }
4430
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004431 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004432 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004433 std::string reason = "vkAllocateDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004434 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004435 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004436 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004437
4438 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004439}
4440
Chia-I Wu9ab61502015-11-06 06:42:02 +08004441VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004442 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004443 const VkDescriptorSetAllocateInfo* pAllocateInfo,
Cody Northrop1e4f8022015-08-03 12:47:29 -06004444 VkDescriptorSet* pDescriptorSets)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004445{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004446 PreAllocateDescriptorSets(device, pAllocateInfo->pSetLayouts);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004447
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004448 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004449
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004450 PostAllocateDescriptorSets(device, pAllocateInfo->descriptorPool, pAllocateInfo->setLayoutCount, pDescriptorSets, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004451
4452 return result;
4453}
4454
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004455bool PreFreeDescriptorSets(
4456 VkDevice device,
4457 const VkDescriptorSet* pDescriptorSets)
4458{
4459 if(pDescriptorSets != nullptr)
4460 {
4461 }
4462
4463 return true;
4464}
4465
4466bool PostFreeDescriptorSets(
4467 VkDevice device,
4468 VkDescriptorPool descriptorPool,
4469 uint32_t count,
4470 VkResult result)
4471{
4472
4473
4474
4475 if(result < VK_SUCCESS)
4476 {
4477 std::string reason = "vkFreeDescriptorSets parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004478 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004479 return false;
4480 }
4481
4482 return true;
4483}
4484
Chia-I Wu9ab61502015-11-06 06:42:02 +08004485VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkFreeDescriptorSets(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004486 VkDevice device,
4487 VkDescriptorPool descriptorPool,
4488 uint32_t count,
4489 const VkDescriptorSet* pDescriptorSets)
4490{
4491 PreFreeDescriptorSets(device, pDescriptorSets);
4492
4493 VkResult result = get_dispatch_table(pc_device_table_map, device)->FreeDescriptorSets(device, descriptorPool, count, pDescriptorSets);
4494
4495 PostFreeDescriptorSets(device, descriptorPool, count, result);
4496
4497 return result;
4498}
4499
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004500bool PreUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004501 VkDevice device,
4502 const VkWriteDescriptorSet* pDescriptorWrites,
4503 const VkCopyDescriptorSet* pDescriptorCopies)
4504{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004505 if(pDescriptorWrites != nullptr)
4506 {
4507 if(pDescriptorWrites->sType != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004508 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004509 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004510 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorWrites->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004511 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004512 }
4513 if(pDescriptorWrites->descriptorType < VK_DESCRIPTOR_TYPE_BEGIN_RANGE ||
4514 pDescriptorWrites->descriptorType > VK_DESCRIPTOR_TYPE_END_RANGE)
4515 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004516 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004517 "vkUpdateDescriptorSets parameter, VkDescriptorType pDescriptorWrites->descriptorType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004518 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004519 }
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004520 /* TODO: Validate other parts of pImageInfo, pBufferInfo, pTexelBufferView? */
4521 /* TODO: This test should probably only be done if descriptorType is correct type of descriptor */
4522 if(pDescriptorWrites->pImageInfo != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004523 {
Courtney Goeltzenleuchter4cb6d922015-10-23 13:38:14 -06004524 if(pDescriptorWrites->pImageInfo->imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4525 pDescriptorWrites->pImageInfo->imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004526 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004527 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004528 "vkUpdateDescriptorSets parameter, VkImageLayout pDescriptorWrites->pDescriptors->imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004529 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004530 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004531 }
4532 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004533
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004534 if(pDescriptorCopies != nullptr)
4535 {
4536 if(pDescriptorCopies->sType != VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004537 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004538 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004539 "vkUpdateDescriptorSets parameter, VkStructureType pDescriptorCopies->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004540 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004541 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004542 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004543
4544 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004545}
4546
Chia-I Wu9ab61502015-11-06 06:42:02 +08004547VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkUpdateDescriptorSets(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004548 VkDevice device,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004549 uint32_t descriptorWriteCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004550 const VkWriteDescriptorSet* pDescriptorWrites,
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004551 uint32_t descriptorCopyCount,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004552 const VkCopyDescriptorSet* pDescriptorCopies)
4553{
4554 PreUpdateDescriptorSets(device, pDescriptorWrites, pDescriptorCopies);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004555
Chia-I Wu40cf0ae2015-10-26 17:20:32 +08004556 get_dispatch_table(pc_device_table_map, device)->UpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004557}
4558
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004559bool PreCreateFramebuffer(
4560 VkDevice device,
4561 const VkFramebufferCreateInfo* pCreateInfo)
4562{
4563 if(pCreateInfo != nullptr)
4564 {
4565 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO)
4566 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004567 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004568 "vkCreateFramebuffer parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4569 return false;
4570 }
4571 if(pCreateInfo->pAttachments != nullptr)
4572 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004573 }
4574 }
4575
4576 return true;
4577}
4578
4579bool PostCreateFramebuffer(
4580 VkDevice device,
4581 VkFramebuffer* pFramebuffer,
4582 VkResult result)
4583{
4584
4585 if(pFramebuffer != nullptr)
4586 {
4587 }
4588
4589 if(result < VK_SUCCESS)
4590 {
4591 std::string reason = "vkCreateFramebuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004592 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004593 return false;
4594 }
4595
4596 return true;
4597}
4598
Chia-I Wu9ab61502015-11-06 06:42:02 +08004599VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateFramebuffer(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004600 VkDevice device,
4601 const VkFramebufferCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004602 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004603 VkFramebuffer* pFramebuffer)
4604{
4605 PreCreateFramebuffer(device, pCreateInfo);
4606
Chia-I Wuf7458c52015-10-26 21:10:41 +08004607 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004608
4609 PostCreateFramebuffer(device, pFramebuffer, result);
4610
4611 return result;
4612}
4613
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004614bool PreCreateRenderPass(
4615 VkDevice device,
4616 const VkRenderPassCreateInfo* pCreateInfo)
4617{
4618 if(pCreateInfo != nullptr)
4619 {
4620 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
4621 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004622 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004623 "vkCreateRenderPass parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4624 return false;
4625 }
4626 if(pCreateInfo->pAttachments != nullptr)
4627 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004628 if(pCreateInfo->pAttachments->format < VK_FORMAT_BEGIN_RANGE ||
4629 pCreateInfo->pAttachments->format > VK_FORMAT_END_RANGE)
4630 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004631 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004632 "vkCreateRenderPass parameter, VkFormat pCreateInfo->pAttachments->format, is an unrecognized enumerator");
4633 return false;
4634 }
4635 if(pCreateInfo->pAttachments->loadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4636 pCreateInfo->pAttachments->loadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4637 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004638 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004639 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->loadOp, is an unrecognized enumerator");
4640 return false;
4641 }
4642 if(pCreateInfo->pAttachments->storeOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4643 pCreateInfo->pAttachments->storeOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4644 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004645 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004646 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->storeOp, is an unrecognized enumerator");
4647 return false;
4648 }
4649 if(pCreateInfo->pAttachments->stencilLoadOp < VK_ATTACHMENT_LOAD_OP_BEGIN_RANGE ||
4650 pCreateInfo->pAttachments->stencilLoadOp > VK_ATTACHMENT_LOAD_OP_END_RANGE)
4651 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004652 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004653 "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pAttachments->stencilLoadOp, is an unrecognized enumerator");
4654 return false;
4655 }
4656 if(pCreateInfo->pAttachments->stencilStoreOp < VK_ATTACHMENT_STORE_OP_BEGIN_RANGE ||
4657 pCreateInfo->pAttachments->stencilStoreOp > VK_ATTACHMENT_STORE_OP_END_RANGE)
4658 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004659 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004660 "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pAttachments->stencilStoreOp, is an unrecognized enumerator");
4661 return false;
4662 }
4663 if(pCreateInfo->pAttachments->initialLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4664 pCreateInfo->pAttachments->initialLayout > VK_IMAGE_LAYOUT_END_RANGE)
4665 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004666 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004667 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->initialLayout, is an unrecognized enumerator");
4668 return false;
4669 }
4670 if(pCreateInfo->pAttachments->finalLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4671 pCreateInfo->pAttachments->finalLayout > VK_IMAGE_LAYOUT_END_RANGE)
4672 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004673 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004674 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pAttachments->finalLayout, is an unrecognized enumerator");
4675 return false;
4676 }
4677 }
4678 if(pCreateInfo->pSubpasses != nullptr)
4679 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004680 if(pCreateInfo->pSubpasses->pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
4681 pCreateInfo->pSubpasses->pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
4682 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004683 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004684 "vkCreateRenderPass parameter, VkPipelineBindPoint pCreateInfo->pSubpasses->pipelineBindPoint, is an unrecognized enumerator");
4685 return false;
4686 }
Cody Northropa505dda2015-08-04 11:16:41 -06004687 if(pCreateInfo->pSubpasses->pInputAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004688 {
Cody Northropa505dda2015-08-04 11:16:41 -06004689 if(pCreateInfo->pSubpasses->pInputAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4690 pCreateInfo->pSubpasses->pInputAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004691 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004692 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004693 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pInputAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004694 return false;
4695 }
4696 }
Cody Northropa505dda2015-08-04 11:16:41 -06004697 if(pCreateInfo->pSubpasses->pColorAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004698 {
Cody Northropa505dda2015-08-04 11:16:41 -06004699 if(pCreateInfo->pSubpasses->pColorAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4700 pCreateInfo->pSubpasses->pColorAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004701 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004702 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004703 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pColorAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004704 return false;
4705 }
4706 }
Cody Northropa505dda2015-08-04 11:16:41 -06004707 if(pCreateInfo->pSubpasses->pResolveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004708 {
Cody Northropa505dda2015-08-04 11:16:41 -06004709 if(pCreateInfo->pSubpasses->pResolveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4710 pCreateInfo->pSubpasses->pResolveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004711 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004712 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004713 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pResolveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004714 return false;
4715 }
4716 }
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004717 if(pCreateInfo->pSubpasses->pDepthStencilAttachment &&
4718 (pCreateInfo->pSubpasses->pDepthStencilAttachment->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4719 pCreateInfo->pSubpasses->pDepthStencilAttachment->layout > VK_IMAGE_LAYOUT_END_RANGE))
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004720 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004721 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1efb7e52015-10-26 17:32:47 +08004722 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pDepthStencilAttachment->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004723 return false;
4724 }
Cody Northropa505dda2015-08-04 11:16:41 -06004725 if(pCreateInfo->pSubpasses->pPreserveAttachments != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004726 {
Cody Northropa505dda2015-08-04 11:16:41 -06004727 if(pCreateInfo->pSubpasses->pPreserveAttachments->layout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
4728 pCreateInfo->pSubpasses->pPreserveAttachments->layout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004729 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004730 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Cody Northropa505dda2015-08-04 11:16:41 -06004731 "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pSubpasses->pPreserveAttachments->layout, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004732 return false;
4733 }
4734 }
4735 }
4736 if(pCreateInfo->pDependencies != nullptr)
4737 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004738 }
4739 }
4740
4741 return true;
4742}
4743
4744bool PostCreateRenderPass(
4745 VkDevice device,
4746 VkRenderPass* pRenderPass,
4747 VkResult result)
4748{
4749
4750 if(pRenderPass != nullptr)
4751 {
4752 }
4753
4754 if(result < VK_SUCCESS)
4755 {
4756 std::string reason = "vkCreateRenderPass parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004757 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004758 return false;
4759 }
4760
4761 return true;
4762}
4763
Chia-I Wu9ab61502015-11-06 06:42:02 +08004764VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateRenderPass(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004765 VkDevice device,
4766 const VkRenderPassCreateInfo* pCreateInfo,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004767 const VkAllocationCallbacks* pAllocator,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004768 VkRenderPass* pRenderPass)
4769{
4770 PreCreateRenderPass(device, pCreateInfo);
4771
Chia-I Wuf7458c52015-10-26 21:10:41 +08004772 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateRenderPass(device, pCreateInfo, pAllocator, pRenderPass);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004773
4774 PostCreateRenderPass(device, pRenderPass, result);
4775
4776 return result;
4777}
4778
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004779bool PostGetRenderAreaGranularity(
4780 VkDevice device,
4781 VkRenderPass renderPass,
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004782 VkExtent2D* pGranularity)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004783{
4784
4785
4786 if(pGranularity != nullptr)
4787 {
4788 }
4789
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004790 return true;
4791}
4792
Chia-I Wu9ab61502015-11-06 06:42:02 +08004793VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetRenderAreaGranularity(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004794 VkDevice device,
4795 VkRenderPass renderPass,
4796 VkExtent2D* pGranularity)
4797{
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004798 get_dispatch_table(pc_device_table_map, device)->GetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004799
Courtney Goeltzenleuchter06d89472015-10-20 16:40:38 -06004800 PostGetRenderAreaGranularity(device, renderPass, pGranularity);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004801}
4802
4803bool PreCreateCommandPool(
4804 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004805 const VkCommandPoolCreateInfo* pCreateInfo)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004806{
4807 if(pCreateInfo != nullptr)
4808 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004809 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004810 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004811 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004812 "vkCreateCommandPool parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
4813 return false;
4814 }
4815 }
4816
4817 return true;
4818}
4819
4820bool PostCreateCommandPool(
4821 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004822 VkCommandPool* pCommandPool,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004823 VkResult result)
4824{
4825
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004826 if(pCommandPool != nullptr)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004827 {
4828 }
4829
4830 if(result < VK_SUCCESS)
4831 {
4832 std::string reason = "vkCreateCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004833 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004834 return false;
4835 }
4836
4837 return true;
4838}
4839
Chia-I Wu9ab61502015-11-06 06:42:02 +08004840VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkCreateCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004841 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004842 const VkCommandPoolCreateInfo* pCreateInfo,
4843 const VkAllocationCallbacks* pAllocator,
4844 VkCommandPool* pCommandPool)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004845{
4846 PreCreateCommandPool(device, pCreateInfo);
4847
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004848 VkResult result = get_dispatch_table(pc_device_table_map, device)->CreateCommandPool(device, pCreateInfo, pAllocator, pCommandPool);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004849
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004850 PostCreateCommandPool(device, pCommandPool, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004851
4852 return result;
4853}
4854
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004855bool PostResetCommandPool(
4856 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004857 VkCommandPool commandPool,
4858 VkCommandPoolResetFlags flags,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004859 VkResult result)
4860{
4861
4862
4863
4864 if(result < VK_SUCCESS)
4865 {
4866 std::string reason = "vkResetCommandPool parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004867 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004868 return false;
4869 }
4870
4871 return true;
4872}
4873
Chia-I Wu9ab61502015-11-06 06:42:02 +08004874VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandPool(
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004875 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004876 VkCommandPool commandPool,
4877 VkCommandPoolResetFlags flags)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004878{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004879 VkResult result = get_dispatch_table(pc_device_table_map, device)->ResetCommandPool(device, commandPool, flags);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004880
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004881 PostResetCommandPool(device, commandPool, flags, result);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004882
4883 return result;
4884}
4885
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004886bool PreCreateCommandBuffer(
4887 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004888 const VkCommandBufferAllocateInfo* pCreateInfo)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004889{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004890 if(pCreateInfo != nullptr)
4891 {
Chia-I Wu00ce5402015-11-10 16:21:09 +08004892 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004893 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004894 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004895 "vkAllocateCommandBuffers parameter, VkStructureType pCreateInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004896 return false;
4897 }
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004898 if(pCreateInfo->level < VK_COMMAND_BUFFER_LEVEL_BEGIN_RANGE ||
4899 pCreateInfo->level > VK_COMMAND_BUFFER_LEVEL_END_RANGE)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004900 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004901 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004902 "vkAllocateCommandBuffers parameter, VkCommandBufferLevel pCreateInfo->level, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004903 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004904 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004905 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004906
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004907 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004908}
4909
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004910bool PostCreateCommandBuffer(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004911 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004912 VkCommandBuffer* pCommandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004913 VkResult result)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004914{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004915
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004916 if(pCommandBuffer != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004917 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06004918 }
4919
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004920 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004921 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004922 std::string reason = "vkAllocateCommandBuffers parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004923 log_msg(mdd(device), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004924 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004925 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004926
4927 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004928}
4929
Chia-I Wu9ab61502015-11-06 06:42:02 +08004930VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkAllocateCommandBuffers(
Jeremy Hayes99a96322015-06-26 12:48:09 -06004931 VkDevice device,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004932 const VkCommandBufferAllocateInfo* pCreateInfo,
4933 VkCommandBuffer* pCommandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004934{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004935 PreCreateCommandBuffer(device, pCreateInfo);
4936
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004937 VkResult result = get_dispatch_table(pc_device_table_map, device)->AllocateCommandBuffers(device, pCreateInfo, pCommandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004938
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004939 PostCreateCommandBuffer(device, pCommandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004940
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004941 return result;
4942}
4943
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004944bool PreBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004945 VkCommandBuffer commandBuffer,
4946 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004947{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004948 if(pBeginInfo != nullptr)
4949 {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004950 if(pBeginInfo->sType != VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004951 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004952 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004953 "vkBeginCommandBuffer parameter, VkStructureType pBeginInfo->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004954 return false;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004955 }
Jeremy Hayes99a96322015-06-26 12:48:09 -06004956 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004957
4958 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004959}
4960
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004961bool PostBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004962 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004963 VkResult result)
4964{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004965
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004966 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004967 {
4968 std::string reason = "vkBeginCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004969 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004970 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004971 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004972
4973 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004974}
4975
Chia-I Wu9ab61502015-11-06 06:42:02 +08004976VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkBeginCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004977 VkCommandBuffer commandBuffer,
4978 const VkCommandBufferBeginInfo* pBeginInfo)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004979{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004980 PreBeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004981
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004982 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->BeginCommandBuffer(commandBuffer, pBeginInfo);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004983
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004984 PostBeginCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06004985
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06004986 return result;
4987}
4988
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004989bool PostEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08004990 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06004991 VkResult result)
4992{
Jeremy Hayes99a96322015-06-26 12:48:09 -06004993
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06004994 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06004995 {
4996 std::string reason = "vkEndCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07004997 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06004998 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06004999 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005000
5001 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005002}
5003
Chia-I Wu9ab61502015-11-06 06:42:02 +08005004VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkEndCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005005 VkCommandBuffer commandBuffer)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005006{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005007 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->EndCommandBuffer(commandBuffer);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005008
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005009 PostEndCommandBuffer(commandBuffer, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005010
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005011 return result;
5012}
5013
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005014bool PostResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005015 VkCommandBuffer commandBuffer,
5016 VkCommandBufferResetFlags flags,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005017 VkResult result)
5018{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005019
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005020
5021 if(result < VK_SUCCESS)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005022 {
5023 std::string reason = "vkResetCommandBuffer parameter, VkResult result, is " + EnumeratorString(result);
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005024 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK", "%s", reason.c_str());
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005025 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005026 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005027
5028 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005029}
5030
Chia-I Wu9ab61502015-11-06 06:42:02 +08005031VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkResetCommandBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005032 VkCommandBuffer commandBuffer,
5033 VkCommandBufferResetFlags flags)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005034{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005035 VkResult result = get_dispatch_table(pc_device_table_map, commandBuffer)->ResetCommandBuffer(commandBuffer, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005036
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005037 PostResetCommandBuffer(commandBuffer, flags, result);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005038
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005039 return result;
5040}
5041
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005042bool PostCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005043 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005044 VkPipelineBindPoint pipelineBindPoint,
5045 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005046{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005047
5048 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5049 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5050 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005051 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005052 "vkCmdBindPipeline parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005053 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005054 }
5055
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005056
5057 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005058}
5059
Chia-I Wu9ab61502015-11-06 06:42:02 +08005060VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindPipeline(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005061 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005062 VkPipelineBindPoint pipelineBindPoint,
5063 VkPipeline pipeline)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005064{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005065 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005066
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005067 PostCmdBindPipeline(commandBuffer, pipelineBindPoint, pipeline);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005068}
5069
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005070VK_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 -06005071{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005072 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetViewport(commandBuffer, firstViewport, viewportCount, pViewports);
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06005073}
5074
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005075VK_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 -06005076{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005077 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetScissor(commandBuffer, firstScissor, scissorCount, pScissors);
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 vkCmdSetLineWidth(VkCommandBuffer commandBuffer, float lineWidth)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005081{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005082 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetLineWidth(commandBuffer, lineWidth);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005083}
5084
Chia-I Wu9ab61502015-11-06 06:42:02 +08005085VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBias(VkCommandBuffer commandBuffer, float depthBiasConstantFactor, float depthBiasClamp, float depthBiasSlopeFactor)
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)->CmdSetDepthBias(commandBuffer, depthBiasConstantFactor, depthBiasClamp, depthBiasSlopeFactor);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005088}
5089
Chia-I Wu9ab61502015-11-06 06:42:02 +08005090VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetBlendConstants(VkCommandBuffer commandBuffer, const float blendConstants[4])
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005091{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005092 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetBlendConstants(commandBuffer, blendConstants);
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 vkCmdSetDepthBounds(VkCommandBuffer commandBuffer, float minDepthBounds, float maxDepthBounds)
Cody Northrop12365112015-08-17 11:10:49 -06005096{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005097 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetDepthBounds(commandBuffer, minDepthBounds, maxDepthBounds);
Cody Northrop12365112015-08-17 11:10:49 -06005098}
5099
Chia-I Wu9ab61502015-11-06 06:42:02 +08005100VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilCompareMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t compareMask)
Cody Northrop12365112015-08-17 11:10:49 -06005101{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005102 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilCompareMask(commandBuffer, faceMask, compareMask);
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 vkCmdSetStencilWriteMask(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t writeMask)
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)->CmdSetStencilWriteMask(commandBuffer, faceMask, writeMask);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005108}
5109
Chia-I Wu9ab61502015-11-06 06:42:02 +08005110VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilReference(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, uint32_t reference)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005111{
Chia-I Wu1b99bb22015-10-27 19:25:11 +08005112 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetStencilReference(commandBuffer, faceMask, reference);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005113}
5114
5115bool PreCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005116 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005117 const VkDescriptorSet* pDescriptorSets,
5118 const uint32_t* pDynamicOffsets)
5119{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005120 if(pDescriptorSets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005121 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005122 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005123
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005124 if(pDynamicOffsets != nullptr)
5125 {
5126 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005127
5128 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005129}
5130
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005131bool PostCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005132 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005133 VkPipelineBindPoint pipelineBindPoint,
5134 VkPipelineLayout layout,
5135 uint32_t firstSet,
5136 uint32_t setCount,
5137 uint32_t dynamicOffsetCount)
5138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005139
5140 if(pipelineBindPoint < VK_PIPELINE_BIND_POINT_BEGIN_RANGE ||
5141 pipelineBindPoint > VK_PIPELINE_BIND_POINT_END_RANGE)
5142 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005143 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005144 "vkCmdBindDescriptorSets parameter, VkPipelineBindPoint pipelineBindPoint, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005145 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005146 }
5147
5148
5149
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005150
5151
5152 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005153}
5154
Chia-I Wu9ab61502015-11-06 06:42:02 +08005155VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindDescriptorSets(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005156 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005157 VkPipelineBindPoint pipelineBindPoint,
5158 VkPipelineLayout layout,
5159 uint32_t firstSet,
5160 uint32_t setCount,
5161 const VkDescriptorSet* pDescriptorSets,
5162 uint32_t dynamicOffsetCount,
5163 const uint32_t* pDynamicOffsets)
5164{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005165 PreCmdBindDescriptorSets(commandBuffer, pDescriptorSets, pDynamicOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005166
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005167 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005168
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005169 PostCmdBindDescriptorSets(commandBuffer, pipelineBindPoint, layout, firstSet, setCount, dynamicOffsetCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005170}
5171
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005172bool PostCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005173 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005174 VkBuffer buffer,
5175 VkDeviceSize offset,
5176 VkIndexType indexType)
5177{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005178
Jeremy Hayes99a96322015-06-26 12:48:09 -06005179
5180
5181 if(indexType < VK_INDEX_TYPE_BEGIN_RANGE ||
5182 indexType > VK_INDEX_TYPE_END_RANGE)
5183 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005184 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005185 "vkCmdBindIndexBuffer parameter, VkIndexType indexType, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005186 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005187 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005188
5189 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005190}
5191
Chia-I Wu9ab61502015-11-06 06:42:02 +08005192VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindIndexBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005193 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005194 VkBuffer buffer,
5195 VkDeviceSize offset,
5196 VkIndexType indexType)
5197{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005198 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005199
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005200 PostCmdBindIndexBuffer(commandBuffer, buffer, offset, indexType);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005201}
5202
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005203bool PreCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005204 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005205 const VkBuffer* pBuffers,
5206 const VkDeviceSize* pOffsets)
5207{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005208 if(pBuffers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005209 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005210 }
5211
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005212 if(pOffsets != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005213 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005214 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005215
5216 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005217}
5218
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005219bool PostCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005220 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005221 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005222 uint32_t bindingCount)
5223{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005224
5225
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005226
5227 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005228}
5229
Chia-I Wu9ab61502015-11-06 06:42:02 +08005230VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005231 VkCommandBuffer commandBuffer,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005232 uint32_t firstBinding,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005233 uint32_t bindingCount,
5234 const VkBuffer* pBuffers,
5235 const VkDeviceSize* pOffsets)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005236{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005237 PreCmdBindVertexBuffers(commandBuffer, pBuffers, pOffsets);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005238
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005239 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005240
Jon Ashburn19d3bf12015-12-30 14:06:55 -07005241 PostCmdBindVertexBuffers(commandBuffer, firstBinding, bindingCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005242}
5243
Michael Lentine55a913f2015-11-24 09:48:23 -06005244bool PreCmdDraw(
5245 VkCommandBuffer commandBuffer,
5246 uint32_t vertexCount,
5247 uint32_t instanceCount,
5248 uint32_t firstVertex,
5249 uint32_t firstInstance)
5250{
5251 if (vertexCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005252 // TODO: Verify against Valid Usage section. I don't see a non-zero vertexCount listed, may need to add that and make
5253 // this an error or leave as is.
5254 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005255 "vkCmdDraw parameter, uint32_t vertexCount, is 0");
5256 return false;
5257 }
5258
5259 if (instanceCount == 0) {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005260 // TODO: Verify against Valid Usage section. I don't see a non-zero instanceCount listed, may need to add that and make
5261 // this an error or leave as is.
5262 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_WARN_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Michael Lentine55a913f2015-11-24 09:48:23 -06005263 "vkCmdDraw parameter, uint32_t instanceCount, is 0");
5264 return false;
5265 }
5266
5267 return true;
5268}
5269
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005270bool PostCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005271 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005272 uint32_t firstVertex,
5273 uint32_t vertexCount,
5274 uint32_t firstInstance,
5275 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005276{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005277
5278
5279
5280
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005281
5282 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005283}
5284
Chia-I Wu9ab61502015-11-06 06:42:02 +08005285VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDraw(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005286 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005287 uint32_t vertexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005288 uint32_t instanceCount,
5289 uint32_t firstVertex,
5290 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005291{
Michael Lentine55a913f2015-11-24 09:48:23 -06005292 PreCmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
5293
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005294 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDraw(commandBuffer, vertexCount, instanceCount, firstVertex, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005295
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005296 PostCmdDraw(commandBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005297}
5298
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005299bool PostCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005300 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005301 uint32_t firstIndex,
5302 uint32_t indexCount,
5303 int32_t vertexOffset,
5304 uint32_t firstInstance,
5305 uint32_t instanceCount)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005306{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005307
5308
5309
5310
5311
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005312
5313 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005314}
5315
Chia-I Wu9ab61502015-11-06 06:42:02 +08005316VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexed(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005317 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005318 uint32_t indexCount,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005319 uint32_t instanceCount,
5320 uint32_t firstIndex,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005321 int32_t vertexOffset,
Courtney Goeltzenleuchter08c26372015-09-23 12:31:50 -06005322 uint32_t firstInstance)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005323{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005324 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexed(commandBuffer, indexCount, instanceCount, firstIndex, vertexOffset, firstInstance);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005325
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005326 PostCmdDrawIndexed(commandBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005327}
5328
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005329bool PostCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005330 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005331 VkBuffer buffer,
5332 VkDeviceSize offset,
5333 uint32_t count,
5334 uint32_t stride)
5335{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005336
5337
5338
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005339
5340
5341 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005342}
5343
Chia-I Wu9ab61502015-11-06 06:42:02 +08005344VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005345 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005346 VkBuffer buffer,
5347 VkDeviceSize offset,
5348 uint32_t count,
5349 uint32_t stride)
5350{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005351 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005352
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005353 PostCmdDrawIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005354}
5355
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005356bool PostCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005357 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005358 VkBuffer buffer,
5359 VkDeviceSize offset,
5360 uint32_t count,
5361 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005362{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005363
5364
5365
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005366
5367
5368 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005369}
5370
Chia-I Wu9ab61502015-11-06 06:42:02 +08005371VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDrawIndexedIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005372 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005373 VkBuffer buffer,
5374 VkDeviceSize offset,
5375 uint32_t count,
5376 uint32_t stride)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005377{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005378 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005379
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005380 PostCmdDrawIndexedIndirect(commandBuffer, buffer, offset, count, stride);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005381}
5382
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005383bool PostCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005384 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005385 uint32_t x,
5386 uint32_t y,
5387 uint32_t z)
5388{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005389
5390
5391
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005392
5393 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005394}
5395
Chia-I Wu9ab61502015-11-06 06:42:02 +08005396VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatch(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005397 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005398 uint32_t x,
5399 uint32_t y,
5400 uint32_t z)
5401{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005402 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005403
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005404 PostCmdDispatch(commandBuffer, x, y, z);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005405}
5406
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005407bool PostCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005408 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005409 VkBuffer buffer,
5410 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005411{
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005412
Jeremy Hayes99a96322015-06-26 12:48:09 -06005413
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005414
5415 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005416}
5417
Chia-I Wu9ab61502015-11-06 06:42:02 +08005418VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdDispatchIndirect(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005419 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005420 VkBuffer buffer,
5421 VkDeviceSize offset)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005422{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005423 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005424
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005425 PostCmdDispatchIndirect(commandBuffer, buffer, offset);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005426}
5427
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005428bool PreCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005429 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005430 const VkBufferCopy* pRegions)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06005431{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005432 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005433 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005434 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005435
5436 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005437}
5438
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005439bool PostCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005440 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005441 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005442 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005443 uint32_t regionCount)
5444{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005445
Jeremy Hayes99a96322015-06-26 12:48:09 -06005446
Jeremy Hayes99a96322015-06-26 12:48:09 -06005447
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005448
5449 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005450}
5451
Chia-I Wu9ab61502015-11-06 06:42:02 +08005452VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005453 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005454 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005455 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005456 uint32_t regionCount,
5457 const VkBufferCopy* pRegions)
5458{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005459 PreCmdCopyBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005460
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005461 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005462
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005463 PostCmdCopyBuffer(commandBuffer, srcBuffer, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005464}
5465
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005466bool PreCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005467 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005468 const VkImageCopy* pRegions)
5469{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005470 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005471 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005472 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005473 (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 -06005474 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005475 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005476 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005477 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005478 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005479 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005480 (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 -06005481 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005482 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005483 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005484 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005485 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005486 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005487
5488 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005489}
5490
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005491bool PostCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005492 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005493 VkImage srcImage,
5494 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005495 VkImage dstImage,
5496 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005497 uint32_t regionCount)
5498{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005499
Jeremy Hayes99a96322015-06-26 12:48:09 -06005500
5501 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5502 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5503 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005504 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005505 "vkCmdCopyImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005506 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005507 }
5508
Jeremy Hayes99a96322015-06-26 12:48:09 -06005509
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005510 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5511 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005512 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005513 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005514 "vkCmdCopyImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005515 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005516 }
5517
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005518
5519 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005520}
5521
Chia-I Wu9ab61502015-11-06 06:42:02 +08005522VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005523 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005524 VkImage srcImage,
5525 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005526 VkImage dstImage,
5527 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005528 uint32_t regionCount,
5529 const VkImageCopy* pRegions)
5530{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005531 PreCmdCopyImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005532
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005533 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005534
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005535 PostCmdCopyImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005536}
5537
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005538bool PreCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005539 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005540 const VkImageBlit* pRegions)
5541{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005542 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005543 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005544 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005545 (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 -06005546 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005547 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005548 "vkCmdCopyImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005549 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005550 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005551 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005552 (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 -06005553 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005554 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005555 "vkCmdCopyImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005556 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005557 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005558 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005559
5560 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005561}
5562
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005563bool PostCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005564 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005565 VkImage srcImage,
5566 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005567 VkImage dstImage,
5568 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005569 uint32_t regionCount,
Chia-I Wub99df442015-10-26 16:49:32 +08005570 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005571{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005572
Jeremy Hayes99a96322015-06-26 12:48:09 -06005573
5574 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5575 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5576 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005577 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005578 "vkCmdBlitImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005579 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005580 }
5581
Jeremy Hayes99a96322015-06-26 12:48:09 -06005582
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005583 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5584 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005585 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005586 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005587 "vkCmdBlitImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005588 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005589 }
5590
5591
Chia-I Wub99df442015-10-26 16:49:32 +08005592 if(filter < VK_FILTER_BEGIN_RANGE ||
5593 filter > VK_FILTER_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005594 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005595 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wub99df442015-10-26 16:49:32 +08005596 "vkCmdBlitImage parameter, VkFilter filter, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005597 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005598 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005599
5600 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005601}
5602
Chia-I Wu9ab61502015-11-06 06:42:02 +08005603VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005604 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005605 VkImage srcImage,
5606 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005607 VkImage dstImage,
5608 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005609 uint32_t regionCount,
5610 const VkImageBlit* pRegions,
Chia-I Wub99df442015-10-26 16:49:32 +08005611 VkFilter filter)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005612{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005613 PreCmdBlitImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005614
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005615 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005616
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005617 PostCmdBlitImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, filter);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005618}
5619
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005620bool PreCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005621 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005622 const VkBufferImageCopy* pRegions)
5623{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005624 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005625 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005626 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005627 (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 -06005628 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005629 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005630 "vkCmdCopyBufferToImage parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005631 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005632 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005633 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005634
5635 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005636}
5637
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005638bool PostCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005639 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005640 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005641 VkImage dstImage,
5642 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005643 uint32_t regionCount)
5644{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005645
Jeremy Hayes99a96322015-06-26 12:48:09 -06005646
Jeremy Hayes99a96322015-06-26 12:48:09 -06005647
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005648 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5649 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005650 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005651 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005652 "vkCmdCopyBufferToImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005653 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005654 }
5655
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005656
5657 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005658}
5659
Chia-I Wu9ab61502015-11-06 06:42:02 +08005660VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005661 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005662 VkBuffer srcBuffer,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005663 VkImage dstImage,
5664 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005665 uint32_t regionCount,
5666 const VkBufferImageCopy* pRegions)
5667{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005668 PreCmdCopyBufferToImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005669
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005670 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005671
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005672 PostCmdCopyBufferToImage(commandBuffer, srcBuffer, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005673}
5674
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005675bool PreCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005676 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005677 const VkBufferImageCopy* pRegions)
5678{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005679 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005680 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005681 if ((pRegions->imageSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005682 (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 -06005683 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005684 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005685 "vkCmdCopyImageToBuffer parameter, VkImageAspect pRegions->imageSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005686 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005687 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005688 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005689
5690 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005691}
5692
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005693bool PostCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005694 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005695 VkImage srcImage,
5696 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005697 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005698 uint32_t regionCount)
5699{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005700
Jeremy Hayes99a96322015-06-26 12:48:09 -06005701
5702 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5703 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5704 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005705 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005706 "vkCmdCopyImageToBuffer parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005707 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005708 }
5709
Jeremy Hayes99a96322015-06-26 12:48:09 -06005710
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005711
5712 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005713}
5714
Chia-I Wu9ab61502015-11-06 06:42:02 +08005715VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005716 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005717 VkImage srcImage,
5718 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005719 VkBuffer dstBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005720 uint32_t regionCount,
5721 const VkBufferImageCopy* pRegions)
5722{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005723 PreCmdCopyImageToBuffer(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005724
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005725 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005726
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005727 PostCmdCopyImageToBuffer(commandBuffer, srcImage, srcImageLayout, dstBuffer, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005728}
5729
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005730bool PreCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005731 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005732 const uint32_t* pData)
5733{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005734 if(pData != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005735 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005736 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005737
5738 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005739}
5740
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005741bool PostCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005742 VkCommandBuffer commandBuffer,
5743 VkBuffer dstBuffer,
5744 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005745 VkDeviceSize dataSize)
5746{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005747
5748
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005749
5750
5751 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005752}
5753
Chia-I Wu9ab61502015-11-06 06:42:02 +08005754VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdUpdateBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005755 VkCommandBuffer commandBuffer,
5756 VkBuffer dstBuffer,
5757 VkDeviceSize dstOffset,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005758 VkDeviceSize dataSize,
5759 const uint32_t* pData)
5760{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005761 PreCmdUpdateBuffer(commandBuffer, pData);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005762
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005763 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize, pData);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005764
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005765 PostCmdUpdateBuffer(commandBuffer, dstBuffer, dstOffset, dataSize);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005766}
5767
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005768bool PostCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005769 VkCommandBuffer commandBuffer,
5770 VkBuffer dstBuffer,
5771 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005772 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005773 uint32_t data)
5774{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005775
5776
5777
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005778
5779
5780 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005781}
5782
Chia-I Wu9ab61502015-11-06 06:42:02 +08005783VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdFillBuffer(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005784 VkCommandBuffer commandBuffer,
5785 VkBuffer dstBuffer,
5786 VkDeviceSize dstOffset,
Chia-I Wu2bfb33c2015-10-26 17:24:52 +08005787 VkDeviceSize size,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005788 uint32_t data)
5789{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005790 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005791
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005792 PostCmdFillBuffer(commandBuffer, dstBuffer, dstOffset, size, data);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005793}
5794
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005795bool PreCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005796 VkCommandBuffer commandBuffer,
Chris Forbesf0796e12015-06-24 14:34:53 +12005797 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005798 const VkImageSubresourceRange* pRanges)
5799{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005800 if(pColor != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005801 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06005802 }
5803
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005804 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005805 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005806 /* TODO: How should we validate pRanges->aspectMask */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005807 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005808
5809 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005810}
5811
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005812bool PostCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005813 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005814 VkImage image,
5815 VkImageLayout imageLayout,
5816 uint32_t rangeCount)
5817{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005818
Jeremy Hayes99a96322015-06-26 12:48:09 -06005819
5820 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5821 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5822 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005823 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005824 "vkCmdClearColorImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005825 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005826 }
5827
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005828
5829 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005830}
5831
Chia-I Wu9ab61502015-11-06 06:42:02 +08005832VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearColorImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005833 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005834 VkImage image,
5835 VkImageLayout imageLayout,
Chris Forbesf0796e12015-06-24 14:34:53 +12005836 const VkClearColorValue* pColor,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005837 uint32_t rangeCount,
5838 const VkImageSubresourceRange* pRanges)
5839{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005840 PreCmdClearColorImage(commandBuffer, pColor, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005841
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005842 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearColorImage(commandBuffer, image, imageLayout, pColor, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005843
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005844 PostCmdClearColorImage(commandBuffer, image, imageLayout, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005845}
5846
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005847bool PreCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005848 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005849 const VkImageSubresourceRange* pRanges)
5850{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005851 if(pRanges != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005852 {
Courtney Goeltzenleuchterba724512015-09-10 17:58:54 -06005853 /*
5854 * TODO: How do we validation pRanges->aspectMask?
5855 * Allows values are: VK_IMAGE_ASPECT_DEPTH_BIT and
5856 * VK_IMAGE_ASPECT_STENCIL_BIT.
5857 */
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005858 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005859
5860 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005861}
5862
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005863bool PostCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005864 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005865 VkImage image,
5866 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005867 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005868 uint32_t rangeCount)
5869{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005870
Jeremy Hayes99a96322015-06-26 12:48:09 -06005871
5872 if(imageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5873 imageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5874 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005875 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005876 "vkCmdClearDepthStencilImage parameter, VkImageLayout imageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005877 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005878 }
5879
5880
5881
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005882
5883 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005884}
5885
Chia-I Wu9ab61502015-11-06 06:42:02 +08005886VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearDepthStencilImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005887 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005888 VkImage image,
5889 VkImageLayout imageLayout,
Courtney Goeltzenleuchter45df9e12015-09-15 18:03:22 -06005890 const VkClearDepthStencilValue* pDepthStencil,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005891 uint32_t rangeCount,
5892 const VkImageSubresourceRange* pRanges)
5893{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005894 PreCmdClearDepthStencilImage(commandBuffer, pRanges);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005895
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005896 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount, pRanges);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005897
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005898 PostCmdClearDepthStencilImage(commandBuffer, image, imageLayout, pDepthStencil, rangeCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005899}
5900
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005901bool PreCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005902 VkCommandBuffer commandBuffer,
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005903 const VkClearColorValue* pColor,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005904 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005905{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005906 if(pColor != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005907 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005908 }
5909
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005910 if(pRects != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005911 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005912 }
5913
5914 return true;
5915}
5916
Chia-I Wu9ab61502015-11-06 06:42:02 +08005917VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdClearAttachments(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005918 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005919 uint32_t attachmentCount,
5920 const VkClearAttachment* pAttachments,
5921 uint32_t rectCount,
Courtney Goeltzenleuchter4ca43f62015-10-15 18:22:08 -06005922 const VkClearRect* pRects)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005923{
Courtney Goeltzenleuchterc9323e02015-10-15 16:51:05 -06005924 for (uint32_t i = 0; i < attachmentCount; i++) {
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005925 PreCmdClearAttachments(commandBuffer, &pAttachments[i].clearValue.color, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005926 }
5927
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005928 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdClearAttachments(commandBuffer, attachmentCount, pAttachments, rectCount, pRects);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005929}
5930
5931bool PreCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005932 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005933 const VkImageResolve* pRegions)
5934{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005935 if(pRegions != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005936 {
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005937 if ((pRegions->srcSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005938 (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 -06005939 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005940 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005941 "vkCmdResolveImage parameter, VkImageAspect pRegions->srcSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005942 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005943 }
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005944 if ((pRegions->dstSubresource.aspectMask &
Courtney Goeltzenleuchter908e7672015-10-21 17:00:51 -06005945 (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 -06005946 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005947 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wuab83a0e2015-10-27 19:00:15 +08005948 "vkCmdResolveImage parameter, VkImageAspect pRegions->dstSubresource.aspectMask, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005949 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005950 }
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005951 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005952
5953 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005954}
5955
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005956bool PostCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005957 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005958 VkImage srcImage,
5959 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005960 VkImage dstImage,
5961 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005962 uint32_t regionCount)
5963{
Jeremy Hayes99a96322015-06-26 12:48:09 -06005964
Jeremy Hayes99a96322015-06-26 12:48:09 -06005965
5966 if(srcImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5967 srcImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
5968 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005969 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06005970 "vkCmdResolveImage parameter, VkImageLayout srcImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005971 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005972 }
5973
Jeremy Hayes99a96322015-06-26 12:48:09 -06005974
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005975 if(dstImageLayout < VK_IMAGE_LAYOUT_BEGIN_RANGE ||
5976 dstImageLayout > VK_IMAGE_LAYOUT_END_RANGE)
Jeremy Hayes99a96322015-06-26 12:48:09 -06005977 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07005978 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005979 "vkCmdResolveImage parameter, VkImageLayout dstImageLayout, is an unrecognized enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005980 return false;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005981 }
5982
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005983
5984 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06005985}
5986
Chia-I Wu9ab61502015-11-06 06:42:02 +08005987VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005988 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005989 VkImage srcImage,
5990 VkImageLayout srcImageLayout,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005991 VkImage dstImage,
5992 VkImageLayout dstImageLayout,
Jeremy Hayes99a96322015-06-26 12:48:09 -06005993 uint32_t regionCount,
5994 const VkImageResolve* pRegions)
5995{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005996 PreCmdResolveImage(commandBuffer, pRegions);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06005997
Chia-I Wu3432a0c2015-10-27 18:04:07 +08005998 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions);
Jeremy Hayes99a96322015-06-26 12:48:09 -06005999
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006000 PostCmdResolveImage(commandBuffer, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006001}
6002
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006003bool PostCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006004 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006005 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006006 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006007{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006008
Jeremy Hayes99a96322015-06-26 12:48:09 -06006009
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006010
6011 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006012}
6013
Chia-I Wu9ab61502015-11-06 06:42:02 +08006014VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006015 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006016 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006017 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006018{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006019 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006020
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006021 PostCmdSetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006022}
6023
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006024bool PostCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006025 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006026 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006027 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006028{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006029
Jeremy Hayes99a96322015-06-26 12:48:09 -06006030
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006031
6032 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006033}
6034
Chia-I Wu9ab61502015-11-06 06:42:02 +08006035VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006036 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006037 VkEvent event,
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006038 VkPipelineStageFlags stageMask)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006039{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006040 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006041
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006042 PostCmdResetEvent(commandBuffer, event, stageMask);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006043}
6044
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006045bool PreCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006046 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006047 const VkEvent* pEvents,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006048 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006049{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006050 if(pEvents != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006051 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006052 }
6053
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006054 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006055 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006056 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006057
6058 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006059}
6060
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006061bool PostCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006062 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006063 uint32_t eventCount,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006064 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006065 VkPipelineStageFlags dstStageMask,
6066 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006067{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006068
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006069
Jeremy Hayes99a96322015-06-26 12:48:09 -06006070
6071
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006072
6073 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006074}
6075
Chia-I Wu9ab61502015-11-06 06:42:02 +08006076VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006077 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006078 uint32_t eventCount,
6079 const VkEvent* pEvents,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006080 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006081 VkPipelineStageFlags dstStageMask,
6082 uint32_t memoryBarrierCount,
6083 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006084{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006085 PreCmdWaitEvents(commandBuffer, pEvents, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006086
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006087 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWaitEvents(commandBuffer, eventCount, pEvents, srcStageMask, dstStageMask, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006088
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006089 PostCmdWaitEvents(commandBuffer, eventCount, srcStageMask, dstStageMask, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006090}
6091
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006092bool PreCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006093 VkCommandBuffer commandBuffer,
6094 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006095{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006096 if(ppMemoryBarriers != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006097 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006098 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006099
6100 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006101}
6102
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006103bool PostCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006104 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006105 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006106 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006107 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006108 uint32_t memoryBarrierCount)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006109{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006110
Tony Barbour0b2cfb22015-06-29 16:20:35 -06006111
Jeremy Hayes99a96322015-06-26 12:48:09 -06006112
6113
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006114
6115 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006116}
6117
Chia-I Wu9ab61502015-11-06 06:42:02 +08006118VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006119 VkCommandBuffer commandBuffer,
Courtney Goeltzenleuchterceebbb12015-07-12 13:07:46 -06006120 VkPipelineStageFlags srcStageMask,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006121 VkPipelineStageFlags dstStageMask,
Chia-I Wu53534662015-10-26 17:08:33 +08006122 VkDependencyFlags dependencyFlags,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006123 uint32_t memoryBarrierCount,
6124 const void* const* ppMemoryBarriers)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006125{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006126 PreCmdPipelineBarrier(commandBuffer, ppMemoryBarriers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006127
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006128 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount, ppMemoryBarriers);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006129
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006130 PostCmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, dependencyFlags, memoryBarrierCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006131}
6132
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006133bool PostCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006134 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006135 VkQueryPool queryPool,
6136 uint32_t slot,
6137 VkQueryControlFlags flags)
6138{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006139
Jeremy Hayes99a96322015-06-26 12:48:09 -06006140
6141
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006142
6143 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006144}
6145
Chia-I Wu9ab61502015-11-06 06:42:02 +08006146VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006147 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006148 VkQueryPool queryPool,
6149 uint32_t slot,
6150 VkQueryControlFlags flags)
6151{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006152 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006153
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006154 PostCmdBeginQuery(commandBuffer, queryPool, slot, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006155}
6156
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006157bool PostCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006158 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006159 VkQueryPool queryPool,
6160 uint32_t slot)
6161{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006162
Jeremy Hayes99a96322015-06-26 12:48:09 -06006163
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006164
6165 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006166}
6167
Chia-I Wu9ab61502015-11-06 06:42:02 +08006168VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndQuery(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006169 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006170 VkQueryPool queryPool,
6171 uint32_t slot)
6172{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006173 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006174
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006175 PostCmdEndQuery(commandBuffer, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006176}
6177
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006178bool PostCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006179 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006180 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006181 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006182 uint32_t queryCount)
6183{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006184
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006185
6186
6187
6188 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006189}
6190
Chia-I Wu9ab61502015-11-06 06:42:02 +08006191VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdResetQueryPool(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006192 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006193 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006194 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006195 uint32_t queryCount)
6196{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006197 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006198
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006199 PostCmdResetQueryPool(commandBuffer, queryPool, firstQuery, queryCount);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006200}
6201
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006202bool PostCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006203 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006204 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006205 VkQueryPool queryPool,
6206 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006207{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006208
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006209 ValidateEnumerator(pipelineStage);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006210
6211 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006212}
6213
Chia-I Wu9ab61502015-11-06 06:42:02 +08006214VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006215 VkCommandBuffer commandBuffer,
Chia-I Wu51ce5ea2015-10-26 19:40:27 +08006216 VkPipelineStageFlagBits pipelineStage,
Chia-I Wucbe3c9f2015-10-26 20:14:54 +08006217 VkQueryPool queryPool,
6218 uint32_t slot)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006219{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006220 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006221
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006222 PostCmdWriteTimestamp(commandBuffer, pipelineStage, queryPool, slot);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006223}
6224
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006225bool PostCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006226 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006227 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006228 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006229 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006230 VkBuffer dstBuffer,
6231 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006232 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006233 VkQueryResultFlags flags)
6234{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006235
6236
6237
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006238
Jeremy Hayes99a96322015-06-26 12:48:09 -06006239
6240
6241
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006242
6243 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006244}
6245
Chia-I Wu9ab61502015-11-06 06:42:02 +08006246VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdCopyQueryPoolResults(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006247 VkCommandBuffer commandBuffer,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006248 VkQueryPool queryPool,
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006249 uint32_t firstQuery,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006250 uint32_t queryCount,
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006251 VkBuffer dstBuffer,
6252 VkDeviceSize dstOffset,
Chia-I Wuccc93a72015-10-26 18:36:20 +08006253 VkDeviceSize stride,
Jeremy Hayes99a96322015-06-26 12:48:09 -06006254 VkQueryResultFlags flags)
Jeremy Hayesad367152015-04-17 10:36:53 -06006255{
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006256 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006257
Jon Ashburn19d3bf12015-12-30 14:06:55 -07006258 PostCmdCopyQueryPoolResults(commandBuffer, queryPool, firstQuery, queryCount, dstBuffer, dstOffset, stride, flags);
Jeremy Hayesad367152015-04-17 10:36:53 -06006259}
6260
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006261bool PreCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006262 VkCommandBuffer commandBuffer,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006263 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006264{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006265 if(pValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006266 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006267 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006268
6269 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006270}
6271
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006272bool PostCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006273 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006274 VkPipelineLayout layout,
6275 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006276 uint32_t offset,
6277 uint32_t size)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006278{
Jeremy Hayes99a96322015-06-26 12:48:09 -06006279
Jeremy Hayes99a96322015-06-26 12:48:09 -06006280
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006281
6282
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006283
6284 return true;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006285}
6286
Chia-I Wu9ab61502015-11-06 06:42:02 +08006287VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdPushConstants(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006288 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006289 VkPipelineLayout layout,
6290 VkShaderStageFlags stageFlags,
Chia-I Wud50677e2015-10-26 20:46:14 +08006291 uint32_t offset,
6292 uint32_t size,
Chia-I Wuce9b1772015-11-12 06:09:22 +08006293 const void* pValues)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006294{
Chia-I Wuce9b1772015-11-12 06:09:22 +08006295 PreCmdPushConstants(commandBuffer, pValues);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006296
Chia-I Wuce9b1772015-11-12 06:09:22 +08006297 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdPushConstants(commandBuffer, layout, stageFlags, offset, size, pValues);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006298
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006299 PostCmdPushConstants(commandBuffer, layout, stageFlags, offset, size);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006300}
6301
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006302bool PreCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006303 VkCommandBuffer commandBuffer,
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006304 const VkRenderPassBeginInfo* pRenderPassBegin)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006305{
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006306 if(pRenderPassBegin != nullptr)
6307 {
6308 if(pRenderPassBegin->sType != VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006309 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07006310 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006311 "vkCmdBeginRenderPass parameter, VkStructureType pRenderPassBegin->sType, is an invalid enumerator");
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006312 return false;
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006313 }
Cody Northrop23dd89d2015-08-04 11:51:03 -06006314 if(pRenderPassBegin->pClearValues != nullptr)
Jeremy Hayes99a96322015-06-26 12:48:09 -06006315 {
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006316 }
Jon Ashburne68a9ff2015-05-25 14:11:37 -06006317 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006318
6319 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006320}
6321
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006322bool PostCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006323 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006324 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006325{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006326
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006327 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6328 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006329 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07006330 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006331 "vkCmdBeginRenderPass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006332 return false;
6333 }
6334
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006335 return true;
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006336}
6337
Chia-I Wu9ab61502015-11-06 06:42:02 +08006338VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006339 VkCommandBuffer commandBuffer,
Chia-I Wu08accc62015-07-07 11:50:03 +08006340 const VkRenderPassBeginInfo* pRenderPassBegin,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006341 VkSubpassContents contents)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006342{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006343 PreCmdBeginRenderPass(commandBuffer, pRenderPassBegin);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006344
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006345 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdBeginRenderPass(commandBuffer, pRenderPassBegin, contents);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006346
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006347 PostCmdBeginRenderPass(commandBuffer, contents);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006348}
6349
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006350bool PostCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006351 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006352 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006353{
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006354
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006355 if(contents < VK_SUBPASS_CONTENTS_BEGIN_RANGE ||
6356 contents > VK_SUBPASS_CONTENTS_END_RANGE)
Chia-I Wu08accc62015-07-07 11:50:03 +08006357 {
Courtney Goeltzenleuchter7415d5a2015-12-09 15:48:16 -07006358 log_msg(mdd(commandBuffer), VK_DEBUG_REPORT_ERROR_BIT_EXT, (VkDebugReportObjectTypeEXT)0, 0, 0, 1, "PARAMCHECK",
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006359 "vkCmdNextSubpass parameter, VkSubpassContents contents, is an unrecognized enumerator");
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006360 return false;
Chia-I Wu08accc62015-07-07 11:50:03 +08006361 }
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006362
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006363 return true;
Chia-I Wu08accc62015-07-07 11:50:03 +08006364}
6365
Chia-I Wu9ab61502015-11-06 06:42:02 +08006366VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdNextSubpass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006367 VkCommandBuffer commandBuffer,
Chia-I Wu1b99bb22015-10-27 19:25:11 +08006368 VkSubpassContents contents)
Chia-I Wu08accc62015-07-07 11:50:03 +08006369{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006370 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdNextSubpass(commandBuffer, contents);
Chia-I Wu08accc62015-07-07 11:50:03 +08006371
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006372 PostCmdNextSubpass(commandBuffer, contents);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006373}
6374
6375bool PostCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006376 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006377{
6378
6379 return true;
6380}
6381
Chia-I Wu9ab61502015-11-06 06:42:02 +08006382VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderPass(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006383 VkCommandBuffer commandBuffer)
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006384{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006385 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdEndRenderPass(commandBuffer);
Jeremy Hayesf4b6f562015-07-29 11:23:46 -06006386
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006387 PostCmdEndRenderPass(commandBuffer);
Chia-I Wu08accc62015-07-07 11:50:03 +08006388}
6389
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006390bool PreCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006391 VkCommandBuffer commandBuffer,
6392 const VkCommandBuffer* pCommandBuffers)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006393{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006394 if(pCommandBuffers != nullptr)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006395 {
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006396 }
6397
6398 return true;
6399}
6400
6401bool PostCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006402 VkCommandBuffer commandBuffer,
6403 uint32_t commandBuffersCount)
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006404{
6405
6406
6407 return true;
6408}
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006409
Chia-I Wu9ab61502015-11-06 06:42:02 +08006410VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkCmdExecuteCommands(
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006411 VkCommandBuffer commandBuffer,
6412 uint32_t commandBuffersCount,
6413 const VkCommandBuffer* pCommandBuffers)
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006414{
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006415 PreCmdExecuteCommands(commandBuffer, pCommandBuffers);
Jeremy Hayes359eeb92015-07-09 17:11:25 -06006416
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006417 get_dispatch_table(pc_device_table_map, commandBuffer)->CmdExecuteCommands(commandBuffer, commandBuffersCount, pCommandBuffers);
Chia-I Wu0b50a1c2015-06-26 15:34:39 +08006418
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006419 PostCmdExecuteCommands(commandBuffer, commandBuffersCount);
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006420}
6421
Chia-I Wu9ab61502015-11-06 06:42:02 +08006422VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetDeviceProcAddr(VkDevice device, const char* funcName)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006423{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006424 if (device == NULL) {
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006425 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006426 }
6427
Jon Ashburn8fd08252015-05-28 16:25:02 -06006428 /* loader uses this to force layer initialization; device object is wrapped */
6429 if (!strcmp(funcName, "vkGetDeviceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006430 initDeviceTable(pc_device_table_map, (const VkBaseLayerObject *) device);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006431 return (PFN_vkVoidFunction) vkGetDeviceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006432 }
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006433
Courtney Goeltzenleuchterca173b82015-06-25 18:01:43 -06006434 if (!strcmp(funcName, "vkCreateDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006435 return (PFN_vkVoidFunction) vkCreateDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006436 if (!strcmp(funcName, "vkDestroyDevice"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006437 return (PFN_vkVoidFunction) vkDestroyDevice;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006438 if (!strcmp(funcName, "vkGetDeviceQueue"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006439 return (PFN_vkVoidFunction) vkGetDeviceQueue;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006440 if (!strcmp(funcName, "vkQueueSubmit"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006441 return (PFN_vkVoidFunction) vkQueueSubmit;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006442 if (!strcmp(funcName, "vkQueueWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006443 return (PFN_vkVoidFunction) vkQueueWaitIdle;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006444 if (!strcmp(funcName, "vkDeviceWaitIdle"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006445 return (PFN_vkVoidFunction) vkDeviceWaitIdle;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006446 if (!strcmp(funcName, "vkAllocateMemory"))
6447 return (PFN_vkVoidFunction) vkAllocateMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006448 if (!strcmp(funcName, "vkMapMemory"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006449 return (PFN_vkVoidFunction) vkMapMemory;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006450 if (!strcmp(funcName, "vkFlushMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006451 return (PFN_vkVoidFunction) vkFlushMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006452 if (!strcmp(funcName, "vkInvalidateMappedMemoryRanges"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006453 return (PFN_vkVoidFunction) vkInvalidateMappedMemoryRanges;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006454 if (!strcmp(funcName, "vkCreateFence"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006455 return (PFN_vkVoidFunction) vkCreateFence;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006456 if (!strcmp(funcName, "vkResetFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006457 return (PFN_vkVoidFunction) vkResetFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006458 if (!strcmp(funcName, "vkGetFenceStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006459 return (PFN_vkVoidFunction) vkGetFenceStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006460 if (!strcmp(funcName, "vkWaitForFences"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006461 return (PFN_vkVoidFunction) vkWaitForFences;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006462 if (!strcmp(funcName, "vkCreateSemaphore"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006463 return (PFN_vkVoidFunction) vkCreateSemaphore;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006464 if (!strcmp(funcName, "vkCreateEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006465 return (PFN_vkVoidFunction) vkCreateEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006466 if (!strcmp(funcName, "vkGetEventStatus"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006467 return (PFN_vkVoidFunction) vkGetEventStatus;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006468 if (!strcmp(funcName, "vkSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006469 return (PFN_vkVoidFunction) vkSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006470 if (!strcmp(funcName, "vkResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006471 return (PFN_vkVoidFunction) vkResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006472 if (!strcmp(funcName, "vkCreateQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006473 return (PFN_vkVoidFunction) vkCreateQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006474 if (!strcmp(funcName, "vkGetQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006475 return (PFN_vkVoidFunction) vkGetQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006476 if (!strcmp(funcName, "vkCreateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006477 return (PFN_vkVoidFunction) vkCreateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006478 if (!strcmp(funcName, "vkCreateBufferView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006479 return (PFN_vkVoidFunction) vkCreateBufferView;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006480 if (!strcmp(funcName, "vkCreateImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006481 return (PFN_vkVoidFunction) vkCreateImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006482 if (!strcmp(funcName, "vkGetImageSubresourceLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006483 return (PFN_vkVoidFunction) vkGetImageSubresourceLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006484 if (!strcmp(funcName, "vkCreateImageView"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006485 return (PFN_vkVoidFunction) vkCreateImageView;
Michael Lentine03d8e572015-09-15 14:59:14 -05006486 if (!strcmp(funcName, "vkCreateShaderModule"))
6487 return (PFN_vkVoidFunction) vkCreateShaderModule;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006488 if (!strcmp(funcName, "vkCreateGraphicsPipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006489 return (PFN_vkVoidFunction) vkCreateGraphicsPipelines;
Jon Ashburnc669cc62015-07-09 15:02:25 -06006490 if (!strcmp(funcName, "vkCreateComputePipelines"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006491 return (PFN_vkVoidFunction) vkCreateComputePipelines;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006492 if (!strcmp(funcName, "vkCreatePipelineLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006493 return (PFN_vkVoidFunction) vkCreatePipelineLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006494 if (!strcmp(funcName, "vkCreateSampler"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006495 return (PFN_vkVoidFunction) vkCreateSampler;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006496 if (!strcmp(funcName, "vkCreateDescriptorSetLayout"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006497 return (PFN_vkVoidFunction) vkCreateDescriptorSetLayout;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006498 if (!strcmp(funcName, "vkCreateDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006499 return (PFN_vkVoidFunction) vkCreateDescriptorPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006500 if (!strcmp(funcName, "vkResetDescriptorPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006501 return (PFN_vkVoidFunction) vkResetDescriptorPool;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006502 if (!strcmp(funcName, "vkAllocateDescriptorSets"))
6503 return (PFN_vkVoidFunction) vkAllocateDescriptorSets;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006504 if (!strcmp(funcName, "vkCmdSetViewport"))
6505 return (PFN_vkVoidFunction) vkCmdSetViewport;
Courtney Goeltzenleuchter078f8172015-09-21 11:44:06 -06006506 if (!strcmp(funcName, "vkCmdSetScissor"))
6507 return (PFN_vkVoidFunction) vkCmdSetScissor;
Courtney Goeltzenleuchter49c73082015-09-17 15:06:17 -06006508 if (!strcmp(funcName, "vkCmdSetLineWidth"))
6509 return (PFN_vkVoidFunction) vkCmdSetLineWidth;
6510 if (!strcmp(funcName, "vkCmdSetDepthBias"))
6511 return (PFN_vkVoidFunction) vkCmdSetDepthBias;
6512 if (!strcmp(funcName, "vkCmdSetBlendConstants"))
6513 return (PFN_vkVoidFunction) vkCmdSetBlendConstants;
6514 if (!strcmp(funcName, "vkCmdSetDepthBounds"))
6515 return (PFN_vkVoidFunction) vkCmdSetDepthBounds;
6516 if (!strcmp(funcName, "vkCmdSetStencilCompareMask"))
6517 return (PFN_vkVoidFunction) vkCmdSetStencilCompareMask;
6518 if (!strcmp(funcName, "vkCmdSetStencilWriteMask"))
6519 return (PFN_vkVoidFunction) vkCmdSetStencilWriteMask;
6520 if (!strcmp(funcName, "vkCmdSetStencilReference"))
6521 return (PFN_vkVoidFunction) vkCmdSetStencilReference;
Chia-I Wu3432a0c2015-10-27 18:04:07 +08006522 if (!strcmp(funcName, "vkAllocateCommandBuffers"))
6523 return (PFN_vkVoidFunction) vkAllocateCommandBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006524 if (!strcmp(funcName, "vkBeginCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006525 return (PFN_vkVoidFunction) vkBeginCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006526 if (!strcmp(funcName, "vkEndCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006527 return (PFN_vkVoidFunction) vkEndCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006528 if (!strcmp(funcName, "vkResetCommandBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006529 return (PFN_vkVoidFunction) vkResetCommandBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006530 if (!strcmp(funcName, "vkCmdBindPipeline"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006531 return (PFN_vkVoidFunction) vkCmdBindPipeline;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006532 if (!strcmp(funcName, "vkCmdBindDescriptorSets"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006533 return (PFN_vkVoidFunction) vkCmdBindDescriptorSets;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006534 if (!strcmp(funcName, "vkCmdBindVertexBuffers"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006535 return (PFN_vkVoidFunction) vkCmdBindVertexBuffers;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006536 if (!strcmp(funcName, "vkCmdBindIndexBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006537 return (PFN_vkVoidFunction) vkCmdBindIndexBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006538 if (!strcmp(funcName, "vkCmdDraw"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006539 return (PFN_vkVoidFunction) vkCmdDraw;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006540 if (!strcmp(funcName, "vkCmdDrawIndexed"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006541 return (PFN_vkVoidFunction) vkCmdDrawIndexed;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006542 if (!strcmp(funcName, "vkCmdDrawIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006543 return (PFN_vkVoidFunction) vkCmdDrawIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006544 if (!strcmp(funcName, "vkCmdDrawIndexedIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006545 return (PFN_vkVoidFunction) vkCmdDrawIndexedIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006546 if (!strcmp(funcName, "vkCmdDispatch"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006547 return (PFN_vkVoidFunction) vkCmdDispatch;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006548 if (!strcmp(funcName, "vkCmdDispatchIndirect"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006549 return (PFN_vkVoidFunction) vkCmdDispatchIndirect;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006550 if (!strcmp(funcName, "vkCmdCopyBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006551 return (PFN_vkVoidFunction) vkCmdCopyBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006552 if (!strcmp(funcName, "vkCmdCopyImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006553 return (PFN_vkVoidFunction) vkCmdCopyImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006554 if (!strcmp(funcName, "vkCmdBlitImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006555 return (PFN_vkVoidFunction) vkCmdBlitImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006556 if (!strcmp(funcName, "vkCmdCopyBufferToImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006557 return (PFN_vkVoidFunction) vkCmdCopyBufferToImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006558 if (!strcmp(funcName, "vkCmdCopyImageToBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006559 return (PFN_vkVoidFunction) vkCmdCopyImageToBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006560 if (!strcmp(funcName, "vkCmdUpdateBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006561 return (PFN_vkVoidFunction) vkCmdUpdateBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006562 if (!strcmp(funcName, "vkCmdFillBuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006563 return (PFN_vkVoidFunction) vkCmdFillBuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006564 if (!strcmp(funcName, "vkCmdClearColorImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006565 return (PFN_vkVoidFunction) vkCmdClearColorImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006566 if (!strcmp(funcName, "vkCmdResolveImage"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006567 return (PFN_vkVoidFunction) vkCmdResolveImage;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006568 if (!strcmp(funcName, "vkCmdSetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006569 return (PFN_vkVoidFunction) vkCmdSetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006570 if (!strcmp(funcName, "vkCmdResetEvent"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006571 return (PFN_vkVoidFunction) vkCmdResetEvent;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006572 if (!strcmp(funcName, "vkCmdWaitEvents"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006573 return (PFN_vkVoidFunction) vkCmdWaitEvents;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006574 if (!strcmp(funcName, "vkCmdPipelineBarrier"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006575 return (PFN_vkVoidFunction) vkCmdPipelineBarrier;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006576 if (!strcmp(funcName, "vkCmdBeginQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006577 return (PFN_vkVoidFunction) vkCmdBeginQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006578 if (!strcmp(funcName, "vkCmdEndQuery"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006579 return (PFN_vkVoidFunction) vkCmdEndQuery;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006580 if (!strcmp(funcName, "vkCmdResetQueryPool"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006581 return (PFN_vkVoidFunction) vkCmdResetQueryPool;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006582 if (!strcmp(funcName, "vkCmdWriteTimestamp"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006583 return (PFN_vkVoidFunction) vkCmdWriteTimestamp;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006584 if (!strcmp(funcName, "vkCmdCopyQueryPoolResults"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006585 return (PFN_vkVoidFunction) vkCmdCopyQueryPoolResults;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006586 if (!strcmp(funcName, "vkCreateFramebuffer"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006587 return (PFN_vkVoidFunction) vkCreateFramebuffer;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006588 if (!strcmp(funcName, "vkCreateRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006589 return (PFN_vkVoidFunction) vkCreateRenderPass;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006590 if (!strcmp(funcName, "vkCmdBeginRenderPass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006591 return (PFN_vkVoidFunction) vkCmdBeginRenderPass;
Chia-I Wu08accc62015-07-07 11:50:03 +08006592 if (!strcmp(funcName, "vkCmdNextSubpass"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006593 return (PFN_vkVoidFunction) vkCmdNextSubpass;
Jon Ashburneab34492015-06-01 09:37:38 -06006594
Jon Ashburneab34492015-06-01 09:37:38 -06006595 {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006596 if (get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr == NULL)
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006597 return NULL;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006598 return get_dispatch_table(pc_device_table_map, device)->GetDeviceProcAddr(device, funcName);
Jeremy Hayesa8b1a8d2015-04-06 13:46:11 -06006599 }
6600}
6601
Chia-I Wu9ab61502015-11-06 06:42:02 +08006602VK_LAYER_EXPORT VKAPI_ATTR PFN_vkVoidFunction VKAPI_CALL vkGetInstanceProcAddr(VkInstance instance, const char* funcName)
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006603{
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006604 if (instance == NULL) {
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006605 return NULL;
Mark Lobodzinski2eed1eb2015-05-26 10:58:40 -05006606 }
6607
Jon Ashburn8fd08252015-05-28 16:25:02 -06006608 /* loader uses this to force layer initialization; instance object is wrapped */
6609 if (!strcmp(funcName, "vkGetInstanceProcAddr")) {
Jeremy Hayes99a96322015-06-26 12:48:09 -06006610 initInstanceTable(pc_instance_table_map, (const VkBaseLayerObject *) instance);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006611 return (PFN_vkVoidFunction) vkGetInstanceProcAddr;
Jon Ashburn8fd08252015-05-28 16:25:02 -06006612 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006613
Jeremy Hayes99a96322015-06-26 12:48:09 -06006614 if (!strcmp(funcName, "vkCreateInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006615 return (PFN_vkVoidFunction) vkCreateInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006616 if (!strcmp(funcName, "vkDestroyInstance"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006617 return (PFN_vkVoidFunction) vkDestroyInstance;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006618 if (!strcmp(funcName, "vkEnumeratePhysicalDevices"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006619 return (PFN_vkVoidFunction) vkEnumeratePhysicalDevices;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006620 if (!strcmp(funcName, "vkGetPhysicalDeviceProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006621 return (PFN_vkVoidFunction) vkGetPhysicalDeviceProperties;
Jeremy Hayes99a96322015-06-26 12:48:09 -06006622 if (!strcmp(funcName, "vkGetPhysicalDeviceFeatures"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006623 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFeatures;
Courtney Goeltzenleuchter2caec862015-07-12 12:52:09 -06006624 if (!strcmp(funcName, "vkGetPhysicalDeviceFormatProperties"))
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006625 return (PFN_vkVoidFunction) vkGetPhysicalDeviceFormatProperties;
Courtney Goeltzenleuchter35985f62015-09-14 17:22:16 -06006626 if (!strcmp(funcName, "vkEnumerateInstanceLayerProperties"))
6627 return (PFN_vkVoidFunction) vkEnumerateInstanceLayerProperties;
6628 if (!strcmp(funcName, "vkEnumerateInstanceExtensionProperties"))
6629 return (PFN_vkVoidFunction) vkEnumerateInstanceExtensionProperties;
6630 if (!strcmp(funcName, "vkEnumerateDeviceLayerProperties"))
6631 return (PFN_vkVoidFunction) vkEnumerateDeviceLayerProperties;
6632 if (!strcmp(funcName, "vkEnumerateDeviceExtensionProperties"))
6633 return (PFN_vkVoidFunction) vkEnumerateDeviceExtensionProperties;
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006634
Jeremy Hayes99a96322015-06-26 12:48:09 -06006635 layer_data *data = get_my_data_ptr(get_dispatch_key(instance), layer_data_map);
Courtney Goeltzenleuchter2d3ba632015-07-12 14:35:22 -06006636 PFN_vkVoidFunction fptr = debug_report_get_instance_proc_addr(data->report_data, funcName);
Jeremy Hayes99a96322015-06-26 12:48:09 -06006637 if(fptr)
Courtney Goeltzenleuchter500b89b2015-06-01 14:45:27 -06006638 return fptr;
6639
Jeremy Hayes99a96322015-06-26 12:48:09 -06006640 {
6641 if (get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr == NULL)
6642 return NULL;
6643 return get_dispatch_table(pc_instance_table_map, instance)->GetInstanceProcAddr(instance, funcName);
6644 }
Jon Ashburnf6b33db2015-05-05 14:22:52 -06006645}