blob: 2fe5ee5ecee9882d723796a71a810da6ff876600 [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
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -060071 layer_initialize_dispatch_table(&nextTable, fpNextGPA, (VkPhysicalGpu) 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
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600142VK_LAYER_EXPORT VkResult VKAPI vkEnumerateGpus(VkInstance instance, uint32_t maxGpus, uint32_t* pGpuCount, VkPhysicalGpu* pGpus)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600143{
144
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600145 VkResult result = nextTable.EnumerateGpus(instance, maxGpus, pGpuCount, pGpus);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600146 return result;
147}
148
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600149VK_LAYER_EXPORT VkResult VKAPI vkGetGpuInfo(VkPhysicalGpu gpu, VkPhysicalGpuInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600150{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600151 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600152 loader_platform_thread_once(&tabOnce, initParamChecker);
153 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600154 if (!validate_VkPhysicalGpuInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600155 sprintf(str, "Parameter infoType to function GetGpuInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600156 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600157 }
Jon Ashburn630e44f2015-04-08 21:33:34 -0600158 VkResult result = nextTable.GetGpuInfo(gpu, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600159 return result;
160}
161
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600162void PreCreateDevice(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600163{
164 if(gpu == nullptr)
165 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600166 char const str[] = "vkCreateDevice parameter, VkPhysicalGpu gpu, is nullptr "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600167 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600168 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600169 return;
170 }
171
172 if(pCreateInfo == nullptr)
173 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600174 char const str[] = "vkCreateDevice parameter, VkDeviceCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600175 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600176 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600177 return;
178 }
179
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600180 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600181 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600182 char const str[] = "vkCreateDevice parameter, VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO "\
183 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO (precondition).";
184 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600185 return;
186 }
187
188 if(pCreateInfo->queueRecordCount == 0)
189 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600190 char const str[] = "vkCreateDevice parameter, uint32_t pCreateInfo->queueRecordCount, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600191 "zero (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600192 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600193 return;
194 }
195
196 if(pCreateInfo->pRequestedQueues == nullptr)
197 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600198 char const str[] = "vkCreateDevice parameter, VkDeviceQueueCreateInfo* pCreateInfo->pRequestedQueues, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600199 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600200 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600201 return;
202 }
203
204 for(uint32_t i = 0; i < pCreateInfo->queueRecordCount; ++i)
205 {
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600206 if(!vk_validate_vkdevicequeuecreateinfo(&(pCreateInfo->pRequestedQueues[i])))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600207 {
208 std::stringstream ss;
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600209 ss << "vkCreateDevice parameter, VkDeviceQueueCreateInfo pCreateInfo->pRequestedQueues[" << i <<
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600210 "], is invalid (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600211 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", ss.str().c_str());
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600212 continue;
213 }
214 }
215
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600216}
217
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600218void PostCreateDevice(VkResult result, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600219{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600220 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600221 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600222 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600223 char const str[] = "vkCreateDevice failed (postcondition).";
224 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 if(pDevice == nullptr)
229 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600230 char const str[] = "vkCreateDevice parameter, VkDevice* pDevice, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600231 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600232 return;
233 }
234}
235
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600236VK_LAYER_EXPORT VkResult VKAPI vkCreateDevice(VkPhysicalGpu gpu, const VkDeviceCreateInfo* pCreateInfo, VkDevice* pDevice)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600237{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600238 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600239 loader_platform_thread_once(&tabOnce, initParamChecker);
240 PreCreateDevice(gpu, pCreateInfo);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600241 VkResult result = nextTable.CreateDevice(gpu, pCreateInfo, pDevice);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600242 PostCreateDevice(result, pDevice);
243 return result;
244}
245
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600246VK_LAYER_EXPORT VkResult VKAPI vkDestroyDevice(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600247{
248
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600249 VkResult result = nextTable.DestroyDevice(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600250 return result;
251}
252
Jon Ashburneb2728b2015-04-10 14:33:07 -0600253struct extProps {
254 uint32_t version;
255 const char * const name;
256};
257
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600258#define PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE 2
Jon Ashburneb2728b2015-04-10 14:33:07 -0600259static const struct extProps pcExts[PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE] = {
260 // TODO what is the version?
261 0x10, "ParamChecker",
Jon Ashburnbdcd7562015-04-14 14:12:59 -0600262 0x10, "Validation",
Jon Ashburneb2728b2015-04-10 14:33:07 -0600263};
264
265VK_LAYER_EXPORT VkResult VKAPI vkGetGlobalExtensionInfo(
266 VkExtensionInfoType infoType,
267 uint32_t extensionIndex,
268 size_t* pDataSize,
269 void* pData)
270{
271 VkResult result;
272
273 /* This entrypoint is NOT going to init it's own dispatch table since loader calls here early */
274 VkExtensionProperties *ext_props;
275 uint32_t *count;
276
277 if (pDataSize == NULL)
278 return VK_ERROR_INVALID_POINTER;
279
280 switch (infoType) {
281 case VK_EXTENSION_INFO_TYPE_COUNT:
282 *pDataSize = sizeof(uint32_t);
283 if (pData == NULL)
284 return VK_SUCCESS;
285 count = (uint32_t *) pData;
286 *count = PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE;
287 break;
288 case VK_EXTENSION_INFO_TYPE_PROPERTIES:
289 *pDataSize = sizeof(VkExtensionProperties);
290 if (pData == NULL)
291 return VK_SUCCESS;
292 if (extensionIndex >= PARAM_CHECKER_LAYER_EXT_ARRAY_SIZE)
293 return VK_ERROR_INVALID_VALUE;
294 ext_props = (VkExtensionProperties *) pData;
295 ext_props->version = pcExts[extensionIndex].version;
296 strncpy(ext_props->extName, pcExts[extensionIndex].name,
297 VK_MAX_EXTENSION_NAME);
298 ext_props->extName[VK_MAX_EXTENSION_NAME - 1] = '\0';
299 break;
300 default:
301 return VK_ERROR_INVALID_VALUE;
302 };
303
304 return VK_SUCCESS;
305}
306
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600307VK_LAYER_EXPORT VkResult VKAPI vkGetExtensionSupport(VkPhysicalGpu gpu, const char* pExtName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600308{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600309 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600310 loader_platform_thread_once(&tabOnce, initParamChecker);
311
Jon Ashburn630e44f2015-04-08 21:33:34 -0600312 VkResult result = nextTable.GetExtensionSupport(gpu, pExtName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600313 return result;
314}
315
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600316VK_LAYER_EXPORT VkResult VKAPI vkEnumerateLayers(VkPhysicalGpu gpu, size_t maxLayerCount, size_t maxStringSize, size_t* pOutLayerCount, char* const* pOutLayers, void* pReserved)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600317{
318 char str[1024];
319 if (gpu != NULL) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600320 sprintf(str, "At start of 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);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600322 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600323 loader_platform_thread_once(&tabOnce, initParamChecker);
Jon Ashburn630e44f2015-04-08 21:33:34 -0600324 VkResult result = nextTable.EnumerateLayers(gpu, maxLayerCount, maxStringSize, pOutLayerCount, pOutLayers, pReserved);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600325 sprintf(str, "Completed layered EnumerateLayers\n");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600326 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, nullptr, 0, 0, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600327 fflush(stdout);
328 return result;
329 } else {
330 if (pOutLayerCount == NULL || pOutLayers == NULL || pOutLayers[0] == NULL)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600331 return VK_ERROR_INVALID_POINTER;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600332 // This layer compatible with all GPUs
333 *pOutLayerCount = 1;
334 strncpy(pOutLayers[0], "ParamChecker", maxStringSize);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600335 return VK_SUCCESS;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600336 }
337}
338
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600339VK_LAYER_EXPORT VkResult VKAPI vkGetDeviceQueue(VkDevice device, uint32_t queueNodeIndex, uint32_t queueIndex, VkQueue* pQueue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600340{
341
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600342 VkResult result = nextTable.GetDeviceQueue(device, queueNodeIndex, queueIndex, pQueue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600343 return result;
344}
345
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600346VK_LAYER_EXPORT VkResult VKAPI vkQueueSubmit(VkQueue queue, uint32_t cmdBufferCount, const VkCmdBuffer* pCmdBuffers, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600347{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600348 VkResult result = nextTable.QueueSubmit(queue, cmdBufferCount, pCmdBuffers, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600349 return result;
350}
351
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600352VK_LAYER_EXPORT VkResult VKAPI vkQueueAddMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600353{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600354 VkResult result = nextTable.QueueAddMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600355 return result;
356}
357
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600358VK_LAYER_EXPORT VkResult VKAPI vkQueueRemoveMemReference(VkQueue queue, VkGpuMemory mem)
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600359{
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600360 VkResult result = nextTable.QueueRemoveMemReference(queue, mem);
Courtney Goeltzenleuchterd44573e2015-04-08 13:57:08 -0600361 return result;
362}
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600363VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitIdle(VkQueue queue)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600364{
365
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600366 VkResult result = nextTable.QueueWaitIdle(queue);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600367 return result;
368}
369
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600370VK_LAYER_EXPORT VkResult VKAPI vkDeviceWaitIdle(VkDevice device)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600371{
372
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600373 VkResult result = nextTable.DeviceWaitIdle(device);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600374 return result;
375}
376
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600377VK_LAYER_EXPORT VkResult VKAPI vkAllocMemory(VkDevice device, const VkMemoryAllocInfo* pAllocInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600378{
379 char str[1024];
380 if (!pAllocInfo) {
381 sprintf(str, "Struct ptr parameter pAllocInfo to function AllocMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600382 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600383 } else if (!vk_validate_vkmemoryallocinfo(pAllocInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600384 sprintf(str, "Parameter pAllocInfo to function AllocMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600385 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600386 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600387 VkResult result = nextTable.AllocMemory(device, pAllocInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600388 return result;
389}
390
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600391VK_LAYER_EXPORT VkResult VKAPI vkFreeMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600392{
393
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600394 VkResult result = nextTable.FreeMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600395 return result;
396}
397
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600398VK_LAYER_EXPORT VkResult VKAPI vkSetMemoryPriority(VkGpuMemory mem, VkMemoryPriority priority)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600399{
400 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600401 if (!validate_VkMemoryPriority(priority)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600402 sprintf(str, "Parameter priority to function SetMemoryPriority has invalid value of %i.", (int)priority);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600403 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600404 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600405 VkResult result = nextTable.SetMemoryPriority(mem, priority);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600406 return result;
407}
408
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600409VK_LAYER_EXPORT VkResult VKAPI vkMapMemory(VkGpuMemory mem, VkFlags flags, void** ppData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600410{
411
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600412 VkResult result = nextTable.MapMemory(mem, flags, ppData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600413 return result;
414}
415
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600416VK_LAYER_EXPORT VkResult VKAPI vkUnmapMemory(VkGpuMemory mem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600417{
418
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600419 VkResult result = nextTable.UnmapMemory(mem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600420 return result;
421}
422
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600423VK_LAYER_EXPORT VkResult VKAPI vkPinSystemMemory(VkDevice device, const void* pSysMem, size_t memSize, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600424{
425
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600426 VkResult result = nextTable.PinSystemMemory(device, pSysMem, memSize, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600427 return result;
428}
429
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600430VK_LAYER_EXPORT VkResult VKAPI vkGetMultiGpuCompatibility(VkPhysicalGpu gpu0, VkPhysicalGpu gpu1, VkGpuCompatibilityInfo* pInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600431{
Jon Ashburn630e44f2015-04-08 21:33:34 -0600432 pCurObj = (VkBaseLayerObject *) gpu0;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600433 loader_platform_thread_once(&tabOnce, initParamChecker);
434
Jon Ashburn630e44f2015-04-08 21:33:34 -0600435 VkResult result = nextTable.GetMultiGpuCompatibility(gpu0, gpu1, pInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600436 return result;
437}
438
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600439VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedMemory(VkDevice device, const VkMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600440{
441 char str[1024];
442 if (!pOpenInfo) {
443 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600444 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600445 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600446 else if (!vk_validate_vkmemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600447 sprintf(str, "Parameter pOpenInfo to function OpenSharedMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600448 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600449 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600450 VkResult result = nextTable.OpenSharedMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600451 return result;
452}
453
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600454VK_LAYER_EXPORT VkResult VKAPI vkOpenSharedSemaphore(VkDevice device, const VkSemaphoreOpenInfo* pOpenInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600455{
456 char str[1024];
457 if (!pOpenInfo) {
458 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenSharedSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600459 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600460 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600461 else if (!vk_validate_vksemaphoreopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600462 sprintf(str, "Parameter pOpenInfo to function OpenSharedSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600463 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600464 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600465 VkResult result = nextTable.OpenSharedSemaphore(device, pOpenInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600466 return result;
467}
468
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600469VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerMemory(VkDevice device, const VkPeerMemoryOpenInfo* pOpenInfo, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600470{
471 char str[1024];
472 if (!pOpenInfo) {
473 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerMemory is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600474 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600475 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600476 else if (!vk_validate_vkpeermemoryopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600477 sprintf(str, "Parameter pOpenInfo to function OpenPeerMemory contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600478 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600479 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600480 VkResult result = nextTable.OpenPeerMemory(device, pOpenInfo, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600481 return result;
482}
483
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600484VK_LAYER_EXPORT VkResult VKAPI vkOpenPeerImage(VkDevice device, const VkPeerImageOpenInfo* pOpenInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600485{
486 char str[1024];
487 if (!pOpenInfo) {
488 sprintf(str, "Struct ptr parameter pOpenInfo to function OpenPeerImage is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600489 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600490 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600491 else if (!vk_validate_vkpeerimageopeninfo(pOpenInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600492 sprintf(str, "Parameter pOpenInfo to function OpenPeerImage contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600493 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600494 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600495 VkResult result = nextTable.OpenPeerImage(device, pOpenInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600496 return result;
497}
498
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600499VK_LAYER_EXPORT VkResult VKAPI vkDestroyObject(VkObject object)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600500{
501
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600502 VkResult result = nextTable.DestroyObject(object);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600503 return result;
504}
505
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600506VK_LAYER_EXPORT VkResult VKAPI vkGetObjectInfo(VkBaseObject object, VkObjectInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600507{
508 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600509 if (!validate_VkObjectInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600510 sprintf(str, "Parameter infoType to function GetObjectInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600511 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600512 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600513 VkResult result = nextTable.GetObjectInfo(object, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600514 return result;
515}
516
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600517VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemory(VkObject object, uint32_t allocationIdx, VkGpuMemory mem, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600518{
519
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600520 VkResult result = nextTable.BindObjectMemory(object, allocationIdx, mem, offset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600521 return result;
522}
523
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600524VK_LAYER_EXPORT VkResult VKAPI vkBindObjectMemoryRange(VkObject object, uint32_t allocationIdx, VkGpuSize rangeOffset, VkGpuSize rangeSize, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600525{
526
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600527 VkResult result = nextTable.BindObjectMemoryRange(object, allocationIdx, rangeOffset, rangeSize, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600528 return result;
529}
530
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600531VK_LAYER_EXPORT VkResult VKAPI vkBindImageMemoryRange(VkImage image, uint32_t allocationIdx, const VkImageMemoryBindInfo* bindInfo, VkGpuMemory mem, VkGpuSize memOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600532{
533 char str[1024];
534 if (!bindInfo) {
535 sprintf(str, "Struct ptr parameter bindInfo to function BindImageMemoryRange is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600536 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600537 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600538 else if (!vk_validate_vkimagememorybindinfo(bindInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600539 sprintf(str, "Parameter bindInfo to function BindImageMemoryRange contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600540 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600541 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600542 VkResult result = nextTable.BindImageMemoryRange(image, allocationIdx, bindInfo, mem, memOffset);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600543 return result;
544}
545
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600546VK_LAYER_EXPORT VkResult VKAPI vkCreateFence(VkDevice device, const VkFenceCreateInfo* pCreateInfo, VkFence* pFence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600547{
548 char str[1024];
549 if (!pCreateInfo) {
550 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateFence is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600551 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600552 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600553 else if (!vk_validate_vkfencecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600554 sprintf(str, "Parameter pCreateInfo to function CreateFence contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600555 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600556 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600557 VkResult result = nextTable.CreateFence(device, pCreateInfo, pFence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600558 return result;
559}
560
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600561VK_LAYER_EXPORT VkResult VKAPI vkGetFenceStatus(VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600562{
563
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600564 VkResult result = nextTable.GetFenceStatus(fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600565 return result;
566}
567
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600568VK_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 -0600569{
570
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600571 VkResult result = nextTable.WaitForFences(device, fenceCount, pFences, waitAll, timeout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600572 return result;
573}
574
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600575VK_LAYER_EXPORT VkResult VKAPI vkResetFences(VkDevice device, uint32_t fenceCount, VkFence* pFences)
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500576{
577
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600578 VkResult result = nextTable.ResetFences(device, fenceCount, pFences);
Mark Lobodzinskiebe814d2015-04-07 16:07:57 -0500579 return result;
580}
581
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600582VK_LAYER_EXPORT VkResult VKAPI vkCreateSemaphore(VkDevice device, const VkSemaphoreCreateInfo* pCreateInfo, VkSemaphore* pSemaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600583{
584 char str[1024];
585 if (!pCreateInfo) {
586 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSemaphore is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600587 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600588 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600589 else if (!vk_validate_vksemaphorecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600590 sprintf(str, "Parameter pCreateInfo to function CreateSemaphore contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600591 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600592 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600593 VkResult result = nextTable.CreateSemaphore(device, pCreateInfo, pSemaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600594 return result;
595}
596
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600597VK_LAYER_EXPORT VkResult VKAPI vkQueueSignalSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600598{
599
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600600 VkResult result = nextTable.QueueSignalSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600601 return result;
602}
603
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600604VK_LAYER_EXPORT VkResult VKAPI vkQueueWaitSemaphore(VkQueue queue, VkSemaphore semaphore)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600605{
606
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600607 VkResult result = nextTable.QueueWaitSemaphore(queue, semaphore);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600608 return result;
609}
610
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600611VK_LAYER_EXPORT VkResult VKAPI vkCreateEvent(VkDevice device, const VkEventCreateInfo* pCreateInfo, VkEvent* pEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600612{
613 char str[1024];
614 if (!pCreateInfo) {
615 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateEvent is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600616 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600617 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600618 else if (!vk_validate_vkeventcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600619 sprintf(str, "Parameter pCreateInfo to function CreateEvent contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600620 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600621 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600622 VkResult result = nextTable.CreateEvent(device, pCreateInfo, pEvent);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600623 return result;
624}
625
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600626VK_LAYER_EXPORT VkResult VKAPI vkGetEventStatus(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600627{
628
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600629 VkResult result = nextTable.GetEventStatus(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600630 return result;
631}
632
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600633VK_LAYER_EXPORT VkResult VKAPI vkSetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600634{
635
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600636 VkResult result = nextTable.SetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600637 return result;
638}
639
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600640VK_LAYER_EXPORT VkResult VKAPI vkResetEvent(VkEvent event)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600641{
642
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600643 VkResult result = nextTable.ResetEvent(event);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600644 return result;
645}
646
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600647VK_LAYER_EXPORT VkResult VKAPI vkCreateQueryPool(VkDevice device, const VkQueryPoolCreateInfo* pCreateInfo, VkQueryPool* pQueryPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600648{
649 char str[1024];
650 if (!pCreateInfo) {
651 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateQueryPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600652 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600653 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600654 else if (!vk_validate_vkquerypoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600655 sprintf(str, "Parameter pCreateInfo to function CreateQueryPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600656 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600657 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600658 VkResult result = nextTable.CreateQueryPool(device, pCreateInfo, pQueryPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600659 return result;
660}
661
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600662VK_LAYER_EXPORT VkResult VKAPI vkGetQueryPoolResults(VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600663{
664
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600665 VkResult result = nextTable.GetQueryPoolResults(queryPool, startQuery, queryCount, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600666 return result;
667}
668
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600669VK_LAYER_EXPORT VkResult VKAPI vkGetFormatInfo(VkDevice device, VkFormat format, VkFormatInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600670{
671 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600672 if (!validate_VkFormat(format)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600673 sprintf(str, "Parameter format to function GetFormatInfo has invalid value of %i.", (int)format);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600674 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600675 }
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600676 if (!validate_VkFormatInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600677 sprintf(str, "Parameter infoType to function GetFormatInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600678 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600679 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600680 VkResult result = nextTable.GetFormatInfo(device, format, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600681 return result;
682}
683
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600684VK_LAYER_EXPORT VkResult VKAPI vkCreateBuffer(VkDevice device, const VkBufferCreateInfo* pCreateInfo, VkBuffer* pBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600685{
686 char str[1024];
687 if (!pCreateInfo) {
688 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600689 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600690 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600691 else if (!vk_validate_vkbuffercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600692 sprintf(str, "Parameter pCreateInfo to function CreateBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600693 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600694 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600695 VkResult result = nextTable.CreateBuffer(device, pCreateInfo, pBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600696 return result;
697}
698
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600699VK_LAYER_EXPORT VkResult VKAPI vkCreateBufferView(VkDevice device, const VkBufferViewCreateInfo* pCreateInfo, VkBufferView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600700{
701 char str[1024];
702 if (!pCreateInfo) {
703 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateBufferView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600704 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600705 }
Courtney Goeltzenleuchterddcb6192015-04-14 18:48:46 -0600706 else if (!vk_validate_vkbufferviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600707 sprintf(str, "Parameter pCreateInfo to function CreateBufferView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600708 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600709 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600710 VkResult result = nextTable.CreateBufferView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600711 return result;
712}
713
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600714void PreCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600715{
716 if(pCreateInfo == nullptr)
717 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600718 char const str[] = "vkCreateImage parameter, VkImageCreateInfo* pCreateInfo, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600719 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600720 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600721 return;
722 }
723
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600724 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600725 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600726 char const str[] = "vkCreateImage parameter, VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO "\
727 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO (precondition).";
728 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600729 return;
730 }
731
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600732 if (!validate_VkImageType(pCreateInfo->imageType))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600733 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600734 char const str[] = "vkCreateImage parameter, VkImageType pCreateInfo->imageType, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600735 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600736 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600737 return;
738 }
739
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600740 if (!validate_VkFormat(pCreateInfo->format))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600741 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600742 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600743 "unrecognized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600744 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600745 return;
746 }
747
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600748 VkFormatProperties properties;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600749 size_t size = sizeof(properties);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600750 VkResult result = nextTable.GetFormatInfo(device, pCreateInfo->format,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600751 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
752 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600753 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600754 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, cannot be "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600755 "validated (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600756 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600757 return;
758 }
759
760 if((properties.linearTilingFeatures) == 0 && (properties.optimalTilingFeatures == 0))
761 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600762 char const str[] = "vkCreateImage parameter, VkFormat pCreateInfo->format, contains "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600763 "unsupported format (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600764 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600765 return;
766 }
767
768 // TODO: Can we check device-specific limits?
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600769 if (!vk_validate_vkextent3d(&pCreateInfo->extent))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600770 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600771 char const str[] = "vkCreateImage parameter, VkExtent3D pCreateInfo->extent, is invalid "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600772 "(precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600773 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600774 return;
775 }
776
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600777 if (!validate_VkImageTiling(pCreateInfo->tiling))
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600778 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600779 char const str[] = "vkCreateImage parameter, VkImageTiling pCreateInfo->tiling, is "\
Jeremy Hayes6b7060b2015-04-07 09:49:05 -0600780 "unrecoginized (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600781 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600782 return;
783 }
784}
785
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600786void PostCreateImage(VkResult result, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600787{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600788 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600789 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600790 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600791 char const str[] = "vkCreateImage failed (postcondition).";
792 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600793 return;
794 }
795
796 if(pImage == nullptr)
797 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600798 char const str[] = "vkCreateImage parameter, VkImage* pImage, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600799 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600800 return;
801 }
802}
803
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600804VK_LAYER_EXPORT VkResult VKAPI vkCreateImage(VkDevice device, const VkImageCreateInfo* pCreateInfo, VkImage* pImage)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600805{
806 PreCreateImage(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600807 VkResult result = nextTable.CreateImage(device, pCreateInfo, pImage);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600808 PostCreateImage(result, pImage);
809 return result;
810}
811
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600812VK_LAYER_EXPORT VkResult VKAPI vkGetImageSubresourceInfo(VkImage image, const VkImageSubresource* pSubresource, VkSubresourceInfoType infoType, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600813{
814 char str[1024];
815 if (!pSubresource) {
816 sprintf(str, "Struct ptr parameter pSubresource to function GetImageSubresourceInfo is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600817 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -0600818 } else if (!vk_validate_vkimagesubresource(pSubresource)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600819 sprintf(str, "Parameter pSubresource to function GetImageSubresourceInfo contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600820 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600821 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600822 if (!validate_VkSubresourceInfoType(infoType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600823 sprintf(str, "Parameter infoType to function GetImageSubresourceInfo has invalid value of %i.", (int)infoType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600824 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600825 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600826 VkResult result = nextTable.GetImageSubresourceInfo(image, pSubresource, infoType, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600827 return result;
828}
829
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600830VK_LAYER_EXPORT VkResult VKAPI vkCreateImageView(VkDevice device, const VkImageViewCreateInfo* pCreateInfo, VkImageView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600831{
832 char str[1024];
833 if (!pCreateInfo) {
834 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateImageView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600835 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600836 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600837 else if (!vk_validate_vkimageviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600838 sprintf(str, "Parameter pCreateInfo to function CreateImageView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600839 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600840 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600841 VkResult result = nextTable.CreateImageView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600842 return result;
843}
844
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600845VK_LAYER_EXPORT VkResult VKAPI vkCreateColorAttachmentView(VkDevice device, const VkColorAttachmentViewCreateInfo* pCreateInfo, VkColorAttachmentView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600846{
847 char str[1024];
848 if (!pCreateInfo) {
849 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateColorAttachmentView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600850 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600851 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600852 else if (!vk_validate_vkcolorattachmentviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600853 sprintf(str, "Parameter pCreateInfo to function CreateColorAttachmentView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600854 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600855 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600856 VkResult result = nextTable.CreateColorAttachmentView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600857 return result;
858}
859
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600860VK_LAYER_EXPORT VkResult VKAPI vkCreateDepthStencilView(VkDevice device, const VkDepthStencilViewCreateInfo* pCreateInfo, VkDepthStencilView* pView)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600861{
862 char str[1024];
863 if (!pCreateInfo) {
864 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDepthStencilView is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600865 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600866 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600867 else if (!vk_validate_vkdepthstencilviewcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600868 sprintf(str, "Parameter pCreateInfo to function CreateDepthStencilView contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600869 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600870 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600871 VkResult result = nextTable.CreateDepthStencilView(device, pCreateInfo, pView);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600872 return result;
873}
874
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600875VK_LAYER_EXPORT VkResult VKAPI vkCreateShader(VkDevice device, const VkShaderCreateInfo* pCreateInfo, VkShader* pShader)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600876{
877 char str[1024];
878 if (!pCreateInfo) {
879 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateShader is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600880 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600881 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600882 else if (!vk_validate_vkshadercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600883 sprintf(str, "Parameter pCreateInfo to function CreateShader contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600884 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600885 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600886 VkResult result = nextTable.CreateShader(device, pCreateInfo, pShader);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600887 return result;
888}
889
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600890VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipeline(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600891{
892 char str[1024];
893 if (!pCreateInfo) {
894 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600895 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600896 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600897 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600898 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600899 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600900 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600901 VkResult result = nextTable.CreateGraphicsPipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600902 return result;
903}
904
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600905VK_LAYER_EXPORT VkResult VKAPI vkCreateGraphicsPipelineDerivative(VkDevice device, const VkGraphicsPipelineCreateInfo* pCreateInfo, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600906{
907 char str[1024];
908 if (!pCreateInfo) {
909 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateGraphicsPipelineDerivative is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600910 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600911 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600912 else if (!vk_validate_vkgraphicspipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600913 sprintf(str, "Parameter pCreateInfo to function CreateGraphicsPipelineDerivative contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600914 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600915 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600916 VkResult result = nextTable.CreateGraphicsPipelineDerivative(device, pCreateInfo, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600917 return result;
918}
919
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600920VK_LAYER_EXPORT VkResult VKAPI vkCreateComputePipeline(VkDevice device, const VkComputePipelineCreateInfo* pCreateInfo, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600921{
922 char str[1024];
923 if (!pCreateInfo) {
924 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateComputePipeline is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600925 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600926 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600927 else if (!vk_validate_vkcomputepipelinecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600928 sprintf(str, "Parameter pCreateInfo to function CreateComputePipeline contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600929 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600930 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600931 VkResult result = nextTable.CreateComputePipeline(device, pCreateInfo, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600932 return result;
933}
934
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600935VK_LAYER_EXPORT VkResult VKAPI vkStorePipeline(VkPipeline pipeline, size_t* pDataSize, void* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600936{
937
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600938 VkResult result = nextTable.StorePipeline(pipeline, pDataSize, pData);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600939 return result;
940}
941
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600942VK_LAYER_EXPORT VkResult VKAPI vkLoadPipeline(VkDevice device, size_t dataSize, const void* pData, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600943{
944
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600945 VkResult result = nextTable.LoadPipeline(device, dataSize, pData, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600946 return result;
947}
948
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600949VK_LAYER_EXPORT VkResult VKAPI vkLoadPipelineDerivative(VkDevice device, size_t dataSize, const void* pData, VkPipeline basePipeline, VkPipeline* pPipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600950{
951
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600952 VkResult result = nextTable.LoadPipelineDerivative(device, dataSize, pData, basePipeline, pPipeline);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600953 return result;
954}
955
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600956VK_LAYER_EXPORT VkResult VKAPI vkCreateSampler(VkDevice device, const VkSamplerCreateInfo* pCreateInfo, VkSampler* pSampler)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600957{
958 char str[1024];
959 if (!pCreateInfo) {
960 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateSampler is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600961 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600962 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600963 else if (!vk_validate_vksamplercreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600964 sprintf(str, "Parameter pCreateInfo to function CreateSampler contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600965 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600966 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600967 VkResult result = nextTable.CreateSampler(device, pCreateInfo, pSampler);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600968 return result;
969}
970
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600971VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayout(VkDevice device, const VkDescriptorSetLayoutCreateInfo* pCreateInfo, VkDescriptorSetLayout* pSetLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600972{
973 char str[1024];
974 if (!pCreateInfo) {
975 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorSetLayout is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600976 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600977 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600978 else if (!vk_validate_vkdescriptorsetlayoutcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600979 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorSetLayout contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600980 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600981 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600982 VkResult result = nextTable.CreateDescriptorSetLayout(device, pCreateInfo, pSetLayout);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600983 return result;
984}
985
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600986VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorSetLayoutChain(VkDevice device, uint32_t setLayoutArrayCount, const VkDescriptorSetLayout* pSetLayoutArray, VkDescriptorSetLayoutChain* pLayoutChain)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600987{
988
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600989 VkResult result = nextTable.CreateDescriptorSetLayoutChain(device, setLayoutArrayCount, pSetLayoutArray, pLayoutChain);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600990 return result;
991}
992
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -0600993VK_LAYER_EXPORT VkResult VKAPI vkBeginDescriptorPoolUpdate(VkDevice device, VkDescriptorUpdateMode updateMode)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600994{
995 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -0600996 if (!validate_VkDescriptorUpdateMode(updateMode)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600997 sprintf(str, "Parameter updateMode to function BeginDescriptorPoolUpdate has invalid value of %i.", (int)updateMode);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -0600998 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -0600999 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001000 VkResult result = nextTable.BeginDescriptorPoolUpdate(device, updateMode);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001001 return result;
1002}
1003
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001004VK_LAYER_EXPORT VkResult VKAPI vkEndDescriptorPoolUpdate(VkDevice device, VkCmdBuffer cmd)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001005{
1006
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001007 VkResult result = nextTable.EndDescriptorPoolUpdate(device, cmd);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001008 return result;
1009}
1010
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001011VK_LAYER_EXPORT VkResult VKAPI vkCreateDescriptorPool(VkDevice device, VkDescriptorPoolUsage poolUsage, uint32_t maxSets, const VkDescriptorPoolCreateInfo* pCreateInfo, VkDescriptorPool* pDescriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001012{
1013 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001014 if (!validate_VkDescriptorPoolUsage(poolUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001015 sprintf(str, "Parameter poolUsage to function CreateDescriptorPool has invalid value of %i.", (int)poolUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001016 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001017 }
1018 if (!pCreateInfo) {
1019 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDescriptorPool is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001020 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001021 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001022 else if (!vk_validate_vkdescriptorpoolcreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001023 sprintf(str, "Parameter pCreateInfo to function CreateDescriptorPool contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001024 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001025 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001026 VkResult result = nextTable.CreateDescriptorPool(device, poolUsage, maxSets, pCreateInfo, pDescriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001027 return result;
1028}
1029
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001030VK_LAYER_EXPORT VkResult VKAPI vkResetDescriptorPool(VkDescriptorPool descriptorPool)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001031{
1032
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001033 VkResult result = nextTable.ResetDescriptorPool(descriptorPool);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001034 return result;
1035}
1036
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001037VK_LAYER_EXPORT VkResult VKAPI vkAllocDescriptorSets(VkDescriptorPool descriptorPool, VkDescriptorSetUsage setUsage, uint32_t count, const VkDescriptorSetLayout* pSetLayouts, VkDescriptorSet* pDescriptorSets, uint32_t* pCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001038{
1039 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001040 if (!validate_VkDescriptorSetUsage(setUsage)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001041 sprintf(str, "Parameter setUsage to function AllocDescriptorSets has invalid value of %i.", (int)setUsage);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001042 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001043 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001044 VkResult result = nextTable.AllocDescriptorSets(descriptorPool, setUsage, count, pSetLayouts, pDescriptorSets, pCount);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001045 return result;
1046}
1047
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001048VK_LAYER_EXPORT void VKAPI vkClearDescriptorSets(VkDescriptorPool descriptorPool, uint32_t count, const VkDescriptorSet* pDescriptorSets)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001049{
1050
1051 nextTable.ClearDescriptorSets(descriptorPool, count, pDescriptorSets);
1052}
1053
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001054VK_LAYER_EXPORT void VKAPI vkUpdateDescriptors(VkDescriptorSet descriptorSet, uint32_t updateCount, const void** ppUpdateArray)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001055{
1056
1057 nextTable.UpdateDescriptors(descriptorSet, updateCount, ppUpdateArray);
1058}
1059
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001060VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicViewportState(VkDevice device, const VkDynamicVpStateCreateInfo* pCreateInfo, VkDynamicVpState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001061{
1062 char str[1024];
1063 if (!pCreateInfo) {
1064 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicViewportState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001065 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001066 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001067 else if (!vk_validate_vkdynamicvpstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001068 sprintf(str, "Parameter pCreateInfo to function CreateDynamicViewportState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001069 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001070 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001071 VkResult result = nextTable.CreateDynamicViewportState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001072 return result;
1073}
1074
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001075VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicRasterState(VkDevice device, const VkDynamicRsStateCreateInfo* pCreateInfo, VkDynamicRsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001076{
1077 char str[1024];
1078 if (!pCreateInfo) {
1079 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicRasterState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001080 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001081 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001082 else if (!vk_validate_vkdynamicrsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001083 sprintf(str, "Parameter pCreateInfo to function CreateDynamicRasterState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001084 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001085 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001086 VkResult result = nextTable.CreateDynamicRasterState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001087 return result;
1088}
1089
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001090VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicColorBlendState(VkDevice device, const VkDynamicCbStateCreateInfo* pCreateInfo, VkDynamicCbState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001091{
1092 char str[1024];
1093 if (!pCreateInfo) {
1094 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicColorBlendState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001095 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001096 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001097 else if (!vk_validate_vkdynamiccbstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001098 sprintf(str, "Parameter pCreateInfo to function CreateDynamicColorBlendState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001099 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001100 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001101 VkResult result = nextTable.CreateDynamicColorBlendState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001102 return result;
1103}
1104
Courtney Goeltzenleuchterfcf855f2015-04-10 16:24:50 -06001105VK_LAYER_EXPORT VkResult VKAPI vkCreateDynamicDepthStencilState(VkDevice device, const VkDynamicDsStateCreateInfo* pCreateInfo, VkDynamicDsState* pState)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001106{
1107 char str[1024];
1108 if (!pCreateInfo) {
1109 sprintf(str, "Struct ptr parameter pCreateInfo to function CreateDynamicDepthStencilState is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001110 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001111 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001112 else if (!vk_validate_vkdynamicdsstatecreateinfo(pCreateInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001113 sprintf(str, "Parameter pCreateInfo to function CreateDynamicDepthStencilState contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001114 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001115 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001116 VkResult result = nextTable.CreateDynamicDepthStencilState(device, pCreateInfo, pState);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001117 return result;
1118}
1119
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001120void PreCreateCommandBuffer(VkDevice device, const VkCmdBufferCreateInfo* pCreateInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001121{
1122 if(device == nullptr)
1123 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001124 char const str[] = "vkCreateCommandBuffer parameter, VkDevice device, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001125 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001126 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001127 return;
1128 }
1129
1130 if(pCreateInfo == nullptr)
1131 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001132 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBufferCreateInfo* pCreateInfo, is "\
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001133 "nullptr (precondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001134 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001135 return;
1136 }
1137
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001138 if(pCreateInfo->sType != VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001139 {
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001140 char const str[] = "vkCreateCommandBuffer parameter, VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO "\
1141 "pCreateInfo->sType, is not VK_STRUCTURE_TYPE_CMD_BUFFER_CREATE_INFO (precondition).";
1142 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001143 return;
1144 }
1145}
1146
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001147void PostCreateCommandBuffer(VkResult result, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001148{
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001149 if(result != VK_SUCCESS)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001150 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001151 // TODO: Spit out VkResult value.
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001152 char const str[] = "vkCreateCommandBuffer failed (postcondition).";
1153 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001154 return;
1155 }
1156
1157 if(pCmdBuffer == nullptr)
1158 {
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001159 char const str[] = "vkCreateCommandBuffer parameter, VkCmdBuffer* pCmdBuffer, is nullptr (postcondition).";
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001160 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001161 return;
1162 }
1163}
1164
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001165VK_LAYER_EXPORT VkResult VKAPI vkCreateCommandBuffer(VkDevice device,
1166 const VkCmdBufferCreateInfo* pCreateInfo, VkCmdBuffer* pCmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001167{
1168 PreCreateCommandBuffer(device, pCreateInfo);
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001169 VkResult result = nextTable.CreateCommandBuffer(device, pCreateInfo, pCmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001170 PostCreateCommandBuffer(result, pCmdBuffer);
1171 return result;
1172}
1173
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001174VK_LAYER_EXPORT VkResult VKAPI vkBeginCommandBuffer(VkCmdBuffer cmdBuffer, const VkCmdBufferBeginInfo* pBeginInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001175{
1176 char str[1024];
1177 if (!pBeginInfo) {
1178 sprintf(str, "Struct ptr parameter pBeginInfo to function BeginCommandBuffer is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001179 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001180 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001181 else if (!vk_validate_vkcmdbufferbegininfo(pBeginInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001182 sprintf(str, "Parameter pBeginInfo to function BeginCommandBuffer contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001183 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001184 }
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001185 VkResult result = nextTable.BeginCommandBuffer(cmdBuffer, pBeginInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001186 return result;
1187}
1188
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001189VK_LAYER_EXPORT VkResult VKAPI vkEndCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001190{
1191
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001192 VkResult result = nextTable.EndCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001193 return result;
1194}
1195
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001196VK_LAYER_EXPORT VkResult VKAPI vkResetCommandBuffer(VkCmdBuffer cmdBuffer)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001197{
1198
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001199 VkResult result = nextTable.ResetCommandBuffer(cmdBuffer);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001200 return result;
1201}
1202
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001203VK_LAYER_EXPORT void VKAPI vkCmdBindPipeline(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkPipeline pipeline)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001204{
1205 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001206 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001207 sprintf(str, "Parameter pipelineBindPoint to function CmdBindPipeline has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001208 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001209 }
1210 nextTable.CmdBindPipeline(cmdBuffer, pipelineBindPoint, pipeline);
1211}
1212
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001213VK_LAYER_EXPORT void VKAPI vkCmdBindDynamicStateObject(VkCmdBuffer cmdBuffer, VkStateBindPoint stateBindPoint, VkDynamicStateObject state)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001214{
1215 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001216 if (!validate_VkStateBindPoint(stateBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001217 sprintf(str, "Parameter stateBindPoint to function CmdBindDynamicStateObject has invalid value of %i.", (int)stateBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001218 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001219 }
1220 nextTable.CmdBindDynamicStateObject(cmdBuffer, stateBindPoint, state);
1221}
1222
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001223VK_LAYER_EXPORT void VKAPI vkCmdBindDescriptorSets(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, VkDescriptorSetLayoutChain layoutChain, uint32_t layoutChainSlot, uint32_t count, const VkDescriptorSet* pDescriptorSets, const uint32_t* pUserData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001224{
1225 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001226 if (!validate_VkPipelineBindPoint(pipelineBindPoint)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001227 sprintf(str, "Parameter pipelineBindPoint to function CmdBindDescriptorSets has invalid value of %i.", (int)pipelineBindPoint);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001228 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001229 }
1230 nextTable.CmdBindDescriptorSets(cmdBuffer, pipelineBindPoint, layoutChain, layoutChainSlot, count, pDescriptorSets, pUserData);
1231}
1232
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001233VK_LAYER_EXPORT void VKAPI vkCmdBindVertexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t binding)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001234{
1235
1236 nextTable.CmdBindVertexBuffer(cmdBuffer, buffer, offset, binding);
1237}
1238
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001239VK_LAYER_EXPORT void VKAPI vkCmdBindIndexBuffer(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, VkIndexType indexType)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001240{
1241 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001242 if (!validate_VkIndexType(indexType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001243 sprintf(str, "Parameter indexType to function CmdBindIndexBuffer has invalid value of %i.", (int)indexType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001244 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001245 }
1246 nextTable.CmdBindIndexBuffer(cmdBuffer, buffer, offset, indexType);
1247}
1248
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001249VK_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 -06001250{
1251
1252 nextTable.CmdDraw(cmdBuffer, firstVertex, vertexCount, firstInstance, instanceCount);
1253}
1254
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001255VK_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 -06001256{
1257
1258 nextTable.CmdDrawIndexed(cmdBuffer, firstIndex, indexCount, vertexOffset, firstInstance, instanceCount);
1259}
1260
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001261VK_LAYER_EXPORT void VKAPI vkCmdDrawIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001262{
1263
1264 nextTable.CmdDrawIndirect(cmdBuffer, buffer, offset, count, stride);
1265}
1266
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001267VK_LAYER_EXPORT void VKAPI vkCmdDrawIndexedIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset, uint32_t count, uint32_t stride)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001268{
1269
1270 nextTable.CmdDrawIndexedIndirect(cmdBuffer, buffer, offset, count, stride);
1271}
1272
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001273VK_LAYER_EXPORT void VKAPI vkCmdDispatch(VkCmdBuffer cmdBuffer, uint32_t x, uint32_t y, uint32_t z)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001274{
1275
1276 nextTable.CmdDispatch(cmdBuffer, x, y, z);
1277}
1278
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001279VK_LAYER_EXPORT void VKAPI vkCmdDispatchIndirect(VkCmdBuffer cmdBuffer, VkBuffer buffer, VkGpuSize offset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001280{
1281
1282 nextTable.CmdDispatchIndirect(cmdBuffer, buffer, offset);
1283}
1284
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001285VK_LAYER_EXPORT void VKAPI vkCmdCopyBuffer(VkCmdBuffer cmdBuffer, VkBuffer srcBuffer, VkBuffer destBuffer, uint32_t regionCount, const VkBufferCopy* pRegions)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001286{
1287 char str[1024];
1288 uint32_t i;
1289 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001290 if (!vk_validate_vkbuffercopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001291 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001292 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001293 }
1294 }
1295 nextTable.CmdCopyBuffer(cmdBuffer, srcBuffer, destBuffer, regionCount, pRegions);
1296}
1297
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001298VK_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 -06001299{
1300 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001301 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001302 sprintf(str, "Parameter srcImageLayout to function CmdCopyImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001303 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001304 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001305 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001306 sprintf(str, "Parameter destImageLayout to function CmdCopyImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001307 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001308 }
1309 uint32_t i;
1310 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001311 if (!vk_validate_vkimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001312 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001313 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001314 }
1315 }
1316 nextTable.CmdCopyImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1317}
1318
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001319VK_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 -06001320{
1321 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001322 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001323 sprintf(str, "Parameter srcImageLayout to function CmdBlitImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001324 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001325 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001326 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001327 sprintf(str, "Parameter destImageLayout to function CmdBlitImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001328 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001329 }
1330 uint32_t i;
1331 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001332 if (!vk_validate_vkimageblit(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001333 sprintf(str, "Parameter pRegions[%i] to function CmdBlitImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001334 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001335 }
1336 }
1337 nextTable.CmdBlitImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
1338}
1339
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001340VK_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 -06001341{
1342 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001343 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001344 sprintf(str, "Parameter destImageLayout to function CmdCopyBufferToImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001345 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001346 }
1347 uint32_t i;
1348 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001349 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001350 sprintf(str, "Parameter pRegions[%i] to function CmdCopyBufferToImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001351 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001352 }
1353 }
1354 nextTable.CmdCopyBufferToImage(cmdBuffer, srcBuffer, destImage, destImageLayout, regionCount, pRegions);
1355}
1356
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001357VK_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 -06001358{
1359 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001360 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001361 sprintf(str, "Parameter srcImageLayout to function CmdCopyImageToBuffer has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001362 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001363 }
1364 uint32_t i;
1365 for (i = 0; i < regionCount; i++) {
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001366 if (!vk_validate_vkbufferimagecopy(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001367 sprintf(str, "Parameter pRegions[%i] to function CmdCopyImageToBuffer contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001368 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001369 }
1370 }
1371 nextTable.CmdCopyImageToBuffer(cmdBuffer, srcImage, srcImageLayout, destBuffer, regionCount, pRegions);
1372}
1373
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001374VK_LAYER_EXPORT void VKAPI vkCmdCloneImageData(VkCmdBuffer cmdBuffer, VkImage srcImage, VkImageLayout srcImageLayout, VkImage destImage, VkImageLayout destImageLayout)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001375{
1376 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001377 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001378 sprintf(str, "Parameter srcImageLayout to function CmdCloneImageData has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001379 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001380 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001381 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001382 sprintf(str, "Parameter destImageLayout to function CmdCloneImageData has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001383 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001384 }
1385 nextTable.CmdCloneImageData(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout);
1386}
1387
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001388VK_LAYER_EXPORT void VKAPI vkCmdUpdateBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize dataSize, const uint32_t* pData)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001389{
1390
1391 nextTable.CmdUpdateBuffer(cmdBuffer, destBuffer, destOffset, dataSize, pData);
1392}
1393
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001394VK_LAYER_EXPORT void VKAPI vkCmdFillBuffer(VkCmdBuffer cmdBuffer, VkBuffer destBuffer, VkGpuSize destOffset, VkGpuSize fillSize, uint32_t data)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001395{
1396
1397 nextTable.CmdFillBuffer(cmdBuffer, destBuffer, destOffset, fillSize, data);
1398}
1399
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001400VK_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 -06001401{
1402 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001403 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001404 sprintf(str, "Parameter imageLayout to function CmdClearColorImage has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001405 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001406 }
1407 uint32_t i;
1408 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001409 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001410 sprintf(str, "Parameter pRanges[%i] to function CmdClearColorImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001411 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001412 }
1413 }
1414 nextTable.CmdClearColorImage(cmdBuffer, image, imageLayout, color, rangeCount, pRanges);
1415}
1416
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001417VK_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 -06001418{
1419 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001420 if (!validate_VkImageLayout(imageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001421 sprintf(str, "Parameter imageLayout to function CmdClearDepthStencil has invalid value of %i.", (int)imageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001422 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001423 }
1424 uint32_t i;
1425 for (i = 0; i < rangeCount; i++) {
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001426 if (!vk_validate_vkimagesubresourcerange(&pRanges[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001427 sprintf(str, "Parameter pRanges[%i] to function CmdClearDepthStencil contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001428 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001429 }
1430 }
1431 nextTable.CmdClearDepthStencil(cmdBuffer, image, imageLayout, depth, stencil, rangeCount, pRanges);
1432}
1433
Tony Barbour11f74372015-04-13 15:02:52 -06001434VK_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 -06001435{
1436 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001437 if (!validate_VkImageLayout(srcImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001438 sprintf(str, "Parameter srcImageLayout to function CmdResolveImage has invalid value of %i.", (int)srcImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001439 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001440 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001441 if (!validate_VkImageLayout(destImageLayout)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001442 sprintf(str, "Parameter destImageLayout to function CmdResolveImage has invalid value of %i.", (int)destImageLayout);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001443 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001444 }
1445 uint32_t i;
Tony Barbour11f74372015-04-13 15:02:52 -06001446 for (i = 0; i < regionCount; i++) {
1447 if (!vk_validate_vkimageresolve(&pRegions[i])) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001448 sprintf(str, "Parameter pRects[%i] to function CmdResolveImage contains an invalid value.", i);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001449 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001450 }
1451 }
Tony Barbour11f74372015-04-13 15:02:52 -06001452 nextTable.CmdResolveImage(cmdBuffer, srcImage, srcImageLayout, destImage, destImageLayout, regionCount, pRegions);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001453}
1454
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001455VK_LAYER_EXPORT void VKAPI vkCmdSetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001456{
1457 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001458 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001459 sprintf(str, "Parameter pipeEvent to function CmdSetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001460 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001461 }
1462 nextTable.CmdSetEvent(cmdBuffer, event, pipeEvent);
1463}
1464
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001465VK_LAYER_EXPORT void VKAPI vkCmdResetEvent(VkCmdBuffer cmdBuffer, VkEvent event, VkPipeEvent pipeEvent)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001466{
1467 char str[1024];
Courtney Goeltzenleuchter33318172015-04-10 17:06:20 -06001468 if (!validate_VkPipeEvent(pipeEvent)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001469 sprintf(str, "Parameter pipeEvent to function CmdResetEvent has invalid value of %i.", (int)pipeEvent);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001470 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001471 }
1472 nextTable.CmdResetEvent(cmdBuffer, event, pipeEvent);
1473}
1474
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001475VK_LAYER_EXPORT void VKAPI vkCmdWaitEvents(VkCmdBuffer cmdBuffer, const VkEventWaitInfo* pWaitInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001476{
1477 char str[1024];
1478 if (!pWaitInfo) {
1479 sprintf(str, "Struct ptr parameter pWaitInfo to function CmdWaitEvents is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001480 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001481 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001482 else if (!vk_validate_vkeventwaitinfo(pWaitInfo)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001483 sprintf(str, "Parameter pWaitInfo to function CmdWaitEvents contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001484 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001485 }
1486 nextTable.CmdWaitEvents(cmdBuffer, pWaitInfo);
1487}
1488
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001489VK_LAYER_EXPORT void VKAPI vkCmdPipelineBarrier(VkCmdBuffer cmdBuffer, const VkPipelineBarrier* pBarrier)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001490{
1491 char str[1024];
1492 if (!pBarrier) {
1493 sprintf(str, "Struct ptr parameter pBarrier to function CmdPipelineBarrier is NULL.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001494 layerCbMsg(VK_DBG_MSG_UNKNOWN, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001495 }
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001496 else if (!vk_validate_vkpipelinebarrier(pBarrier)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001497 sprintf(str, "Parameter pBarrier to function CmdPipelineBarrier contains an invalid value.");
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001498 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001499 }
1500 nextTable.CmdPipelineBarrier(cmdBuffer, pBarrier);
1501}
1502
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001503VK_LAYER_EXPORT void VKAPI vkCmdBeginQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot, VkFlags flags)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001504{
1505
1506 nextTable.CmdBeginQuery(cmdBuffer, queryPool, slot, flags);
1507}
1508
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001509VK_LAYER_EXPORT void VKAPI vkCmdEndQuery(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t slot)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001510{
1511
1512 nextTable.CmdEndQuery(cmdBuffer, queryPool, slot);
1513}
1514
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001515VK_LAYER_EXPORT void VKAPI vkCmdResetQueryPool(VkCmdBuffer cmdBuffer, VkQueryPool queryPool, uint32_t startQuery, uint32_t queryCount)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001516{
1517
1518 nextTable.CmdResetQueryPool(cmdBuffer, queryPool, startQuery, queryCount);
1519}
1520
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001521VK_LAYER_EXPORT void VKAPI vkCmdWriteTimestamp(VkCmdBuffer cmdBuffer, VkTimestampType timestampType, VkBuffer destBuffer, VkGpuSize destOffset)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001522{
1523 char str[1024];
Courtney Goeltzenleuchterdfd1b2a2015-04-15 00:14:36 -06001524 if (!validate_VkTimestampType(timestampType)) {
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001525 sprintf(str, "Parameter timestampType to function CmdWriteTimestamp has invalid value of %i.", (int)timestampType);
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001526 layerCbMsg(VK_DBG_MSG_ERROR, VK_VALIDATION_LEVEL_0, NULL, 0, 1, "PARAMCHECK", str);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001527 }
1528 nextTable.CmdWriteTimestamp(cmdBuffer, timestampType, destBuffer, destOffset);
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
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001541VK_LAYER_EXPORT void VKAPI vkCmdLoadAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer srcBuffer, VkGpuSize 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
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001551VK_LAYER_EXPORT void VKAPI vkCmdSaveAtomicCounters(VkCmdBuffer cmdBuffer, VkPipelineBindPoint pipelineBindPoint, uint32_t startCounter, uint32_t counterCount, VkBuffer destBuffer, VkGpuSize 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],
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001633 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1634 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,
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001761 VK_INFO_TYPE_FORMAT_PROPERTIES, &size, &properties);
1762 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)
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001876 return VK_ERROR_OUT_OF_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
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001922VK_LAYER_EXPORT VkResult VKAPI vkDbgSetObjectTag(VkBaseObject object, size_t tagSize, const void* pTag)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001923{
1924
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001925 VkResult result = nextTable.DbgSetObjectTag(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
1955#if defined(__linux__) || defined(XCB_NVIDIA)
1956
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001957VK_LAYER_EXPORT VkResult VKAPI vkWsiX11AssociateConnection(VkPhysicalGpu gpu, const VK_WSI_X11_CONNECTION_INFO* pConnectionInfo)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001958{
Jon Ashburn630e44f2015-04-08 21:33:34 -06001959 pCurObj = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001960 loader_platform_thread_once(&tabOnce, initParamChecker);
1961
Jon Ashburn630e44f2015-04-08 21:33:34 -06001962 VkResult result = nextTable.WsiX11AssociateConnection(gpu, pConnectionInfo);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001963 return result;
1964}
1965
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001966VK_LAYER_EXPORT VkResult VKAPI vkWsiX11GetMSC(VkDevice device, xcb_window_t window, xcb_randr_crtc_t crtc, uint64_t* pMsc)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001967{
1968
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001969 VkResult result = nextTable.WsiX11GetMSC(device, window, crtc, pMsc);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001970 return result;
1971}
1972
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001973VK_LAYER_EXPORT VkResult VKAPI vkWsiX11CreatePresentableImage(VkDevice device, const VK_WSI_X11_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo, VkImage* pImage, VkGpuMemory* pMem)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001974{
1975
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001976 VkResult result = nextTable.WsiX11CreatePresentableImage(device, pCreateInfo, pImage, pMem);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001977 return result;
1978}
1979
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001980VK_LAYER_EXPORT VkResult VKAPI vkWsiX11QueuePresent(VkQueue queue, const VK_WSI_X11_PRESENT_INFO* pPresentInfo, VkFence fence)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001981{
1982
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001983 VkResult result = nextTable.WsiX11QueuePresent(queue, pPresentInfo, fence);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001984 return result;
1985}
1986
1987#endif
1988
Courtney Goeltzenleuchter9cc421e2015-04-08 15:36:08 -06001989#include "vk_generic_intercept_proc_helper.h"
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06001990VK_LAYER_EXPORT void* VKAPI vkGetProcAddr(VkPhysicalGpu gpu, const char* funcName)
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001991{
Jon Ashburn301c5f02015-04-06 10:58:22 -06001992 VkBaseLayerObject* gpuw = (VkBaseLayerObject *) gpu;
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06001993 void* addr;
1994 if (gpu == NULL)
1995 return NULL;
1996 pCurObj = gpuw;
1997 loader_platform_thread_once(&tabOnce, initParamChecker);
1998
1999 addr = layer_intercept_proc(funcName);
2000 if (addr)
2001 return addr;
2002 else {
2003 if (gpuw->pGPA == NULL)
2004 return NULL;
Courtney Goeltzenleuchter382489d2015-04-10 08:34:15 -06002005 return gpuw->pGPA((VkPhysicalGpu)gpuw->nextObject, funcName);
Jeremy Hayesc6cfa572015-04-06 13:46:11 -06002006 }
2007}
2008