blob: 3171baf2bd479b1af6767000dbe1ffe1539a9815 [file] [log] [blame]
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001/*
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06002 * Vulkan
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06003 *
4 * Copyright (C) 2014 LunarG, Inc.
5 *
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.
23 */
24
25#include <stdio.h>
26#include <stdlib.h>
27#include <string.h>
28
29#include <iostream>
30#include <string>
31#include <sstream>
32
33#include "loader_platform.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060034#include "vkLayer.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060035#include "layers_config.h"
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060036#include "vk_enum_validate_helper.h"
37#include "vk_struct_validate_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060038//The following is #included again to catch certain OS-specific functions being used:
39#include "loader_platform.h"
40
41#include "layers_msg.h"
42
Jon Ashburn301c5f02015-04-06 10:58:22 -060043static VkLayerDispatchTable nextTable;
44static VkBaseLayerObject *pCurObj;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060045static LOADER_PLATFORM_THREAD_ONCE_DECLARATION(tabOnce);
46
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060047#include "vk_dispatch_table_helper.h"
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060048static void initParamChecker(void)
49{
50
51 const char *strOpt;
52 // initialize ParamChecker options
53 getLayerOptionEnum("ParamCheckerReportLevel", (uint32_t *) &g_reportingLevel);
54 g_actionIsDefault = getLayerOptionEnum("ParamCheckerDebugAction", (uint32_t *) &g_debugAction);
55
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060056 if (g_debugAction & VK_DBG_LAYER_ACTION_LOG_MSG)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060057 {
58 strOpt = getLayerOption("ParamCheckerLogFilename");
59 if (strOpt)
60 {
61 g_logFile = fopen(strOpt, "w");
62 }
63 if (g_logFile == NULL)
64 g_logFile = stdout;
65 }
66
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060067 PFN_vkGetProcAddr fpNextGPA;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060068 fpNextGPA = pCurObj->pGPA;
69 assert(fpNextGPA);
70
Tony Barbour8205d902015-04-16 15:59:00 -060071 layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalDevice) pCurObj->nextObject);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060072}
73
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060074void PreCreateInstance(const VkApplicationInfo* pAppInfo, const VkAllocCallbacks* pAllocCb)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060075{
76 if(pAppInfo == nullptr)
77 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060078 char const str[] = "vkCreateInstance parameter, VkApplicationInfo* pAppInfo, is "\
Mike Stroyan0ae32252015-04-06 15:24:46 -060079 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060080 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060081 return;
82 }
83
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060084 if(pAppInfo->sType != VK_STRUCTURE_TYPE_APPLICATION_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060085 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060086 char const str[] = "vkCreateInstance parameter, VK_STRUCTURE_TYPE_APPLICATION_INFO "\
87 "pAppInfo->sType, is not VK_STRUCTURE_TYPE_APPLICATION_INFO (precondition).";
88 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060089 return;
90 }
91
92 // TODO: What else can validated in pAppInfo?
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -060093 // TODO: VK_API_VERSION validation.
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060094
95 // It's okay if pAllocCb is a nullptr.
96 if(pAllocCb != nullptr)
97 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -060098 if(!vk_validate_vkalloccallbacks(pAllocCb))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -060099 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600100 char const str[] = "vkCreateInstance parameter, VkAllocCallbacks* pAllocCb, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600101 "contains an invalid value (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600102 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600103 return;
104 }
105 }
106}
107
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600108void PostCreateInstance(VkResult result, VkInstance* pInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600109{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600110 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600111 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600112 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600113 char const str[] = "vkCreateInstance failed (postcondition).";
114 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600115 return;
116 }
117
118 if(pInstance == nullptr)
119 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600120 char const str[] = "vkCreateInstance parameter, VkInstance* pInstance, is nullptr "\
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600121 "(postcondition).";
122 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600123 return;
124 }
125}
126
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600127VK_LAYER_EXPORT VkResult VKAPI vkCreateInstance(const VkInstanceCreateInfo* pCreateInfo, VkInstance* pInstance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600128{
Jon Ashburn29669a42015-04-04 14:52:07 -0600129 PreCreateInstance(pCreateInfo->pAppInfo, pCreateInfo->pAllocCb);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600130 VkResult result = nextTable.CreateInstance(pCreateInfo, pInstance);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600131 PostCreateInstance(result, pInstance);
132 return result;
133}
134
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600135VK_LAYER_EXPORT VkResult VKAPI vkDestroyInstance(VkInstance instance)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600136{
137
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600138 VkResult result = nextTable.DestroyInstance(instance);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600139 return result;
140}
141
Tony Barbour8205d902015-04-16 15:59:00 -0600142VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceInfo(VkPhysicalDevice gpu, VkPhysicalDeviceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600143{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600144 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600145 loader_platform_thread_once(&tabOnce, initParamChecker);
146 char str[1024];
Tony Barbour8205d902015-04-16 15:59:00 -0600147 if (!validate_VkPhysicalDeviceInfoType(infoType)) {
148 sprintf(str, "Parameter infoType to function GetPhysicalDeviceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600149 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600150 }
Tony Barbour8205d902015-04-16 15:59:00 -0600151 VkResult result = nextTable.GetPhysicalDeviceInfo(gpu, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600152 return result;
153}
154
Tony Barbour8205d902015-04-16 15:59:00 -0600155void PreCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600156{
157 if(gpu == nullptr)
158 {
Tony Barbour8205d902015-04-16 15:59:00 -0600159 char const str[] = "vkCreateDevice parameter, VkPhysicalDevice gpu, is nullptr "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600160 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600161 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600162 return;
163 }
164
165 if(pCreateInfo == nullptr)
166 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600167 char const str[] = "vkCreateDevice parameter, VkDeviceCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600168 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600169 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600170 return;
171 }
172
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600173 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600174 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600175 char const str[] = "vkCreateDevice parameter, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO "\
176 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO (precondition).";
177 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600178 return;
179 }
180
181 if(pCreateInfo->queueRecordCount == 0)
182 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600183 char const str[] = "vkCreateDevice parameter, uint32_t pCreateInfo->queueRecordCount, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600184 "zero (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600185 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600186 return;
187 }
188
189 if(pCreateInfo->pRequestedQueues == nullptr)
190 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600191 char const str[] = "vkCreateDevice parameter, VkDeviceQueueCreateInfo* pCreateInfo->pRequestedQueues, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600192 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600193 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600194 return;
195 }
196
197 for(uint32_t i = 0; i < pCreateInfo->queueRecordCount; ++i)
198 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600199 if(!vk_validate_vkdevicequeuecreateinfo(&(pCreateInfo->pRequestedQueues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600200 {
201 std::stringstream ss;
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600202 ss << "vkCreateDevice parameter, VkDeviceQueueCreateInfo pCreateInfo->pRequestedQueues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600203 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600204 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600205 continue;
206 }
207 }
208
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600209}
210
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600211void PostCreateDevice(VkResult result, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600212{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600213 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600214 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600215 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600216 char const str[] = "vkCreateDevice failed (postcondition).";
217 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600218 return;
219 }
220
221 if(pDevice == nullptr)
222 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600223 char const str[] = "vkCreateDevice parameter, VkDevice* pDevice, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600224 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600225 return;
226 }
227}
228
Tony Barbour8205d902015-04-16 15:59:00 -0600229VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalDevice gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600230{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600231 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600232 loader_platform_thread_once(&tabOnce, initParamChecker);
233 PreCreateDevice(gpu, pCreateInfo);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600234 VkResult result = nextTable.CreateDevice(gpu, pCreateInfo, pDevice);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600235 PostCreateDevice(result, pDevice);
236 return result;
237}
238
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600239VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600240{
241
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600242 VkResult result = nextTable.DestroyDevice(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600243 return result;
244}
245
Jon Ashburneb2728b2015-04-10 14:33:07 -0600246struct extProps {
247 uint32_t version;
248 const char * const name;
249};
250
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600251#define PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE 2
Jon Ashburneb2728b2015-04-10 14:33:07 -0600252static const struct extProps pcExts[PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE] = {
253 // TODO what is the version?
254 0x10, "ParamChecker",
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600255 0x10, "Validation",
Jon Ashburneb2728b2015-04-10 14:33:07 -0600256};
257
258VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
259 VkExtensionInfoType infoType,
260 uint32_t extensionIndex,
261 size_t* pDataSize,
262 void* pData)
263{
264 VkResult result;
265
266 /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */
267 VkExtensionProperties *ext_props;
268 uint32_t *count;
269
270 if (pDataSize == NULL)
271 return VK_ERROR_INVALID_POINTER;
272
273 switch (infoType) {
274 case VK_EXTENSION_INFO_TYPE_COUNT:
275 *pDataSize = sizeof(uint32_t);
276 if (pData == NULL)
277 return VK_SUCCESS;
278 count = (uint32_t *) pData;
279 *count = PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE;
280 break;
281 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
282 *pDataSize = sizeof(VkExtensionProperties);
283 if (pData == NULL)
284 return VK_SUCCESS;
285 if (extensionIndex >= PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE)
286 return VK_ERROR_INVALID_VALUE;
287 ext_props = (VkExtensionProperties *) pData;
288 ext_props->version = pcExts[extensionIndex].version;
289 strncpy(ext_props->extName, pcExts[extensionIndex].name,
290 VK_MAX_EXTENSION_NAME);
291 ext_props->extName[VK_MAX_EXTENSION_NAME - 1] = '\0';
292 break;
293 default:
294 return VK_ERROR_INVALID_VALUE;
295 };
296
297 return VK_SUCCESS;
298}
299
Jeremy Hayescf469132015-04-17 10:36:53 -0600300VK_LAYER_EXPORT VkResult VKAPI vkGetPhysicalDeviceExtensionInfo(
301 VkPhysicalDevice gpu,
302 VkExtensionInfoType infoType,
303 uint32_t extensionIndex,
304 size_t* pDataSize,
305 void* pData)
306{
307 VkResult result = nextTable.GetPhysicalDeviceExtensionInfo(gpu, infoType, extensionIndex, pDataSize, pData);
308 return result;
309}
310
Courtney Goeltzenleuchterbb1f3602015-04-20 11:04:54 -0600311VK_LAYER_EXPORT VkResult VKAPI vkEnumerateLayers(VkPhysicalDevice gpu, size_t maxStringSize, size_t* pLayerCount, char* const* pOutLayers, void* pReserved)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600312{
313 char str[1024];
314 if (gpu != NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600315 sprintf(str, "At start of layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600316 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600317 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600318 loader_platform_thread_once(&tabOnce, initParamChecker);
Courtney Goeltzenleuchterbb1f3602015-04-20 11:04:54 -0600319 VkResult result = nextTable.EnumerateLayers(gpu, maxStringSize, pLayerCount, pOutLayers, pReserved);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600320 sprintf(str, "Completed layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600321 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600322 fflush(stdout);
323 return result;
324 } else {
Courtney Goeltzenleuchterbb1f3602015-04-20 11:04:54 -0600325 if (pLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600326 return VK_ERROR_INVALID_POINTER;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600327 // This layer compatible with all GPUs
Courtney Goeltzenleuchterbb1f3602015-04-20 11:04:54 -0600328 *pLayerCount = 1;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600329 strncpy(pOutLayers[0], "ParamChecker", maxStringSize);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600330 return VK_SUCCESS;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600331 }
332}
333
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600334VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600335{
336
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600337 VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600338 return result;
339}
340
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600341VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600342{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600343 VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600344 return result;
345}
346
Tony Barbour8205d902015-04-16 15:59:00 -0600347VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReferences(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600348{
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -0600349 VkResult result = nextTable.QueueAddMemReferences(queue, count, pMems);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600350 return result;
351}
352
Tony Barbour8205d902015-04-16 15:59:00 -0600353VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReferences(VkQueue queue, uint32_t count, const VkDeviceMemory* pMems)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600354{
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -0600355 VkResult result = nextTable.QueueRemoveMemReferences(queue, count, pMems);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600356 return result;
357}
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600358VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600359{
360
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600361 VkResult result = nextTable.QueueWaitIdle(queue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600362 return result;
363}
364
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600365VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600366{
367
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600368 VkResult result = nextTable.DeviceWaitIdle(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600369 return result;
370}
371
Tony Barbour8205d902015-04-16 15:59:00 -0600372VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkDeviceMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600373{
374 char str[1024];
375 if (!pAllocInfo) {
376 sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600377 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600378 } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600379 sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600380 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600381 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600382 VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600383 return result;
384}
385
Mike Stroyan230e6252015-04-17 12:36:38 -0600386VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkDevice device, VkDeviceMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600387{
388
Mike Stroyan230e6252015-04-17 12:36:38 -0600389 VkResult result = nextTable.FreeMemory(device, mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600390 return result;
391}
392
Mike Stroyan230e6252015-04-17 12:36:38 -0600393VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkDevice device, VkDeviceMemory mem, VkMemoryPriority priority)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600394{
395 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600396 if (!validate_VkMemoryPriority(priority)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600397 sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600398 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600399 }
Mike Stroyan230e6252015-04-17 12:36:38 -0600400 VkResult result = nextTable.SetMemoryPriority(device, mem, priority);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600401 return result;
402}
403
Mike Stroyan230e6252015-04-17 12:36:38 -0600404VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size, VkFlags flags, void** ppData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600405{
406
Mike Stroyan230e6252015-04-17 12:36:38 -0600407 VkResult result = nextTable.MapMemory(device, mem, offset, size, flags, ppData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600408 return result;
409}
410
Mike Stroyan230e6252015-04-17 12:36:38 -0600411VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkDevice device, VkDeviceMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600412{
413
Mike Stroyan230e6252015-04-17 12:36:38 -0600414 VkResult result = nextTable.UnmapMemory(device, mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600415 return result;
416}
417
Mike Stroyan230e6252015-04-17 12:36:38 -0600418VK_LAYER_EXPORT VkResult VKAPI vkFlushMappedMemory(VkDevice device, VkDeviceMemory mem, VkDeviceSize offset, VkDeviceSize size)
Tony Barbour859ceab2015-04-16 19:23:13 -0600419{
420
Mike Stroyan230e6252015-04-17 12:36:38 -0600421 VkResult result = nextTable.FlushMappedMemory(device, mem, offset, size);
Tony Barbour859ceab2015-04-16 19:23:13 -0600422 return result;
423}
424
Tony Barbour8205d902015-04-16 15:59:00 -0600425VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkDeviceMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600426{
427
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600428 VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600429 return result;
430}
431
Tony Barbour8205d902015-04-16 15:59:00 -0600432VK_LAYER_EXPORT VkResult VKAPI vkGetMultiDeviceCompatibility(VkPhysicalDevice gpu0, VkPhysicalDevice gpu1, VkPhysicalDeviceCompatibilityInfo* pInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600433{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600434 pCurObj = (VkBaseLayerObject *) gpu0;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600435 loader_platform_thread_once(&tabOnce, initParamChecker);
436
Tony Barbour8205d902015-04-16 15:59:00 -0600437 VkResult result = nextTable.GetMultiDeviceCompatibility(gpu0, gpu1, pInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600438 return result;
439}
440
Tony Barbour8205d902015-04-16 15:59:00 -0600441VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600442{
443 char str[1024];
444 if (!pOpenInfo) {
445 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600446 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600447 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600448 else if (!vk_validate_vkmemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600449 sprintf(str, "Parameter pOpenInfo to function OpenSharedMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600450 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600451 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600452 VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600453 return result;
454}
455
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600456VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600457{
458 char str[1024];
459 if (!pOpenInfo) {
460 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600461 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600462 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600463 else if (!vk_validate_vksemaphoreopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600464 sprintf(str, "Parameter pOpenInfo to function OpenSharedSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600465 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600466 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600467 VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600468 return result;
469}
470
Tony Barbour8205d902015-04-16 15:59:00 -0600471VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkDeviceMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600472{
473 char str[1024];
474 if (!pOpenInfo) {
475 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600476 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600477 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600478 else if (!vk_validate_vkpeermemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600479 sprintf(str, "Parameter pOpenInfo to function OpenPeerMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600480 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600481 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600482 VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600483 return result;
484}
485
Tony Barbour8205d902015-04-16 15:59:00 -0600486VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkDeviceMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600487{
488 char str[1024];
489 if (!pOpenInfo) {
490 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerImage is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600491 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600492 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600493 else if (!vk_validate_vkpeerimageopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600494 sprintf(str, "Parameter pOpenInfo to function OpenPeerImage contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600495 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600496 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600497 VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600498 return result;
499}
500
Mike Stroyan230e6252015-04-17 12:36:38 -0600501VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkDevice device, VkObjectType objType, VkObject object)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600502{
503
Mike Stroyan230e6252015-04-17 12:36:38 -0600504 VkResult result = nextTable.DestroyObject(device, objType, object);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600505 return result;
506}
507
Mike Stroyan230e6252015-04-17 12:36:38 -0600508VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkDevice device, VkObjectType objType, VkObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600509{
510 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600511 if (!validate_VkObjectInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600512 sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600513 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600514 }
Mike Stroyan230e6252015-04-17 12:36:38 -0600515 VkResult result = nextTable.GetObjectInfo(device, objType, object, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600516 return result;
517}
518
Mike Stroyan230e6252015-04-17 12:36:38 -0600519VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemory(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceMemory mem, VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600520{
521
Mike Stroyan230e6252015-04-17 12:36:38 -0600522 VkResult result = nextTable.QueueBindObjectMemory(queue, objType, object, allocationIdx, mem, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600523 return result;
524}
525
Mike Stroyan230e6252015-04-17 12:36:38 -0600526VK_LAYER_EXPORT VkResult VKAPI vkQueueBindObjectMemoryRange(VkQueue queue, VkObjectType objType, VkObject object, uint32_t allocationIdx, VkDeviceSize rangeOffset, VkDeviceSize rangeSize, VkDeviceMemory mem, VkDeviceSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600527{
528
Mike Stroyan230e6252015-04-17 12:36:38 -0600529 VkResult result = nextTable.QueueBindObjectMemoryRange(queue, objType, object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600530 return result;
531}
532
Tony Barbour8205d902015-04-16 15:59:00 -0600533VK_LAYER_EXPORT VkResult VKAPI vkQueueBindImageMemoryRange(VkQueue queue, VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* pBindInfo, VkDeviceMemory mem, VkDeviceSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600534{
535 char str[1024];
Jeremy Hayes47536532015-04-15 15:20:03 -0600536 if (!pBindInfo) {
537 sprintf(str, "Struct ptr parameter pBindInfo to function QueueBindImageMemoryRange is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600538 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600539 }
Jeremy Hayes47536532015-04-15 15:20:03 -0600540 else if (!vk_validate_vkimagememorybindinfo(pBindInfo)) {
541 sprintf(str, "Parameter pBindInfo to function BindImageMemoryRange contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600542 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600543 }
Jeremy Hayes47536532015-04-15 15:20:03 -0600544 VkResult result = nextTable.QueueBindImageMemoryRange(queue, image, allocationIdx, pBindInfo, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600545 return result;
546}
547
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600548VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600549{
550 char str[1024];
551 if (!pCreateInfo) {
552 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600553 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600554 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600555 else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600556 sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600557 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600558 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600559 VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600560 return result;
561}
562
Mike Stroyan230e6252015-04-17 12:36:38 -0600563VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkDevice device, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600564{
565
Mike Stroyan230e6252015-04-17 12:36:38 -0600566 VkResult result = nextTable.GetFenceStatus(device, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600567 return result;
568}
569
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600570VK_LAYER_EXPORT VkResult VKAPI vkWaitForFences(VkDevice device, uint32_t fenceCount, const VkFence* pFences, bool32_t waitAll, uint64_t timeout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600571{
572
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600573 VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600574 return result;
575}
576
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600577VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500578{
579
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600580 VkResult result = nextTable.ResetFences(device, fenceCount, pFences);
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500581 return result;
582}
583
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600584VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600585{
586 char str[1024];
587 if (!pCreateInfo) {
588 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600589 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600590 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600591 else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600592 sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600593 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600594 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600595 VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600596 return result;
597}
598
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600599VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600600{
601
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600602 VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600603 return result;
604}
605
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600606VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600607{
608
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600609 VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600610 return result;
611}
612
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600613VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600614{
615 char str[1024];
616 if (!pCreateInfo) {
617 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600618 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600619 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600620 else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600621 sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600622 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600623 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600624 VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600625 return result;
626}
627
Mike Stroyan230e6252015-04-17 12:36:38 -0600628VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkDevice device, VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600629{
630
Mike Stroyan230e6252015-04-17 12:36:38 -0600631 VkResult result = nextTable.GetEventStatus(device, event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600632 return result;
633}
634
Mike Stroyan230e6252015-04-17 12:36:38 -0600635VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkDevice device, VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600636{
637
Mike Stroyan230e6252015-04-17 12:36:38 -0600638 VkResult result = nextTable.SetEvent(device, event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600639 return result;
640}
641
Mike Stroyan230e6252015-04-17 12:36:38 -0600642VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkDevice device, VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600643{
644
Mike Stroyan230e6252015-04-17 12:36:38 -0600645 VkResult result = nextTable.ResetEvent(device, event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600646 return result;
647}
648
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600649VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600650{
651 char str[1024];
652 if (!pCreateInfo) {
653 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600654 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600655 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600656 else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600657 sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600658 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600659 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600660 VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600661 return result;
662}
663
Mike Stroyan230e6252015-04-17 12:36:38 -0600664VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkDevice device, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData, VkQueryResultFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600665{
666
Mike Stroyan230e6252015-04-17 12:36:38 -0600667 VkResult result = nextTable.GetQueryPoolResults(device, queryPool, startQuery, queryCount, pDataSize, pData, flags);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600668 return result;
669}
670
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600671VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600672{
673 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600674 if (!validate_VkFormat(format)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600675 sprintf(str, "Parameter format to function GetFormatInfo has invalid value of %i.", (int)format);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600676 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600677 }
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600678 if (!validate_VkFormatInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600679 sprintf(str, "Parameter infoType to function GetFormatInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600680 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600681 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600682 VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600683 return result;
684}
685
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600686VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600687{
688 char str[1024];
689 if (!pCreateInfo) {
690 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600691 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600692 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600693 else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600694 sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600695 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600696 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600697 VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600698 return result;
699}
700
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600701VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600702{
703 char str[1024];
704 if (!pCreateInfo) {
705 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600706 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600707 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600708 else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600709 sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600710 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600711 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600712 VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600713 return result;
714}
715
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600716void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600717{
718 if(pCreateInfo == nullptr)
719 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600720 char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600721 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600722 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600723 return;
724 }
725
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600726 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600727 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600728 char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\
729 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition).";
730 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600731 return;
732 }
733
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600734 if (!validate_VkImageType(pCreateInfo->imageType))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600735 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600736 char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600737 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600738 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600739 return;
740 }
741
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600742 if (!validate_VkFormat(pCreateInfo->format))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600743 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600744 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600745 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600746 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600747 return;
748 }
749
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600750 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600751 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600752 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->format,
Tony Barbour8205d902015-04-16 15:59:00 -0600753 VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600754 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600755 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600756 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600757 "validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600758 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600759 return;
760 }
761
762 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
763 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600764 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600765 "unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600766 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600767 return;
768 }
769
770 // TODO: Can we check device-specific limits?
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600771 if (!vk_validate_vkextent3d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600772 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600773 char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600774 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600775 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600776 return;
777 }
778
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600779 if (!validate_VkImageTiling(pCreateInfo->tiling))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600780 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600781 char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600782 "unrecoginized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600783 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600784 return;
785 }
786}
787
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600788void PostCreateImage(VkResult result, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600789{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600790 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600791 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600792 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600793 char const str[] = "vkCreateImage failed (postcondition).";
794 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600795 return;
796 }
797
798 if(pImage == nullptr)
799 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600800 char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600801 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600802 return;
803 }
804}
805
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600806VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600807{
808 PreCreateImage(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600809 VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600810 PostCreateImage(result, pImage);
811 return result;
812}
813
Mike Stroyan230e6252015-04-17 12:36:38 -0600814VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkDevice device, VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600815{
816 char str[1024];
817 if (!pSubresource) {
818 sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceInfo is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600819 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600820 } else if (!vk_validate_vkimagesubresource(pSubresource)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600821 sprintf(str, "Parameter pSubresource to function GetImageSubresourceInfo contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600822 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600823 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600824 if (!validate_VkSubresourceInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600825 sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600826 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600827 }
Mike Stroyan230e6252015-04-17 12:36:38 -0600828 VkResult result = nextTable.GetImageSubresourceInfo(device, image, pSubresource, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600829 return result;
830}
831
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600832VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600833{
834 char str[1024];
835 if (!pCreateInfo) {
836 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600837 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600838 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600839 else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600840 sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600841 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600842 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600843 VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600844 return result;
845}
846
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600847VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600848{
849 char str[1024];
850 if (!pCreateInfo) {
851 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600852 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600853 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600854 else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600855 sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600856 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600857 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600858 VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600859 return result;
860}
861
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600862VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600863{
864 char str[1024];
865 if (!pCreateInfo) {
866 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600867 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600868 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600869 else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600870 sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600871 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600872 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600873 VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600874 return result;
875}
876
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600877VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600878{
879 char str[1024];
880 if (!pCreateInfo) {
881 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600882 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600883 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600884 else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600885 sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600886 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600887 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600888 VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600889 return result;
890}
891
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600892VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600893{
894 char str[1024];
895 if (!pCreateInfo) {
896 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600897 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600898 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600899 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600900 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600901 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600902 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600903 VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600904 return result;
905}
906
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600907VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600908{
909 char str[1024];
910 if (!pCreateInfo) {
911 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600912 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600913 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600914 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600915 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600916 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600917 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600918 VkResult result = nextTable.CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600919 return result;
920}
921
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600922VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600923{
924 char str[1024];
925 if (!pCreateInfo) {
926 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600927 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600928 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600929 else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600930 sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600931 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600932 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600933 VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600934 return result;
935}
936
Mike Stroyan230e6252015-04-17 12:36:38 -0600937VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkDevice device, VkPipeline pipeline, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600938{
939
Mike Stroyan230e6252015-04-17 12:36:38 -0600940 VkResult result = nextTable.StorePipeline(device, pipeline, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600941 return result;
942}
943
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600944VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600945{
946
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600947 VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600948 return result;
949}
950
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600951VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600952{
953
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600954 VkResult result = nextTable.LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600955 return result;
956}
957
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600958VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600959{
960 char str[1024];
961 if (!pCreateInfo) {
962 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600963 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600964 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600965 else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600966 sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600967 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600968 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600969 VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600970 return result;
971}
972
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600973VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600974{
975 char str[1024];
976 if (!pCreateInfo) {
977 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600978 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600979 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600980 else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600981 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600982 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600983 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600984 VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600985 return result;
986}
987
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500988VK_LAYER_EXPORT VkResult VKAPI vkCreatePipelineLayout(VkDevice device, const VkPipelineLayoutCreateInfo* pCreateInfo, VkPipelineLayout* pPipelineLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600989{
Mark Lobodzinski556f7212015-04-17 14:11:39 -0500990 VkResult result = nextTable.CreatePipelineLayout(device, pCreateInfo, pPipelineLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600991 return result;
992}
993
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600994VK_LAYER_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(VkDevice device, VkDescriptorUpdateMode updateMode)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600995{
996 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600997 if (!validate_VkDescriptorUpdateMode(updateMode)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600998 sprintf(str, "Parameter updateMode to function BeginDescriptorPoolUpdate has invalid value of %i.", (int)updateMode);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600999 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001000 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001001 VkResult result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001002 return result;
1003}
1004
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001005VK_LAYER_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(VkDevice device, VkCmdBuffer cmd)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001006{
1007
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001008 VkResult result = nextTable.EndDescriptorPoolUpdate(device, cmd);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001009 return result;
1010}
1011
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001012VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001013{
1014 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001015 if (!validate_VkDescriptorPoolUsage(poolUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001016 sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001017 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001018 }
1019 if (!pCreateInfo) {
1020 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001021 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001022 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001023 else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001024 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001025 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001026 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001027 VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001028 return result;
1029}
1030
Mike Stroyan230e6252015-04-17 12:36:38 -06001031VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDevice device, VkDescriptorPool descriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001032{
1033
Mike Stroyan230e6252015-04-17 12:36:38 -06001034 VkResult result = nextTable.ResetDescriptorPool(device, descriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001035 return result;
1036}
1037
Mike Stroyan230e6252015-04-17 12:36:38 -06001038VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001039{
1040 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001041 if (!validate_VkDescriptorSetUsage(setUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001042 sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001043 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001044 }
Mike Stroyan230e6252015-04-17 12:36:38 -06001045 VkResult result = nextTable.AllocDescriptorSets(device, descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001046 return result;
1047}
1048
Mike Stroyan230e6252015-04-17 12:36:38 -06001049VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001050{
1051
Mike Stroyan230e6252015-04-17 12:36:38 -06001052 nextTable.ClearDescriptorSets(device, descriptorPool, count, pDescriptorSets);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001053}
1054
Mike Stroyan230e6252015-04-17 12:36:38 -06001055VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDevice device, VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001056{
1057
Mike Stroyan230e6252015-04-17 12:36:38 -06001058 nextTable.UpdateDescriptors(device, descriptorSet, updateCount, ppUpdateArray);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001059}
1060
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001061VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001062{
1063 char str[1024];
1064 if (!pCreateInfo) {
1065 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001066 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001067 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001068 else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001069 sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001070 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001071 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001072 VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001073 return result;
1074}
1075
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001076VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001077{
1078 char str[1024];
1079 if (!pCreateInfo) {
1080 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001081 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001082 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001083 else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001084 sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001085 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001086 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001087 VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001088 return result;
1089}
1090
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001091VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001092{
1093 char str[1024];
1094 if (!pCreateInfo) {
1095 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001096 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001097 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001098 else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001099 sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001100 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001101 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001102 VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001103 return result;
1104}
1105
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001106VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001107{
1108 char str[1024];
1109 if (!pCreateInfo) {
1110 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001111 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001112 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001113 else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001114 sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001115 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001116 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001117 VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001118 return result;
1119}
1120
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001121void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001122{
1123 if(device == nullptr)
1124 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001125 char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001126 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001127 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001128 return;
1129 }
1130
1131 if(pCreateInfo == nullptr)
1132 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001133 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001134 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001135 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001136 return;
1137 }
1138
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001139 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001140 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001141 char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\
1142 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition).";
1143 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001144 return;
1145 }
1146}
1147
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001148void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001149{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001150 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001151 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001152 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001153 char const str[] = "vkCreateCommandBuffer failed (postcondition).";
1154 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001155 return;
1156 }
1157
1158 if(pCmdBuffer == nullptr)
1159 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001160 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001161 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001162 return;
1163 }
1164}
1165
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001166VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device,
1167 const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001168{
1169 PreCreateCommandBuffer(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001170 VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001171 PostCreateCommandBuffer(result, pCmdBuffer);
1172 return result;
1173}
1174
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001175VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001176{
1177 char str[1024];
1178 if (!pBeginInfo) {
1179 sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001180 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001181 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001182 else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001183 sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001184 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001185 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001186 VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001187 return result;
1188}
1189
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001190VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001191{
1192
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001193 VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001194 return result;
1195}
1196
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001197VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001198{
1199
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001200 VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001201 return result;
1202}
1203
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001204VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001205{
1206 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001207 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001208 sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001209 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001210 }
1211 nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1212}
1213
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001214VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001215{
1216 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001217 if (!validate_VkStateBindPoint(stateBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001218 sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001219 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001220 }
1221 nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
1222}
1223
Cody Northrop1a01b1d2015-04-16 13:41:56 -06001224VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t firstSet, uint32_t setCount, const VkDescriptorSet* pDescriptorSets, uint32_t dynamicOffsetCount, const uint32_t* pDynamicOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001225{
1226 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001227 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001228 sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001229 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001230 }
Cody Northrop1a01b1d2015-04-16 13:41:56 -06001231 nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, firstSet, setCount, pDescriptorSets, dynamicOffsetCount, pDynamicOffsets);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001232}
1233
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06001234VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffers(
1235 VkCmdBuffer cmdBuffer,
1236 uint32_t startBinding,
1237 uint32_t bindingCount,
1238 const VkBuffer* pBuffers,
Tony Barbour8205d902015-04-16 15:59:00 -06001239 const VkDeviceSize* pOffsets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001240{
Courtney Goeltzenleuchter46962942015-04-16 13:38:46 -06001241 nextTable.CmdBindVertexBuffers(cmdBuffer, startBinding, bindingCount, pBuffers, pOffsets);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001242}
1243
Tony Barbour8205d902015-04-16 15:59:00 -06001244VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, VkIndexType indexType)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001245{
1246 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001247 if (!validate_VkIndexType(indexType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001248 sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001249 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001250 }
1251 nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1252}
1253
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001254VK_LAYER_EXPORT void VKAPI vkCmdDraw(VkCmdBuffer cmdBuffer, uint32_t firstVertex, uint32_t vertexCount, uint32_t firstInstance, uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001255{
1256
1257 nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
1258}
1259
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001260VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexed(VkCmdBuffer cmdBuffer, uint32_t firstIndex, uint32_t indexCount, int32_t vertexOffset, uint32_t firstInstance, uint32_t instanceCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001261{
1262
1263 nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
1264}
1265
Tony Barbour8205d902015-04-16 15:59:00 -06001266VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001267{
1268
1269 nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1270}
1271
Tony Barbour8205d902015-04-16 15:59:00 -06001272VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001273{
1274
1275 nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1276}
1277
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001278VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001279{
1280
1281 nextTable.CmdDispatch(cmdBuffer, x, y, z);
1282}
1283
Tony Barbour8205d902015-04-16 15:59:00 -06001284VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkDeviceSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001285{
1286
1287 nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
1288}
1289
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001290VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001291{
1292 char str[1024];
1293 uint32_t i;
1294 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001295 if (!vk_validate_vkbuffercopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001296 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001297 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001298 }
1299 }
1300 nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1301}
1302
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001303VK_LAYER_EXPORT void VKAPI vkCmdCopyImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001304{
1305 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001306 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001307 sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001308 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001309 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001310 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001311 sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001312 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001313 }
1314 uint32_t i;
1315 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001316 if (!vk_validate_vkimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001317 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001318 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001319 }
1320 }
1321 nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1322}
1323
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001324VK_LAYER_EXPORT void VKAPI vkCmdBlitImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageBlit* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001325{
1326 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001327 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001328 sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001329 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001330 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001331 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001332 sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001333 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001334 }
1335 uint32_t i;
1336 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001337 if (!vk_validate_vkimageblit(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001338 sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001339 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001340 }
1341 }
1342 nextTable.CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1343}
1344
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001345VK_LAYER_EXPORT void VKAPI vkCmdCopyBufferToImage(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001346{
1347 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001348 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001349 sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001350 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001351 }
1352 uint32_t i;
1353 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001354 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001355 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001356 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001357 }
1358 }
1359 nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1360}
1361
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001362VK_LAYER_EXPORT void VKAPI vkCmdCopyImageToBuffer(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkBuffer destBuffer, uint32_t regionCount, const VkBufferImageCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001363{
1364 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001365 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001366 sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001367 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001368 }
1369 uint32_t i;
1370 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001371 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001372 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001373 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001374 }
1375 }
1376 nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1377}
1378
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001379VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001380{
1381 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001382 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001383 sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001384 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001385 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001386 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001387 sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001388 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001389 }
1390 nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
1391}
1392
Tony Barbour8205d902015-04-16 15:59:00 -06001393VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize dataSize, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001394{
1395
1396 nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1397}
1398
Tony Barbour8205d902015-04-16 15:59:00 -06001399VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkDeviceSize destOffset, VkDeviceSize fillSize, uint32_t data)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001400{
1401
1402 nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1403}
1404
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001405VK_LAYER_EXPORT void VKAPI vkCmdClearColorImage(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, VkClearColor color, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001406{
1407 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001408 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001409 sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001410 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001411 }
1412 uint32_t i;
1413 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001414 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001415 sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001416 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001417 }
1418 }
1419 nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, color, rangeCount, pRanges);
1420}
1421
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001422VK_LAYER_EXPORT void VKAPI vkCmdClearDepthStencil(VkCmdBuffer cmdBuffer, VkImage image, VkImageLayout imageLayout, float depth, uint32_t stencil, uint32_t rangeCount, const VkImageSubresourceRange* pRanges)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001423{
1424 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001425 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001426 sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001427 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001428 }
1429 uint32_t i;
1430 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001431 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001432 sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001433 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001434 }
1435 }
1436 nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1437}
1438
Tony Barbour11f74372015-04-13 15:02:52 -06001439VK_LAYER_EXPORT void VKAPI vkCmdResolveImage(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout, uint32_t regionCount, const VkImageResolve* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001440{
1441 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001442 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001443 sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001444 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001445 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001446 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001447 sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001448 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001449 }
1450 uint32_t i;
Tony Barbour11f74372015-04-13 15:02:52 -06001451 for (i = 0; i < regionCount; i++) {
1452 if (!vk_validate_vkimageresolve(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001453 sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001454 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001455 }
1456 }
Tony Barbour11f74372015-04-13 15:02:52 -06001457 nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001458}
1459
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001460VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001461{
1462 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001463 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001464 sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001465 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001466 }
1467 nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
1468}
1469
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001470VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001471{
1472 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001473 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001474 sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001475 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001476 }
1477 nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
1478}
1479
Tony Barbour8205d902015-04-16 15:59:00 -06001480VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t eventCount, const VkEvent* pEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001481{
Tony Barbour8205d902015-04-16 15:59:00 -06001482 nextTable.CmdWaitEvents(cmdBuffer, waitEvent, eventCount, pEvents, memBarrierCount, ppMemBarriers);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001483}
1484
Tony Barbour8205d902015-04-16 15:59:00 -06001485VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, VkWaitEvent waitEvent, uint32_t pipeEventCount, const VkPipeEvent* pPipeEvents, uint32_t memBarrierCount, const void** ppMemBarriers)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001486{
Tony Barbour8205d902015-04-16 15:59:00 -06001487 nextTable.CmdPipelineBarrier(cmdBuffer, waitEvent, pipeEventCount, pPipeEvents, memBarrierCount, ppMemBarriers);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001488}
1489
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001490VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001491{
1492
1493 nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1494}
1495
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001496VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001497{
1498
1499 nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
1500}
1501
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001502VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001503{
1504
1505 nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1506}
1507
Tony Barbour8205d902015-04-16 15:59:00 -06001508VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkDeviceSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001509{
1510 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001511 if (!validate_VkTimestampType(timestampType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001512 sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001513 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001514 }
1515 nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
1516}
1517
Jeremy Hayescf469132015-04-17 10:36:53 -06001518VK_LAYER_EXPORT void VKAPI vkCmdCopyQueryPoolResults(
1519 VkCmdBuffer cmdBuffer,
1520 VkQueryPool queryPool,
1521 uint32_t startQuery,
1522 uint32_t queryCount,
1523 VkBuffer destBuffer,
1524 VkDeviceSize destOffset,
1525 VkDeviceSize destStride,
1526 VkQueryResultFlags flags)
1527{
1528 nextTable.CmdCopyQueryPoolResults(cmdBuffer, queryPool, startQuery, queryCount, destBuffer, destOffset, destStride, flags);
1529}
1530
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001531VK_LAYER_EXPORT void VKAPI vkCmdInitAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001532{
1533 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001534 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001535 sprintf(str, "Parameter pipelineBindPoint to function CmdInitAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001536 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001537 }
1538 nextTable.CmdInitAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, pData);
1539}
1540
Tony Barbour8205d902015-04-16 15:59:00 -06001541VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkDeviceSize srcOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001542{
1543 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001544 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001545 sprintf(str, "Parameter pipelineBindPoint to function CmdLoadAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001546 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001547 }
1548 nextTable.CmdLoadAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, srcBuffer, srcOffset);
1549}
1550
Tony Barbour8205d902015-04-16 15:59:00 -06001551VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkDeviceSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001552{
1553 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001554 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001555 sprintf(str, "Parameter pipelineBindPoint to function CmdSaveAtomicCounters has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001556 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001557 }
1558 nextTable.CmdSaveAtomicCounters(cmdBuffer, pipelineBindPoint, startCounter, counterCount, destBuffer, destOffset);
1559}
1560
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001561VK_LAYER_EXPORT VkResult VKAPI vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, VkFramebuffer* pFramebuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001562{
1563 char str[1024];
1564 if (!pCreateInfo) {
1565 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFramebuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001566 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001567 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001568 else if (!vk_validate_vkframebuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001569 sprintf(str, "Parameter pCreateInfo to function CreateFramebuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001570 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001571 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001572 VkResult result = nextTable.CreateFramebuffer(device, pCreateInfo, pFramebuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001573 return result;
1574}
1575
1576
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001577void PreCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001578{
1579 if(pCreateInfo == nullptr)
1580 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001581 char const str[] = "vkCreateRenderPass parameter, VkRenderPassCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001582 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001583 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001584 return;
1585 }
1586
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001587 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001588 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001589 char const str[] = "vkCreateRenderPass parameter, VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO "\
1590 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO (precondition).";
1591 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001592 return;
1593 }
1594
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001595 if(!vk_validate_vkrect(&pCreateInfo->renderArea))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001596 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001597 char const str[] = "vkCreateRenderPass parameter, VkRect pCreateInfo->renderArea, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001598 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001599 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001600 return;
1601 }
1602
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001603 if(!vk_validate_vkextent2d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001604 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001605 char const str[] = "vkCreateRenderPass parameter, VkExtent2D pCreateInfo->extent, is invalid "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001606 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001607 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001608 return;
1609 }
1610
1611 if(pCreateInfo->pColorFormats == nullptr)
1612 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001613 char const str[] = "vkCreateRenderPass parameter, VkFormat* pCreateInfo->pColorFormats, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001614 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001615 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001616 return;
1617 }
1618
1619 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1620 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001621 if(!validate_VkFormat(pCreateInfo->pColorFormats[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001622 {
1623 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001624 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001625 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001626 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001627 continue;
1628 }
1629
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001630 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001631 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001632 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->pColorFormats[i],
Tony Barbour8205d902015-04-16 15:59:00 -06001633 VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001634 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001635 {
1636 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001637 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001638 "], cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001639 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001640 continue;
1641 }
1642
1643 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1644 {
1645 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001646 ss << "vkCreateRenderPass parameter, VkFormat pCreateInfo->pColorFormats[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001647 "], contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001648 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001649 continue;
1650 }
1651
1652 }
1653
1654 if(pCreateInfo->pColorLayouts == nullptr)
1655 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001656 char const str[] = "vkCreateRenderPass parameter, VkImageLayout* pCreateInfo->pColorLayouts, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001657 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001658 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001659 return;
1660 }
1661
1662 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1663 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001664 if(!validate_VkImageLayout(pCreateInfo->pColorLayouts[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001665 {
1666 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001667 ss << "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->pColorLayouts[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001668 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001669 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001670 continue;
1671 }
1672 }
1673
1674 if(pCreateInfo->pColorLoadOps == nullptr)
1675 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001676 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp* pCreateInfo->pColorLoadOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001677 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001678 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001679 return;
1680 }
1681
1682 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1683 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001684 if(!validate_VkAttachmentLoadOp(pCreateInfo->pColorLoadOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001685 {
1686 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001687 ss << "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->pColorLoadOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001688 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001689 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001690 continue;
1691 }
1692 }
1693
1694 if(pCreateInfo->pColorStoreOps == nullptr)
1695 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001696 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp* pCreateInfo->pColorStoreOps, "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001697 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001698 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001699 return;
1700 }
1701
1702 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1703 {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001704 if(!validate_VkAttachmentStoreOp(pCreateInfo->pColorStoreOps[i]))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001705 {
1706 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001707 ss << "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->pColorStoreOps[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001708 "], is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001709 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001710 continue;
1711 }
1712 }
1713
1714 if(pCreateInfo->pColorLoadClearValues == nullptr)
1715 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001716 char const str[] = "vkCreateRenderPass parameter, VkClearColor* pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001717 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001718 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001719 return;
1720 }
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001721
1722 if(pCreateInfo->pColorStoreOps == nullptr)
1723 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001724 char const str[] = "vkCreateRenderPass parameter, VK_ATTACHMENT_STORE_OP* pCreateInfo->pColorStoreOps, "\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001725 "is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001726 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001727 return;
1728 }
1729
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001730 if(pCreateInfo->pColorLoadClearValues == nullptr)
1731 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001732 char const str[] = "vkCreateRenderPass parameter, VK_CLEAR_COLOR* pCreateInfo->"\
Jeremy Hayes9bafb9f2015-04-07 13:38:03 -06001733 "pColorLoadClearValues, is nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001734 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayes6b7060b2015-04-07 09:49:05 -06001735 return;
1736 }
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001737
1738 for(uint32_t i = 0; i < pCreateInfo->colorAttachmentCount; ++i)
1739 {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001740 if(!vk_validate_vkclearcolor(&(pCreateInfo->pColorLoadClearValues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001741 {
1742 std::stringstream ss;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001743 ss << "vkCreateRenderPass parameter, VkClearColor pCreateInfo->pColorLoadClearValues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001744 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001745 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001746 continue;
1747 }
1748 }
1749
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001750 if(!validate_VkFormat(pCreateInfo->depthStencilFormat))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001751 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001752 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001753 "depthStencilFormat, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001754 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001755 return;
1756 }
1757
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001758 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001759 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001760 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->depthStencilFormat,
Tony Barbour8205d902015-04-16 15:59:00 -06001761 VK_FORMAT_INFO_TYPE_PROPERTIES, &size, &properties);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001762 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001763 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001764 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001765 "depthStencilFormat, cannot be validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001766 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001767 return;
1768 }
1769
1770 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
1771 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001772 char const str[] = "vkCreateRenderPass parameter, VkFormat pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001773 "depthStencilFormat, contains unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001774 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001775 return;
1776 }
1777
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001778 if(!validate_VkImageLayout(pCreateInfo->depthStencilLayout))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001779 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001780 char const str[] = "vkCreateRenderPass parameter, VkImageLayout pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001781 "depthStencilLayout, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001782 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001783 return;
1784 }
1785
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001786 if(!validate_VkAttachmentLoadOp(pCreateInfo->depthLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001787 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001788 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001789 "depthLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001790 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001791 return;
1792 }
1793
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001794 if(!validate_VkAttachmentStoreOp(pCreateInfo->depthStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001795 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001796 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001797 "depthStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001798 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001799 return;
1800 }
1801
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001802 if(!validate_VkAttachmentLoadOp(pCreateInfo->stencilLoadOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001803 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001804 char const str[] = "vkCreateRenderPass parameter, VkAttachmentLoadOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001805 "stencilLoadOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001806 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001807 return;
1808 }
1809
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001810 if(!validate_VkAttachmentStoreOp(pCreateInfo->stencilStoreOp))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001811 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001812 char const str[] = "vkCreateRenderPass parameter, VkAttachmentStoreOp pCreateInfo->"\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001813 "stencilStoreOp, is unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001814 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001815 return;
1816 }
1817}
1818
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001819void PostCreateRenderPass(VkResult result, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001820{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001821 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001822 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001823 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001824 char const str[] = "vkCreateRenderPass failed (postcondition).";
1825 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001826 return;
1827 }
1828
1829 if(pRenderPass == nullptr)
1830 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001831 char const str[] = "vkCreateRenderPass parameter, VkRenderPass* pRenderPass, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001832 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001833 return;
1834 }
1835}
1836
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001837VK_LAYER_EXPORT VkResult VKAPI vkCreateRenderPass(VkDevice device, const VkRenderPassCreateInfo* pCreateInfo, VkRenderPass* pRenderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001838{
1839 PreCreateRenderPass(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001840 VkResult result = nextTable.CreateRenderPass(device, pCreateInfo, pRenderPass);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001841 PostCreateRenderPass(result, pRenderPass);
1842 return result;
1843}
1844
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001845VK_LAYER_EXPORT void VKAPI vkCmdBeginRenderPass(VkCmdBuffer cmdBuffer, const VkRenderPassBegin* pRenderPassBegin)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001846{
1847 char str[1024];
1848 if (!pRenderPassBegin) {
1849 sprintf(str, "Struct ptr parameter pRenderPassBegin to function CmdBeginRenderPass is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001850 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001851 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001852 else if (!vk_validate_vkrenderpassbegin(pRenderPassBegin)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001853 sprintf(str, "Parameter pRenderPassBegin to function CmdBeginRenderPass contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001854 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001855 }
1856 nextTable.CmdBeginRenderPass(cmdBuffer, pRenderPassBegin);
1857}
1858
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001859VK_LAYER_EXPORT void VKAPI vkCmdEndRenderPass(VkCmdBuffer cmdBuffer, VkRenderPass renderPass)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001860{
1861
1862 nextTable.CmdEndRenderPass(cmdBuffer, renderPass);
1863}
1864
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001865VK_LAYER_EXPORT VkResult VKAPI vkDbgSetValidationLevel(VkDevice device, VkValidationLevel validationLevel)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001866{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001867 VkResult result = nextTable.DbgSetValidationLevel(device, validationLevel);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001868 return result;
1869}
1870
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001871VK_LAYER_EXPORT VkResult VKAPI vkDbgRegisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback, void* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001872{
1873 // This layer intercepts callbacks
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001874 VK_LAYER_DBG_FUNCTION_NODE *pNewDbgFuncNode = (VK_LAYER_DBG_FUNCTION_NODE*)malloc(sizeof(VK_LAYER_DBG_FUNCTION_NODE));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001875 if (!pNewDbgFuncNode)
Tony Barbour8205d902015-04-16 15:59:00 -06001876 return VK_ERROR_OUT_OF_HOST_MEMORY;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001877 pNewDbgFuncNode->pfnMsgCallback = pfnMsgCallback;
1878 pNewDbgFuncNode->pUserData = pUserData;
1879 pNewDbgFuncNode->pNext = g_pDbgFunctionHead;
1880 g_pDbgFunctionHead = pNewDbgFuncNode;
1881 // force callbacks if DebugAction hasn't been set already other than initial value
1882 if (g_actionIsDefault) {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001883 g_debugAction = VK_DBG_LAYER_ACTION_CALLBACK;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001884 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001885 VkResult result = nextTable.DbgRegisterMsgCallback(instance, pfnMsgCallback, pUserData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001886 return result;
1887}
1888
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001889VK_LAYER_EXPORT VkResult VKAPI vkDbgUnregisterMsgCallback(VkInstance instance, VK_DBG_MSG_CALLBACK_FUNCTION pfnMsgCallback)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001890{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001891 VK_LAYER_DBG_FUNCTION_NODE *pTrav = g_pDbgFunctionHead;
1892 VK_LAYER_DBG_FUNCTION_NODE *pPrev = pTrav;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001893 while (pTrav) {
1894 if (pTrav->pfnMsgCallback == pfnMsgCallback) {
1895 pPrev->pNext = pTrav->pNext;
1896 if (g_pDbgFunctionHead == pTrav)
1897 g_pDbgFunctionHead = pTrav->pNext;
1898 free(pTrav);
1899 break;
1900 }
1901 pPrev = pTrav;
1902 pTrav = pTrav->pNext;
1903 }
1904 if (g_pDbgFunctionHead == NULL)
1905 {
1906 if (g_actionIsDefault)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001907 g_debugAction = VK_DBG_LAYER_ACTION_LOG_MSG;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001908 else
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001909 g_debugAction = (VK_LAYER_DBG_ACTION)(g_debugAction & ~((uint32_t)VK_DBG_LAYER_ACTION_CALLBACK));
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001910 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001911 VkResult result = nextTable.DbgUnregisterMsgCallback(instance, pfnMsgCallback);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001912 return result;
1913}
1914
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001915VK_LAYER_EXPORT VkResult VKAPI vkDbgSetMessageFilter(VkDevice device, int32_t msgCode, VK_DBG_MSG_FILTER filter)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001916{
1917
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001918 VkResult result = nextTable.DbgSetMessageFilter(device, msgCode, filter);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001919 return result;
1920}
1921
Mike Stroyan230e6252015-04-17 12:36:38 -06001922VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkDevice device, VkObject object, size_t tagSize, const void* pTag)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001923{
1924
Mike Stroyan230e6252015-04-17 12:36:38 -06001925 VkResult result = nextTable.DbgSetObjectTag(device, object, tagSize, pTag);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001926 return result;
1927}
1928
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001929VK_LAYER_EXPORT VkResult VKAPI vkDbgSetGlobalOption(VkInstance instance, VK_DBG_GLOBAL_OPTION dbgOption, size_t dataSize, const void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001930{
1931
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001932 VkResult result = nextTable.DbgSetGlobalOption(instance, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001933 return result;
1934}
1935
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001936VK_LAYER_EXPORT VkResult VKAPI vkDbgSetDeviceOption(VkDevice device, VK_DBG_DEVICE_OPTION dbgOption, size_t dataSize, const void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001937{
1938
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001939 VkResult result = nextTable.DbgSetDeviceOption(device, dbgOption, dataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001940 return result;
1941}
1942
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001943VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerBegin(VkCmdBuffer cmdBuffer, const char* pMarker)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001944{
1945
1946 nextTable.CmdDbgMarkerBegin(cmdBuffer, pMarker);
1947}
1948
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001949VK_LAYER_EXPORT void VKAPI vkCmdDbgMarkerEnd(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001950{
1951
1952 nextTable.CmdDbgMarkerEnd(cmdBuffer);
1953}
1954
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001955VK_LAYER_EXPORT VkResult VKAPI vkGetDisplayInfoWSI(VkDisplayWSI display, VkDisplayInfoTypeWSI infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001956{
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001957 VkResult result = nextTable.GetDisplayInfoWSI(display, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001958 return result;
1959}
1960
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001961VK_LAYER_EXPORT VkResult VKAPI vkCreateSwapChainWSI(VkDevice device, const VkSwapChainCreateInfoWSI* pCreateInfo, VkSwapChainWSI* pSwapChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001962{
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001963 VkResult result = nextTable.CreateSwapChainWSI(device, pCreateInfo, pSwapChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001964 return result;
1965}
1966
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001967VK_LAYER_EXPORT VkResult VKAPI vkDestroySwapChainWSI(VkSwapChainWSI swapChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001968{
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001969 VkResult result = nextTable.DestroySwapChainWSI(swapChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001970 return result;
1971}
1972
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001973VK_LAYER_EXPORT VkResult VKAPI vkGetSwapChainInfoWSI(VkSwapChainWSI swapChain, VkSwapChainInfoTypeWSI infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001974{
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001975 VkResult result = nextTable.GetSwapChainInfoWSI(swapChain, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001976 return result;
1977}
1978
Chia-I Wu5b66aa52015-04-16 22:02:10 +08001979VK_LAYER_EXPORT VkResult VKAPI vkQueuePresentWSI(VkQueue queue, const VkPresentInfoWSI* pPresentInfo)
1980{
1981 VkResult result = nextTable.QueuePresentWSI(queue, pPresentInfo);
1982 return result;
1983}
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001984
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001985#include "vk_generic_intercept_proc_helper.h"
Tony Barbour8205d902015-04-16 15:59:00 -06001986VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalDevice gpu, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001987{
Jon Ashburn301c5f02015-04-06 10:58:22 -06001988 VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001989 void* addr;
1990 if (gpu == NULL)
1991 return NULL;
1992 pCurObj = gpuw;
1993 loader_platform_thread_once(&tabOnce, initParamChecker);
1994
1995 addr = layer_intercept_proc(funcName);
1996 if (addr)
1997 return addr;
1998 else {
1999 if (gpuw->pGPA == NULL)
2000 return NULL;
Tony Barbour8205d902015-04-16 15:59:00 -06002001 return gpuw->pGPA((VkPhysicalDevice)gpuw->nextObject, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002002 }
2003}
2004